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

247 lines
16 KiB
Markdown
Raw Normal View History

# Pentesting de Web API
2023-06-05 18:33:24 +00:00
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2023-06-05 18:33:24 +00:00
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="../../.gitbook/assets/image (3) (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 mismo:
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
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 una solicitud de ejemplo 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, existen 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/) (consulta la demostración 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 de las 10 principales vulnerabilidades de la 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 **deshabilitadas** en la entrada del usuario.
También puedes intentar usar etiquetas CDATA para insertar payloads (siempre que el XML sea válido)
![](<../../.gitbook/assets/image (534).png>)
### 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**](../../pentesting-web/cors-bypass.md) 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**](../../pentesting-web/csrf-cross-site-request-forgery.md) 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](../../pentesting-web/xxe-xee-xml-external-entity.md).
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)`
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 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)](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 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:
\
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.png)
[**Versión en PDF**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.pdf) **|** [**Versión en 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)
### 🚪 Segundo paso: `{{Ataque}}`
#### Ataque a RESTful y SOAP:
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.png)\
[**Versión en PDF**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.pdf) **|** [**Versión en XMind**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.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:
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.png)\
[**Versión en PDF**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.pdf) **|** [**Versión en 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** 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](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](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): 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**](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 de API.
2023-06-05 18:33:24 +00:00
* [**restler-fuzzer**](https://github.com/microsoft/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**](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, fuzzifica los campos para validar si tu aplicación puede manejar los parámetros fuzzificados.
* [**API-fuzzer**](https://github.com/Fuzzapi/API-fuzzer): La gema API\_Fuzzer acepta una solicitud de API como entrada y devuelve las posibles vulnerabilidades 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 de solicitudes a una URL (o URLs) objetivo _simultáneamente_, y luego compara las respuestas del servidor para determinar su unicidad.
2023-06-05 18:33:24 +00:00
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
2023-06-05 18:33:24 +00:00
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
Obtén acceso hoy mismo:
2023-06-05 18:33:24 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2023-06-05 18:33:24 +00:00
</details>