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

16 KiB

Pentesting de Web API

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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

{% 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 de las 10 principales vulnerabilidades de la OWASP para APIs.

Trucos

SOAP/XML

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

También puedes intentar usar etiquetas CDATA para insertar payloads (siempre que el XML sea válido)

Verificar acceso

Por lo general, algunos puntos finales de la API requerirán 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 finalizar la solicitud con las credenciales del dominio del atacante, se puede causar mucho daño a través de CSRF en víctimas autenticadas.

Patrones

Busca patrones de API dentro de la API y trata de usarlos para descubrir más.
Si encuentras /api/albums/<album_id>/photos/<photo_id>** ** también podrías probar 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 otros 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 del método de solicitud HTTP

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

Tipo de contenido de la solicitud

Intenta jugar con los siguientes tipos de contenido (modificando en consecuencia 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 funcionan, 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 las inyecciones XXE.

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

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

Juega con las rutas

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

Verifica posibles versiones

Es posible que las versiones antiguas aún se estén utilizando y sean más vulnerables que los últimos puntos finales

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

Verifica posibles versiones (enfoque automatizado)

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

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


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

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

🛡️ Hoja de trucos del Imperio de la Seguridad de la 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 la API y las pruebas de penetración de la API. Nuestros mapas mentales y recursos se basan en el OWASP TOP 10 API, nuestra experiencia en pruebas de penetración y otros recursos para ofrecer el recurso de seguridad de API y pruebas de penetración más avanzado y preciso en la WEB.

🚪 Primer paso: {{Reconocimiento}}

El primer paso para ingresar al Imperio de la Seguridad de la API es saber cómo recopilar información sobre la infraestructura de la API y cómo realizar una reconstrucción poderosa en la API para extraer las puertas ocultas que comprometen toda la infraestructura, por lo tanto, proporcionamos este mapa mental actualizado de Reconocimiento de API con las últimas herramientas y metodologías en la reconstrucción de API:


Versión en PDF | Versión en XMind

⚔️ Armas que necesitarás:

🏋️ Pon a prueba tus habilidades y armas:

🚪 Segundo paso: {{Ataque}}

Ataque a RESTful y SOAP:


Versión en PDF | Versión en XMind\

Ataque a GraphQL:

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


Versión en PDF | Versión en XMind\

Owasp API Security Top 10

Lee este documento para aprender cómo buscar y explotar las 10 principales vulnerabilidades de API de Owasp: https://github.com/OWASP/API-Security/blob/master/2019/es/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 Logger++ para buscar 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: Herramienta de ataque API personalizable de Imperva que 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 de API.
  • restler-fuzzer: RESTler es la primera herramienta de fuzzing de API REST con estado para probar automáticamente servicios en la nube a través de sus API REST y encontrar errores de seguridad y confiabilidad en estos servicios. Para un servicio en la nube dado con una especificación OpenAPI/Swagger, RESTler analiza toda su especificación y luego genera y ejecuta pruebas que ejercen el servicio a través de su API REST.
  • 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, fuzzifica los campos para validar si tu aplicación puede manejar los parámetros fuzzificados.
  • API-fuzzer: La gema API_Fuzzer acepta una solicitud de API como entrada y devuelve las posibles vulnerabilidades en la API.
  • race-the-web: Pruebas de condiciones de carrera en aplicaciones web enviando un número especificado de solicitudes a una URL (o URLs) objetivo simultáneamente, y luego compara las respuestas del servidor para determinar su unicidad.

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

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

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥