Server Side Inclusion/Edge Side Inclusion Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
(Introdução retirada da documentação do Apache)
SSI (Server Side Includes) são diretivas que são colocadas em páginas HTML e avaliadas no servidor enquanto as páginas estão sendo servidas. Elas permitem que você adicione conteúdo gerado dinamicamente a uma página HTML existente, sem precisar servir a página inteira através de um programa CGI ou outra tecnologia dinâmica. Por exemplo, você pode colocar uma diretiva em uma página HTML existente, como:
<!--#echo var="DATE_LOCAL" -->
E, quando a página é servida, esse fragmento será avaliado e substituído pelo seu valor:
Tuesday, 15-Jan-2013 19:28:54 EST
A decisão de quando usar SSI e quando ter sua página totalmente gerada por algum programa geralmente é uma questão de quão estática é a página e quanto precisa ser recalculado toda vez que a página é servida. SSI é uma ótima maneira de adicionar pequenas informações, como a hora atual - mostrada acima. Mas se a maior parte da sua página está sendo gerada no momento em que é servida, você precisa procurar alguma outra solução.
Você pode inferir a presença de SSI se a aplicação web usar arquivos com as extensões .shtml
, .shtm
ou .stm
, mas não é apenas esse o caso.
Uma expressão SSI típica tem o seguinte formato:
Há um problema em armazenar em cache informações ou aplicações dinâmicas, pois parte do conteúdo pode ter variado na próxima vez que o conteúdo for recuperado. É para isso que ESI é usado, para indicar usando tags ESI o conteúdo dinâmico que precisa ser gerado antes de enviar a versão em cache. se um atacante conseguir injetar uma tag ESI dentro do conteúdo em cache, então, ele poderá injetar conteúdo arbitrário no documento antes que seja enviado aos usuários.
O seguinte cabeçalho em uma resposta do servidor significa que o servidor está usando ESI:
Se você não conseguir encontrar este cabeçalho, o servidor pode estar usando ESI de qualquer forma. Uma abordagem de exploração cega também pode ser usada já que uma solicitação deve chegar ao servidor dos atacantes:
GoSecure criou uma tabela para entender possíveis ataques que podemos tentar contra diferentes softwares compatíveis com ESI, dependendo da funcionalidade suportada:
Includes: Suporta a diretiva <esi:includes>
Vars: Suporta a diretiva <esi:vars>
. Útil para contornar Filtros XSS
Cookie: Cookies do documento são acessíveis ao mecanismo ESI
Cabeçalhos Upstream Necessários: Aplicações substitutas não processarão declarações ESI a menos que a aplicação upstream forneça os cabeçalhos
Lista de Permissão de Hosts: Neste caso, inclusões ESI só são possíveis a partir de hosts de servidor permitidos, tornando SSRF, por exemplo, apenas possível contra esses hosts
Software | Includes | Vars | Cookies | Cabeçalhos Upstream Necessários | Lista de Permissão de Hosts |
Squid3 | Sim | Sim | Sim | Sim | Não |
Varnish Cache | Sim | Não | Não | Sim | Sim |
Fastly | Sim | Não | Não | Não | Sim |
Akamai ESI Test Server (ETS) | Sim | Sim | Sim | Não | Não |
NodeJS esi | Sim | Sim | Sim | Não | Não |
NodeJS nodesi | Sim | Não | Não | Não | Opcional |
A seguinte diretiva ESI carregará um arquivo arbitrário dentro da resposta do servidor
Roubo remoto de cookie
Roubar cookie HTTP_ONLY com XSS refletindo-o na resposta:
Não confunda isso com uma "Inclusão de Arquivo Local":
O seguinte adicionará um cabeçalho Location
à resposta
Adicionar cabeçalho na solicitação forçada
Adicione cabeçalho na resposta (útil para contornar "Content-Type: text/json" em uma resposta com XSS)
Isso enviará informações de depuração incluídas na resposta:
Ao especificar o valor xslt
para o parâmetro dca, é viável incluir eXtensible Stylesheet Language Transformations (XSLT)
baseado em ESI. A inclusão faz com que o substituto HTTP recupere os arquivos XML e XSLT, sendo que o último filtra o primeiro. Esses arquivos XML são exploráveis para ataques de XML External Entity (XXE), permitindo que atacantes executem ataques SSRF. No entanto, a utilidade dessa abordagem é limitada, uma vez que ESI já serve como um vetor SSRF. Devido à ausência de suporte na biblioteca subjacente Xalan, DTDs externos não são processados, impedindo a extração de arquivos locais.
Arquivo XSLT:
Verifique a página XSLT:
XSLT Server Side Injection (Extensible Stylesheet Language Transformations)Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)