27

File Inclusion vulnerabilities in PHP

  • Upload
    mixlol

  • View
    305

  • Download
    3

Embed Size (px)

Citation preview

Page 1: File Inclusion vulnerabilities in PHP
Page 2: File Inclusion vulnerabilities in PHP

File Inclusion

[+] O que é?[+] O que é?

– – É uma técnica (maliciosa no caso) que É uma técnica (maliciosa no caso) que ocorre na funções ocorre na funções include()/require()include()/require() do do PHPPHP, ela é possível quando tais funções , ela é possível quando tais funções não foram devidamente sanitizadas não foram devidamente sanitizadas possibilitando a inclusão de arquivos.possibilitando a inclusão de arquivos.

*Lembrando que nesta apresentação será mostrado*Lembrando que nesta apresentação será mostrado File Inclusion File Inclusion em em servers usando servers usando LinuxLinux que utilizam que utilizam PHP PHP, contudo está técnica não está , contudo está técnica não está restrito apenas a essas tecnologias.restrito apenas a essas tecnologias.

Page 3: File Inclusion vulnerabilities in PHP

File Inclusion

[+] O que é (funções)?[+] O que é (funções)?

– – IInclude()nclude(): Executa arquivos dentro do : Executa arquivos dentro do php scriptphp script no qual se encontra a função. no qual se encontra a função. Útil para refletir o mesmo conteúdo no site.Útil para refletir o mesmo conteúdo no site.

– – Require()Require(): Idêntica ao : Idêntica ao include()include() exceto exceto por uma coisa: Caso aconteça um erro, o por uma coisa: Caso aconteça um erro, o script é interrompido ao contrário do script é interrompido ao contrário do include() include() no qual o erro é ignorado.no qual o erro é ignorado.

Page 4: File Inclusion vulnerabilities in PHP

File Inclusion

[+] [+] Include()Include() demo: demo:

Page 5: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Tipos de inclusão:[+] Tipos de inclusão:

– – Existe dois tipo de inclusão, a remota Existe dois tipo de inclusão, a remota (A preferida dos atacantes) e local. Para (A preferida dos atacantes) e local. Para fins de fins de estastitica, a empresa de segurança , a empresa de segurança da informação, da informação, ImpervaImperva, relatou que 21% , relatou que 21% dos ataques em aplicações web em 2011 dos ataques em aplicações web em 2011 foram utilizadas foram utilizadas File InclusionFile Inclusion..

Page 6: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Como funciona?[+] Como funciona?

Código vulnerável:Código vulnerável:

Simples ataque:Simples ataque:

Page 7: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Remote File Inclusion:[+] Remote File Inclusion:

– – allow_url_include = “on”allow_url_include = “on”

– – A mais fácil e preferida dos atacantes.A mais fácil e preferida dos atacantes.

– – Porém a menos comum já que desde Porém a menos comum já que desde da versão 5.2 do da versão 5.2 do phpphp, o , o allow_url_includeallow_url_include vem desativado.vem desativado.

Page 8: File Inclusion vulnerabilities in PHP

File Inclusion

Page 9: File Inclusion vulnerabilities in PHP

File Inclusion

*Shell? É uma web backdoor, se a linguagem na qual foi escrita é compativel com o web server então é *Shell? É uma web backdoor, se a linguagem na qual foi escrita é compativel com o web server então é possível a execução dos mais variados comandos que a linguagem permite. Para roda-la em formato .txt possível a execução dos mais variados comandos que a linguagem permite. Para roda-la em formato .txt devemos utilizar '?' no final.devemos utilizar '?' no final.

Page 10: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Local File Inclusion:[+] Local File Inclusion:

– – Mais comum, portanto mais focada.Mais comum, portanto mais focada.

– – Pode levar a execução de um RFIPode levar a execução de um RFI

Page 11: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Local File Inclusion[+] Local File InclusionSe conseguirmos visualizar, veremos o Se conseguirmos visualizar, veremos o

nosso nosso User AgentUser Agent. Lembre que qualquer . Lembre que qualquer campo de um campo de um http header (User agent, http header (User agent, cookie, etc.cookie, etc.) é passível de inclusão . Então ) é passível de inclusão . Então utilizaremos o utilizaremos o Mozzila addon: Tamper DataMozzila addon: Tamper Data para modificar o nosso para modificar o nosso requestrequest que contem o que contem o User Agent. User Agent.

Php codePhp code usando a função usando a função system system que permite a que permite a execução de comandos.execução de comandos.

Page 12: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Técnicas alternativas:[+] Técnicas alternativas:

– – Foram mostradas as técnicas Foram mostradas as técnicas clássicas, entretanto ás vezes o clássicas, entretanto ás vezes o apache/IIS/etc. apache/IIS/etc. Não tem permissão para Não tem permissão para acessar tais arquivos como acessar tais arquivos como /etc/passwd, /etc/passwd, /proc/self/environ, etc. /proc/self/environ, etc. Ou simplesmente Ou simplesmente não conseguimosnão conseguimos.. Então é sempre bom Então é sempre bom testar essas técnicas alternativas a seguir.testar essas técnicas alternativas a seguir.

* Lembrando que será usado * Lembrando que será usado php wrappersphp wrappers que são nada mais menos que que são nada mais menos que streamsstreams, funções , funções nativas que permitem a leitura e escrita de arquivos no servernativas que permitem a leitura e escrita de arquivos no server

Page 13: File Inclusion vulnerabilities in PHP

File Inclusion

[+] PHP://filter/:[+] PHP://filter/:

* Leitura do conteúdo de qualquer arquivo no server. O conteúdo é convertido em * Leitura do conteúdo de qualquer arquivo no server. O conteúdo é convertido em base64base64 e exibido e exibido na página.na página.

Page 14: File Inclusion vulnerabilities in PHP

File Inclusion

[+]: PHP://input[+]: PHP://input

* Usando o * Usando o http Post methodhttp Post method, mandamos um , mandamos um php code.php code.

Page 15: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Php://data[+] Php://data

– – Caso o Caso o magic_quotes_gpcmagic_quotes_gpc esteja ativado teremos que esteja ativado teremos que converter o converter o php codephp code em em base64base64 e usar a variável global e usar a variável global REQUESTREQUEST. . magic_quotes_gpcmagic_quotes_gpc é uma configuração do é uma configuração do phpphp na na qual qualquer apostrofo, aspas, etc, são substituídos por uma qual qualquer apostrofo, aspas, etc, são substituídos por uma barra (\)barra (\)

Page 16: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Técnicas avançadas:[+] Técnicas avançadas:

– – As técnicas alternativas, por si só já são As técnicas alternativas, por si só já são avançadas visto que poucos atacantes as avançadas visto que poucos atacantes as usam.usam.

– – As avançadas que serão mostradas As avançadas que serão mostradas envolve envolve poisoning logs*poisoning logs* na qual é um na qual é um pouco restrito pois geralmente o acesso pouco restrito pois geralmente o acesso não é permitido. não é permitido.

* poisoning logs? Sim, haja vista que o site pode estar recebendo vários acessos ao mesmo * poisoning logs? Sim, haja vista que o site pode estar recebendo vários acessos ao mesmo tempo, teremos que literalmente floodar os logs com nossas requisições.tempo, teremos que literalmente floodar os logs com nossas requisições.

Page 17: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Error Log Poisoning:[+] Error Log Poisoning:

–– Mandando um Mandando um php code php code por por telnettelnet, o parâmetro , o parâmetro cmdcmd ficará gravado nos ficará gravado nos logs. Se tivermos acesso, basta acessa-los e depois executar outros logs. Se tivermos acesso, basta acessa-los e depois executar outros comandoscomandos

Page 18: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Error Log Poisoning:[+] Error Log Poisoning:

– – Caso não seja possível por Caso não seja possível por telnet, telnet, podemos enviar o podemos enviar o php code php code pelo browser.pelo browser.

*Url enconding? SIm, no começo da era da Internet, o conjunto de caracteres ASCII *Url enconding? SIm, no começo da era da Internet, o conjunto de caracteres ASCII foram os primeiros a existir permitindo a troca de informações, exemplo, o apostrofo em foram os primeiros a existir permitindo a troca de informações, exemplo, o apostrofo em url encoding/ASCII é %27url encoding/ASCII é %27

Page 19: File Inclusion vulnerabilities in PHP

File Inclusion

* Lista de possíveis locais onde os logs podem ser armazenados* Lista de possíveis locais onde os logs podem ser armazenados

Page 20: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Access Log Poisoning:[+] Access Log Poisoning:

– – Mesmo conceito que a técnica Mesmo conceito que a técnica Error LogError Log poisoningpoisoning porém mesma execução que o porém mesma execução que o /proc/self/environ/proc/self/environ

Page 21: File Inclusion vulnerabilities in PHP

File Inclusion

[+] /proc/self/fd/*:[+] /proc/self/fd/*:

– – Mesmo conceito que a técnica Mesmo conceito que a técnica Error LogError Log poisoning, poisoning, contudo o log só sera contudo o log só sera armazenado caso o armazenado caso o requestrequest resulte em um resulte em um 404 http code404 http code. Tem a mesma execução que . Tem a mesma execução que o o /proc/self/environ /proc/self/environ entranto o entranto o header fieldheader field é o é o RefererReferer

Page 22: File Inclusion vulnerabilities in PHP

File Inclusion

* Na segunda imagem, podemos ver os logs armazenados indicando requests que * Na segunda imagem, podemos ver os logs armazenados indicando requests que resultaram em um 404 http coderesultaram em um 404 http code

Page 23: File Inclusion vulnerabilities in PHP

File Inclusion

– – Após gerarmos um log com 404 http code e no campo do referer Após gerarmos um log com 404 http code e no campo do referer um php code, ao acessarmos novamente o /proc/self/fd/* veremos um php code, ao acessarmos novamente o /proc/self/fd/* veremos que o comando foi executado. Sendo assim, nos dá a possibilidade que o comando foi executado. Sendo assim, nos dá a possibilidade de upar nossa shellde upar nossa shell

Page 24: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Métodos de evasão[+] Métodos de evasão

Upload (alternativos)Upload (alternativos)

Nullbytes*Nullbytes*

* Ás vezes programadores botam “php” no final da função* Ás vezes programadores botam “php” no final da função include() include(), então se tentarmos um , então se tentarmos um file inclusionfile inclusion ficaria ficaria /etc/passwd.php. /etc/passwd.php. Para isso os Para isso os NullbytesNullbytes interrompe a leitura da url. interrompe a leitura da url.

Page 25: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Como se proteger?[+] Como se proteger?

Page 26: File Inclusion vulnerabilities in PHP

File Inclusion

[+] Agradecimentos:[+] Agradecimentos:

Antagonism e HoodedR0b!n (Hackforums Antagonism e HoodedR0b!n (Hackforums members)members)

DVWA developers (Vulnerable web DVWA developers (Vulnerable web application)application)

Imperva (Security enterprise)Imperva (Security enterprise)

Page 27: File Inclusion vulnerabilities in PHP