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:
- Si quieres ver a tu empresa anunciada en HackTricks o descargar HackTricks en PDF, consulta los PLANES DE SUSCRIPCIÓN!
- Consigue el merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección de NFTs exclusivos
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de HackTricks y HackTricks Cloud.
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:
- Servicios Web (SOAP/XML)
- La documentación utiliza el formato WSDL y generalmente se guarda en la ruta
?wsdl
comohttps://api.example.com/api/?wsdl
- Un ejemplo de esta documentación se puede encontrar en http://www.dneonline.com/calculator.asmx (documento WSDL en http://www.dneonline.com/calculator.asmx?wsdl) y puedes ver un ejemplo de solicitud llamando al método
Add
en http://www.dneonline.com/calculator.asmx?op=Add - Para analizar estos archivos y crear solicitudes de ejemplo puedes usar la herramienta SOAPUI o la extensión WSDLer de Burp Suite.
- APIs REST (JSON)
- La documentación estándar es el archivo WADL. Encuentra un ejemplo aquí: https://www.w3.org/Submission/wadl/. Sin embargo, hay otros motores de representación de API más amigables para los desarrolladores como https://swagger.io/tools/swagger-ui/ (revisa la demo en la página)
- Para analizar estos archivos y crear solicitudes de ejemplo puedes usar la herramienta Postman
- GraphQL
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:
⚔️ Armas que necesitarás:
🏋️ Pon a prueba tus habilidades y armas:
🚪 Segunda puerta: {{Atacando}}
Atacando RESTful & SOAP:
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:
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:
- Si quieres ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF Consulta los PLANES DE SUSCRIPCIÓN!
- Consigue el merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección de NFTs exclusivos
- Únete al 💬 grupo de Discord o al grupo de telegram o sigue a Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de github HackTricks y HackTricks Cloud.