Apache
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Extensões PHP executáveis
Verifique quais extensões estão sendo executadas pelo servidor Apache. Para procurá-las, você pode executar:
Além disso, alguns lugares onde você pode encontrar essa configuração são:
CVE-2021-41773
Confusion Attack
Esses tipos de ataques foram introduzidos e documentados pela Orange neste post do blog e o seguinte é um resumo. O ataque de "confusão" basicamente explora como os dezenas de módulos que trabalham juntos para criar um Apache não funcionam perfeitamente sincronizados e fazer com que alguns deles modifiquem alguns dados inesperados pode causar uma vulnerabilidade em um módulo posterior.
Filename Confusion
Truncation
O mod_rewrite
irá truncar o conteúdo de r->filename
após o caractere ?
(modules/mappers/mod_rewrite.c#L4141). Isso não está totalmente errado, pois a maioria dos módulos tratará r->filename
como uma URL. Mas em outras ocasiões isso será tratado como um caminho de arquivo, o que causaria um problema.
Path Truncation
É possível abusar do mod_rewrite
como no seguinte exemplo de regra para acessar outros arquivos dentro do sistema de arquivos, removendo a última parte do caminho esperado, adicionando simplesmente um ?
:
Atribuição Enganosa do RewriteFlag
Na seguinte regra de reescrita, desde que a URL termine em .php, ela será tratada e executada como php. Portanto, é possível enviar uma URL que termina em .php após o caractere ?
enquanto carrega no caminho um tipo diferente de arquivo (como uma imagem) com código php malicioso dentro dele:
Bypass de ACL
É possível acessar arquivos que o usuário não deveria conseguir acessar, mesmo que o acesso deva ser negado com configurações como:
Isso ocorre porque, por padrão, o PHP-FPM receberá URLs que terminam em .php
, como http://server/admin.php%3Fooo.php
e porque o PHP-FPM removerá qualquer coisa após o caractere ?
, a URL anterior permitirá carregar /admin.php
, mesmo que a regra anterior a proíba.
Confusão do DocumentRoot
Um fato interessante sobre o Apache é que a reescrita anterior tentará acessar o arquivo tanto do documentRoot quanto da raiz. Assim, uma solicitação para https://server/abouth.html
verificará o arquivo em /var/www/html/about.html
e /about.html
no sistema de arquivos. O que basicamente pode ser explorado para acessar arquivos no sistema de arquivos.
Divulgação de Código Fonte do Lado do Servidor
Divulgar Código Fonte CGI
Basta adicionar um %3F no final para vazar o código fonte de um módulo cgi:
Divulgar Código Fonte PHP
Se um servidor tiver diferentes domínios, sendo um deles um domínio estático, isso pode ser explorado para percorrer o sistema de arquivos e vazar código php:
Manipulação de Gadgets Locais
O principal problema com o ataque anterior é que, por padrão, a maioria dos acessos ao sistema de arquivos será negada, como na configuração padrão do Apache HTTP Server:
No entanto, os sistemas operacionais Debian/Ubuntu permitem por padrão /usr/share
:
Portanto, seria possível abusar de arquivos localizados dentro de /usr/share
nessas distribuições.
Gadget Local para Divulgação de Informações
Apache HTTP Server com websocketd pode expor o script dump-env.php em /usr/share/doc/websocketd/examples/php/, que pode vazar variáveis de ambiente sensíveis.
Servidores com Nginx ou Jetty podem expor informações sensíveis de aplicações web (por exemplo, web.xml) através de suas raízes web padrão localizadas em /usr/share:
/usr/share/nginx/html/
/usr/share/jetty9/etc/
/usr/share/jetty9/webapps/
Gadget Local para XSS
No Ubuntu Desktop com LibreOffice instalado, explorar o recurso de troca de idioma dos arquivos de ajuda pode levar a Cross-Site Scripting (XSS). Manipular a URL em /usr/share/libreoffice/help/help.html pode redirecionar para páginas maliciosas ou versões mais antigas através de unsafe RewriteRule.
Gadget Local para LFI
Se PHP ou certos pacotes front-end como JpGraph ou jQuery-jFeed estiverem instalados, seus arquivos podem ser explorados para ler arquivos sensíveis como /etc/passwd:
/usr/share/doc/libphp-jpgraph-examples/examples/show-source.php
/usr/share/javascript/jquery-jfeed/proxy.php
/usr/share/moodle/mod/assignment/type/wims/getcsv.php
Gadget Local para SSRF
Utilizando MagpieRSS's magpie_debug.php em /usr/share/php/magpierss/scripts/magpie_debug.php, uma vulnerabilidade SSRF pode ser facilmente criada, fornecendo um gateway para mais explorações.
Gadget Local para RCE
As oportunidades para Remote Code Execution (RCE) são vastas, com instalações vulneráveis como um PHPUnit desatualizado ou phpLiteAdmin. Estes podem ser explorados para executar código arbitrário, demonstrando o extenso potencial da manipulação de gadgets locais.
Jailbreak a partir de Gadgets Locais
Também é possível fazer jailbreak a partir das pastas permitidas seguindo symlinks gerados por softwares instalados nessas pastas, como:
Cacti Log:
/usr/share/cacti/site/
->/var/log/cacti/
Solr Data:
/usr/share/solr/data/
->/var/lib/solr/data
Solr Config:
/usr/share/solr/conf/
->/etc/solr/conf/
MediaWiki Config:
/usr/share/mediawiki/config/
->/var/lib/mediawiki/config/
SimpleSAMLphp Config:
/usr/share/simplesamlphp/config/
->/etc/simplesamlphp/
Além disso, abusando de symlinks foi possível obter RCE no Redmine.
Confusão de Manipuladores
Este ataque explora a sobreposição de funcionalidade entre as diretivas AddHandler
e AddType
, que ambas podem ser usadas para habilitar o processamento PHP. Originalmente, essas diretivas afetavam campos diferentes (r->handler
e r->content_type
, respectivamente) na estrutura interna do servidor. No entanto, devido a código legado, o Apache trata essas diretivas de forma intercambiável sob certas condições, convertendo r->content_type
em r->handler
se o primeiro estiver definido e o último não.
Além disso, no Apache HTTP Server (server/config.c#L420
), se r->handler
estiver vazio antes de executar ap_run_handler()
, o servidor usa r->content_type
como o manipulador, efetivamente tornando AddType
e AddHandler
idênticos em efeito.
Sobrescrever Manipulador para Divulgar Código Fonte PHP
Nesta palestra, foi apresentada uma vulnerabilidade onde um Content-Length
incorreto enviado por um cliente pode fazer com que o Apache retorne o código fonte PHP. Isso ocorreu devido a um problema de manuseio de erros com ModSecurity e o Apache Portable Runtime (APR), onde uma resposta dupla leva a sobrescrever r->content_type
para text/html
.
Como o ModSecurity não lida corretamente com valores de retorno, ele retornaria o código PHP e não o interpretaria.
Sobrescrever Manipulador para XXXX
TODO: Orange ainda não divulgou essa vulnerabilidade
Invocar Manipuladores Arbitrários
Se um atacante conseguir controlar o cabeçalho Content-Type
em uma resposta do servidor, ele poderá invocar manipuladores de módulo arbitrários. No entanto, no ponto em que o atacante controla isso, a maior parte do processo da solicitação já terá sido concluída. No entanto, é possível reiniciar o processo de solicitação abusando do cabeçalho Location
porque se o Status
retornado for 200 e o cabeçalho Location
começar com uma /
, a resposta é tratada como uma Redireção do Lado do Servidor e deve ser processada.
De acordo com RFC 3875 (especificação sobre CGI) na Seção 6.2.2 define um comportamento de Resposta de Redirecionamento Local:
O script CGI pode retornar um caminho URI e uma string de consulta (‘local-pathquery’) para um recurso local em um campo de cabeçalho Location. Isso indica ao servidor que ele deve reprocessar a solicitação usando o caminho especificado.
Portanto, para realizar este ataque é necessário uma das seguintes vulnerabilidades:
Injeção CRLF nos cabeçalhos de resposta CGI
SSRF com controle completo dos cabeçalhos de resposta
Manipulador Arbitrário para Divulgação de Informações
Por exemplo, /server-status
deve ser acessível apenas localmente:
É possível acessá-lo definindo o Content-Type
como server-status
e o cabeçalho Location começando com /
Manipulador Arbitrário para SSRF Completo
Redirecionando para mod_proxy
para acessar qualquer protocolo em qualquer URL:
No entanto, o cabeçalho X-Forwarded-For
é adicionado, impedindo o acesso aos endpoints de metadados da nuvem.
Manipulador Arbitrário para Acessar o Socket de Domínio Unix Local
Acesse o Socket de Domínio Unix local do PHP-FPM para executar um backdoor PHP localizado em /tmp/
:
Manipulador Arbitrário para RCE
A imagem oficial do PHP Docker inclui o PEAR (Pearcmd.php
), uma ferramenta de gerenciamento de pacotes PHP via linha de comando, que pode ser explorada para obter RCE:
Verifique o Resumo de LFI do Docker PHP, escrito por Phith0n para os detalhes desta técnica.
Referências
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated