Server Side Inclusion/Edge Side Inclusion Injection
Informações Básicas sobre Inclusão do Lado do Servidor
(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 por meio 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, este fragmento será avaliado e substituído por seu valor:
Terça-feira, 15-Jan-2013 19:28:54 EST
A decisão de quando usar SSI e quando ter sua página inteiramente gerada por algum programa geralmente é uma questão de quanta parte da página é estática e quanto precisa ser recalculado toda vez que a página é servida. SSI é uma ótima maneira de adicionar pequenos pedaços de informação, como o horário atual - mostrado acima. Mas se a maioria da sua página está sendo gerada no momento em que é servida, você precisa procurar por 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 é o único caso.
Uma expressão SSI típica tem o seguinte formato:
Verificação
Inclusão Lateral
Existe um problema em armazenar em cache informações ou aplicativos dinâmicos, pois parte do conteúdo pode ter variações para a próxima vez que o conteúdo for recuperado. É para isso que o 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 for capaz de 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.
Detecção de ESI
O seguinte cabeçalho em uma resposta do servidor significa que o servidor está usando ESI:
Se não conseguir encontrar este cabeçalho, o servidor pode estar a usar ESI de qualquer forma. Uma abordagem de exploração cega também pode ser usada pois um pedido deve chegar ao servidor do atacante:
Exploração de ESI
GoSecure criou uma tabela para entender possíveis ataques que podemos tentar contra diferentes softwares capazes de ESI, dependendo da funcionalidade suportada:
Includes: Suporta a diretiva
<esi:includes>
Vars: Suporta a diretiva
<esi:vars>
. Útil para contornar Filtros XSSCookie: Os cookies do documento são acessíveis ao mecanismo ESI
Upstream Headers Required: As aplicações substitutas não processarão declarações ESI a menos que a aplicação upstream forneça os cabeçalhos
Host Allowlist: Neste caso, as inclusões ESI são possíveis apenas a partir de hosts de servidor permitidos, tornando SSRF, por exemplo, apenas possível contra esses hosts
Software | Includes | Vars | Cookies | Upstream Headers Required | Host Whitelist |
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 |
XSS
A seguinte diretiva ESI carregará um arquivo arbitrário dentro da resposta do servidor
Bypass proteção XSS do cliente
Roubo de Cookie
Roubo remoto de cookie
Roubar cookie HTTP_ONLY com XSS refletindo-o na resposta:
Arquivo Local Privado
Não confunda isso com uma "Inclusão de Arquivo Local":
CRLF
CRLF (Carriage Return Line Feed) refers to the sequence of characters used to denote a line break in text files. In web security, CRLF injection involves inserting these special characters into input fields to manipulate the application's behavior. This can lead to various attacks such as HTTP response splitting and server-side request forgery.
Redirecionamento Aberto
O seguinte irá adicionar um cabeçalho Location
à resposta
Adicionar Cabeçalho
Adicionar cabeçalho na solicitação forçada
Adicionar cabeçalho na resposta (útil para contornar "Content-Type: text/json" em uma resposta com XSS)
CRLF em Adicionar cabeçalho (CVE-2019-2438)
Akamai debug
Isso enviará informações de depuração incluídas na resposta:
ESI + XSLT = XXE
Ao especificar o valor xslt
para o parâmetro dca, é viável incluir ESI baseado em eXtensible Stylesheet Language Transformations (XSLT)
. A inclusão faz com que o servidor HTTP recupere os arquivos XML e XSLT, sendo que este último filtra o primeiro. Tais arquivos XML são exploráveis para ataques de XML External Entity (XXE), permitindo que invasores executem ataques SSRF. No entanto, a utilidade desse método é limitada, uma vez que as inclusões ESI já servem como um vetor SSRF. Devido à ausência de suporte na biblioteca Xalan subjacente, DTDs externos não são processados, impedindo a extração de arquivos locais.
Ficheiro XSLT:
Verifique a página XSLT:
pageXSLT Server Side Injection (Extensible Stylesheet Language Transformations)Referências
Lista de Detecção de Força Bruta
Last updated