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

245 lines
14 KiB
Markdown
Raw Normal View History

# Pentesting de API Web
2023-06-05 18:33:24 +00:00
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2023-06-05 18:33:24 +00:00
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**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2023-06-05 18:33:24 +00:00
</details>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2023-06-05 18:33:24 +00:00
Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** con las herramientas comunitarias **más avanzadas** del mundo.\
Obtén acceso hoy:
2023-06-05 18:33:24 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Información Básica
2023-06-05 18:33:24 +00:00
Principal:
* **Servicios Web (SOAP/XML)**
* La documentación utiliza el formato **WSDL** y generalmente se guarda en la ruta `?wsdl` como `https://api.example.com/api/?wsdl`
* Un ejemplo de esta documentación se puede encontrar en [http://www.dneonline.com/calculator.asmx](http://www.dneonline.com/calculator.asmx) (documento WSDL en [http://www.dneonline.com/calculator.asmx?wsdl](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](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/](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/](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**](graphql.md)
## Laboratorios
* [**VAmPI**](https://github.com/erev0s/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**](../../pentesting-web/xxe-xee-xml-external-entity.md), 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)
![](<../../.gitbook/assets/image (534).png>)
### 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**](../../pentesting-web/cors-bypass.md) 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**](../../pentesting-web/csrf-cross-site-request-forgery.md) 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](../../pentesting-web/xxe-xee-xml-external-entity.md).
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)](https://www.linkedin.com/in/momen-eldawakhly-3b6250204)\
\
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:
\
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.png)
[**Versión PDF**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.pdf) **|** [**Versión XMind**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.xmind)
#### ⚔️ Armas que necesitarás:
* [BurpSuite](https://portswigger.net/burp/releases)
* [FFUF](https://github.com/ffuf/ffuf)
* [Arjun](https://github.com/InsiderPhD/Arjun)
* [Postman](https://www.postman.com/downloads/)
* [SecLists](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
* [FuzzDB](https://github.com/fuzzdb-project/fuzzdb)
* [SoapUI](https://www.soapui.org/downloads/soapui/)
* [GraphQL Voyager](https://apis.guru/graphql-voyager/)
* [Kiterunner](https://github.com/assetnote/kiterunner)
* [unfurl](https://github.com/tomnomnom/unfurl)
#### 🏋️ Pon a prueba tus habilidades y armas:
* [vapi](https://github.com/roottusk/vapi)
* [Generic-University](https://github.com/InsiderPhD/Generic-University)
### 🚪 Segunda puerta: `{{Atacando}}`
#### Atacando RESTful & SOAP:
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.png)\
[**Versión PDF**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.pdf) **|** [**Versión XMind**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.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:
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.png)\
[**Versión PDF**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.pdf) **|** [**Versión XMind**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.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](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](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)
## Lista de posibles puntos finales de API
[https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)
## Herramientas
* [**kiterunner**](https://github.com/assetnote/kiterunner): Excelente herramienta para **descubrir puntos finales de API.**
2023-06-05 18:33:24 +00:00
```bash
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**](https://github.com/imperva/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**](https://github.com/flipkart-incubator/Astra): Otra herramienta para pruebas de api para encontrar varias vulnerabilidades web diferentes.
* [**Susanoo**](https://github.com/ant4g0nist/Susanoo): Escáner de vulnerabilidades API.
* [**restler-fuzzer**](https://github.com/microsoft/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**](https://github.com/Teebytes/TnT-Fuzzer)**:** TnT-Fuzzer es un fuzzer OpenAPI (swagger) escrito en python.
* [**APIFuzzer**](https://github.com/KissPeter/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**](https://github.com/Fuzzapi/API-fuzzer): La gema API\_Fuzzer acepta una solicitud de API como entrada y devuelve vulnerabilidades posibles en la API.
* [**race-the-web**](https://github.com/TheHackerDev/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.
2023-06-05 18:33:24 +00:00
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2023-06-05 18:33:24 +00:00
Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas**.\
Obtén Acceso Hoy:
2023-06-05 18:33:24 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>Aprende hacking de AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
2023-06-05 18:33:24 +00:00
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2023-06-05 18:33:24 +00:00
</details>