hacktricks/network-services-pentesting/pentesting-web/web-api-pentesting.md

14 KiB

Pentesting de API Web

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Usa Trickest para construir y automatizar flujos de trabajo con las herramientas comunitarias más avanzadas del mundo.
Obtén acceso hoy:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Información Básica

Principal:

Laboratorios

  • VAmPI: VAmPI es una API vulnerable hecha con Flask e incluye vulnerabilidades del top 10 de OWASP para APIs.

Trucos

SOAP/XML

Este tipo de APIs pueden ser vulnerables a XXE, pero generalmente las Declaraciones DTD están prohibidas en la entrada del usuario.

También podrías intentar usar etiquetas CDATA para insertar cargas útiles (siempre que el XML sea válido)

Verificar Acceso

Usualmente algunos puntos finales de la API van a necesitar más privilegios que otros. Siempre intenta acceder a los puntos finales más privilegiados desde cuentas menos privilegiadas (no autorizadas) para ver si es posible.

CORS

Siempre verifica la configuración de CORS de la API, ya que si permite enviar solicitudes con las credenciales desde el dominio del atacante, se puede hacer mucho daño a través de CSRF desde víctimas autenticadas.

Patrones

Busca patrones de API dentro de la api e intenta usarlos para descubrir más.
Si encuentras /api/albums/<album_id>/photos/<photo_id>** ** podrías intentar también cosas como /api/posts/<post_id>/comment/. Usa algún fuzzer para descubrir estos nuevos puntos finales.

Agregar parámetros

Algo como el siguiente ejemplo podría darte acceso al álbum de fotos de otro usuario:
/api/MyPictureList → /api/MyPictureList?user_id=<other_user_id>

Reemplazar parámetros

Puedes intentar fuzzear parámetros o usar parámetros que hayas visto en diferentes puntos finales para intentar acceder a otra información

Por ejemplo, si ves algo como: /api/albums?album_id=<album id>

Podrías reemplazar el parámetro album_id con algo completamente diferente y potencialmente obtener otros datos: /api/albums?account_id=<account id>

Contaminación de parámetros

/api/account?id=<tu id de cuenta> → /api/account?id=<tu id de cuenta>&id=<id de cuenta del administrador>

Parámetro comodín

Intenta usar los siguientes símbolos como comodines: *, %, _, .

  • /api/users/*
  • /api/users/%
  • /api/users/_
  • /api/users/.

Cambio de método de solicitud HTTP

Puedes intentar usar los métodos HTTP: GET, POST, PUT, DELETE, PATCH, INVENTED para comprobar si el servidor web te proporciona información inesperada con ellos.

Tipo de contenido de la solicitud

Intenta jugar entre los siguientes tipos de contenido (modificando acordemente el cuerpo de la solicitud) para hacer que el servidor web se comporte de manera inesperada:

  • x-www-form-urlencoded --> user=test
  • application/xml --> <user>test</user>
  • application/json --> {"user": "test"}

Tipos de parámetros

Si los datos JSON están funcionando, intenta enviar tipos de datos inesperados como:

  • {"username": "John"}
  • {"username": true}
  • {"username": null}
  • {"username": 1}
  • {"username": [true]}
  • {"username": ["John", true]}
  • {"username": {"$neq": "lalala"}}
  • cualquier otra combinación que puedas imaginar

Si puedes enviar datos XML, verifica inyecciones de XXE.

Si envías datos POST regulares, intenta enviar arreglos y diccionarios:

  • username[]=John
  • username[$neq]=lalala

Jugar con rutas

/files/..%2f..%2f + ID de la víctima + %2f + nombre de archivo de la víctima

Verificar posibles versiones

Las versiones antiguas pueden seguir en uso y ser más vulnerables que los puntos finales más recientes

  • /api/v1/login
  • /api/v2/login\
  • /api/CharityEventFeb2020/user/pp/<ID>
  • /api/CharityEventFeb2021/user/pp/<ID>

Verificar posibles versiones (enfoque automatizado)

Extensión AutoRepeater de Burp: Agrega una regla de reemplazo

  • Tipo: Cadena de solicitud
  • Coincidir: v2 (versión superior)
  • Reemplazar: v1 (versión inferior)

🛡️ Hoja de Trucos del Imperio de Seguridad de API


Autor de la Hoja de Trucos: Momen Eldawakhly (Cyber Guy)

En este repositorio encontrarás: Mapas mentales, consejos y trucos, recursos y todo lo relacionado con la Seguridad de API y el Pentesting de API. Nuestros mapas mentales y recursos se basan en OWASP TOP 10 API, nuestra experiencia en Pentesting y otros recursos para ofrecer el recurso de seguridad y pentesting de API más avanzado y preciso en la WEB!!

🚪 Primera puerta: {{Recon}}

La primera puerta para entrar al Imperio de Seguridad de API es saber cómo recopilar información sobre la infraestructura de la API y cómo realizar un recon potente en la API para extraer las puertas ocultas que te permitirán comprometer toda la infraestructura, por lo tanto, proporcionamos este mapa mental de recon de API actualizado con las últimas herramientas y metodologías en recon de API:


Versión PDF | Versión XMind

⚔️ Armas que necesitarás:

🏋️ Pon a prueba tus habilidades y armas:

🚪 Segunda puerta: {{Atacando}}

Atacando RESTful & SOAP:


Versión PDF | Versión XMind\

Atacando GraphQL:

Debido a los ataques limitados en GraphQL, intentamos generar todos los posibles ataques debido a nuestra experiencia en pruebas de APIs en el siguiente mapa mental:


Versión PDF | Versión XMind\

Owasp API Security Top 10

Lee este documento para aprender cómo buscar y explotar vulnerabilidades de Owasp Top 10 API: https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf

Lista de Verificación de Seguridad de API

{% embed url="https://github.com/shieldfy/API-Security-Checklist" %}

Filtros de Logger++ para la Búsqueda de Vulnerabilidades de API

https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters

Lista de posibles puntos finales de API

https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d

Herramientas

  • kiterunner: Excelente herramienta para descubrir puntos finales de API.
kr scan https://domain.com/api/ -w routes-large.kite -x 20 # Downloaded from kiterunner repo
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
  • automatic-api-attack-tool: La herramienta de ataque API personalizable de Imperva toma una especificación de API como entrada, genera y ejecuta ataques basados en ella como salida.
  • Astra: Otra herramienta para pruebas de api para encontrar varias vulnerabilidades web diferentes.
  • Susanoo: Escáner de vulnerabilidades API.
  • restler-fuzzer: RESTler es la primera herramienta de fuzzing REST API con estado para probar automáticamente servicios en la nube a través de sus REST APIs y encontrar errores de seguridad y fiabilidad en estos servicios. Para un servicio en la nube dado con una especificación OpenAPI/Swagger, RESTler analiza toda la especificación, y luego genera y ejecuta pruebas que ejercitan el servicio a través de su REST API.
  • TnT-Fuzzer: TnT-Fuzzer es un fuzzer OpenAPI (swagger) escrito en python.
  • APIFuzzer: APIFuzzer lee la descripción de tu API y paso a paso hace fuzzing de los campos para validar si tu aplicación puede manejar los parámetros alterados.
  • API-fuzzer: La gema API_Fuzzer acepta una solicitud de API como entrada y devuelve vulnerabilidades posibles en la API.
  • race-the-web: Pruebas de condiciones de carrera en aplicaciones web enviando un número especificado por el usuario de solicitudes a una URL objetivo (o URLs) simultáneamente, y luego compara las respuestas del servidor en busca de unicidad.

Usa Trickest para construir y automatizar flujos de trabajo fácilmente, impulsados por las herramientas comunitarias más avanzadas.
Obtén Acceso Hoy:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Aprende hacking de AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: