Api testing guide
Guía sobre Api Testing
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Explicación técnica de vulnerabilidades en APIS. Detallamos cómo identificar y explotar estas vulnerabilidades. Además, exploramos estrategias clave para prevenirlas
Testeo de APIs
Las APIs (Application Programming Interfaces) permiten que los sistemas y aplicaciones de software se comuniquen y compartan datos. Testear las APIs es importante porque las vulnerabilidades en las APIs pueden comprometer la confidencialidad, integridad y disponibilidad de un sitio web
Todos los sitios web dinámicos están compuestos por APIs, por lo que vulnerabilidades web clásicas, como un SQL injection también pueden considerarse en el testeo de APIs. En este artículo, veremos como testear APIs que no son utilizadas completamente por el front-end del sitio web, con un enfoque en APIs RESTful y JSON. También veremos cómo testear y explotar un server-side parameter pollution, ya que puede afectar a APIs internas
Reconocimiento de la API
El reconocimiento de una API consiste en obtener toda la información posible sobre la API para descubrir la superficie de ataque disponible
Primero debemos identificar los endpoints de la API. Estos son ubicaciones donde la API recibe solicitudes sobre un recurso específico en su servidor. Por ejemplo, esta solicitud por GET:
1
2
GET /api/books HTTP/1.1
Host: example.com
El endpoint de la API es /api/books, lo que provoca una interacción con la API para obtener una lista de libros. Otro endpoint podría ser /api/books/mystery, que devolvería una lista de libros de misterio
Una vez identificados los endpoints, debemos determinar cómo interactuar con ellos. Esto nos permitirá construir solicitudes HTTP válidas para testear la API. Debemos averiguar lo siguiente:
Los
datos de entradaqueprocesalaAPI, incluidosparámetros obligatorios y opcionalesLos
tipos de solicitudesqueaceptalaAPI, incluidos `métodos HTTP y media types compatibles (image/jpeg, image/png, video/mp4, application/pdf)Los
rate limitsymecanismos de autenticación
Documentación de la API
La documentación de API suele existir para que los desarrolladores sepan cómo usarla e integrarla. Esta documentación puede ser:
Documentación legible por humanos- Estádocumentaciónincluyeexplicaciones detalladas,ejemplosyescenarios de usoDocumentación legible por máquinas- Estadocumentaciónestá pensada para serprocesadaporsoftwarey seescribeen `formatos estructurados como JSON o XML (por ejemplo, OpenAPI o Swagger)
Muchas APIs públicas tienen su documentación disponible, particularmente cuando la API es de acceso público o tiene un propósito comercial. Si es así, debemos comenzar el reconocimiento revisando esa documentación
Descubrir la documentación
Aunque la documentación no sea pública, es posible que podamos acceder a ella examinando aplicaciones que utilizan la API
Podemos usar el escáner de Burpsuite para rastrear la API, o navegar manualmente. El objetivo es buscar endpoints que suelan apuntar a documentación. Por ejemplo:
1
2
3
/api
/swagger/index.html
/openapi.json
Si identificamos un endpoint para un recurso, debemos asegurarnos de investigar la ruta base. Por ejemplo, si identificamos el siguiente resource endpoint:
1
/api/swagger/v1/users/123
Deberíamos investigar las siguientes rutas:
1
2
3
/api/swagger/v1
/api/swagger
/api
También podemos usar una diccionario de rutas comunes y aplicar fuzzing para localizar documentación oculta
En este laboratorio vemos como aplicar esta técnica:
- Exploiting an API endpoint using documentation - https://justice-reaper.github.io/posts/API-Testing-Lab-1/
Usando documentación legible por máquinas
Podemos usar herramientas automatizadas para analizar la documentación que es legible por máquinas de una API
Podemos usar el escáner de Burpsuite para rastrear y auditar documentación OpenAPI, o cualquier documentación en formato JSON o YAML. También podemos analizar documentación de OpenAPI con el la extensión OpenAPI Parser de Burpsuite
Además, podemos usar herramientas especializadas para testear los endpoints documentados, como Postman o SoapUI
Identificar los endpoints de la API
También podemos recopilar mucha información al examinar las aplicaciones que utilizan la API. A menudo vale la pena realizar este paso, incluso si tenemos acceso a la documentación de la API, ya que en ocasiones la documentación puede ser imprecisa o estar desactualizada
Podemos utilizar el escáner de Burpsuite para crawlear la aplicación y, posteriormente, investigar manualmente la superficie de ataque mediante el navegador
Durante la exploración de la aplicación, debemos buscar patrones que sugieran la presencia de endpoints de la API en la estructura de la URL, como /api/. También debemos estar atentos a los archivos JavaScript, ya que estos pueden contener referencias a endpoints de la API que no hayamos activado directamente a través del navegador web. El escáner de Burpsuite extrae automáticamente algunos endpoints durante los rastreos, pero para una extracción más exhaustiva, es recomendable usar la extensión JS Link Finder. También podemos revisar manualmente los archivos JavaScript desde Burpsuite
Interactuar con los endpoints
Una vez que hemos identificado los endpoints de la API, vamos a interactuar con ellos utilizando Repeater y Intruder de Burpsuite. Esto nos permite observar el comportamiento de la API y descubrir superficies de ataque adicionales. Por ejemplo, podemos investigar cómo responde la API al cambiar el método HTTP y el media type
Mientras interactuamos con los endpoints, debemos revisar detenidamente los mensajes de error y otras respuestas. En ocasiones, estos incluyen información que podemos utilizar para construir una solicitud HTTP válida
Identificar los métodos HTTP soportados
El método HTTP especifica la acción que se realizará sobre un recurso. Por ejemplo:
GET-Recupera datos de un recursoPATCH-Aplica cambios parciales a un recursoOPTIONS-Recupera información sobre los tipos de métodos de solicitud que se pueden utilizar en un recurso
Un endpoint de la API puede admitir diferentes métodos HTTP. Por lo tanto, es importante probar todos los métodos potenciales durante la enumeración. Esto puede permitirnos identificar funcionalidades adicionales del endpoint, lo que abre una mayor superficie de ataque
Por ejemplo, el endpoint /api/tasks podría admitir los siguientes métodos:
GET /api/tasks-Recuperaunalista de tareasPOST /api/tasks-Creaunanueva tareaDELETE /api/tasks/1-Eliminaunatarea
Podemos utilizar el diccionario integrado en el Intruder de Burpsuite llamada HTTP verbs para testear un amplio rango de métodos
Al probar diferentes métodos HTTP, debemos dirigirnos a objetos de baja prioridad. Esto ayuda a asegurarnos de evitar consecuencias no deseadas, como alterar elementos críticos o crear registros excesivos
Identificar los content types soportados
Los endpoints de la API a menudo esperan datos en un formato específico. Por lo tanto, pueden comportarse de manera diferente dependiendo del content-type de los datos proporcionados en una solicitud. Cambiar el content-type puede permitirnos:
Provocar erroresquerevelen información útilEvadir defensas deficientesAprovechar diferencias en la lógica de procesamiento. Por ejemplo, unaAPIpuede serseguraalmanejar datos JSONperosusceptible a ataques de inyección cuando procesa XML
Para cambiar el content-type, debemos modificar la cabecera Content-Type y luego reformatear el body de la solicitud. Podemos utilizar la extensión Content type converter de Burpsuite para convertir automáticamente los datos enviados en las solicitudes entre XML y JSON
En este laboratorio vemos como aplicar esta técnica:
- Finding and exploiting an unused API endpoint - https://justice-reaper.github.io/posts/API-Testing-Lab-3/
Usar el Intruder para encontrar endpoints ocultos
Una vez que hemos identificado algunos endpoints de la API, podemos utilizar Intruder para descubrir endpoints ocultos. Por ejemplo, consideremos un escenario en el que hemos identificado el siguiente endpoint de la API que se utiliza para actualizar información de usuario:
1
PUT /api/user/update
Para identificar endpoints ocultos, podríamos utilizar el Intruder para buscar otros recursos con la misma estructura. Por ejemplo, podríamos agregar un payload en la posición /update de la ruta, utilizando un diccionario con funciones comunes, como delete y add
Al buscar endpoints ocultos, debemos usar diccionarios con nombres de funciones típicas de una API, como users, admin, config, search, etc y términos técnicos genéricos. También debemos incluir términos relevantes para la aplicación específica, basándonos en el reconocimiento inicial
Encontrar parámetros ocultos
Cuando estamos realizando la fase de reconocimiento de la API, podemos encontrar parámetros no documentados que la API admite. Podemos intentar usarlos para cambiar el comportamiento de la aplicación. Burpsuite incluye numerosas herramientas que pueden ayudarnos a identificar parámetros ocultos. Por ejemplo:
El Intruder de Burpsuite nos permite descubrir parámetros ocultos utilizando un diccionario de nombres de parámetros comunes para reemplazar los parámetros existentes o agregar nuevos parámetros. Debemosasegurarnosdeincluirtambiénpalabras relevantes para la aplicación, basándonos en nuestro reconocimiento inicialLa extensión Param Miner de Burpsuite nos permite adivinar automáticamente hasta 65,536 nombres de parámetros por solicitud. Tambiénadivina palabras relevantes para la aplicación, basándose en información tomada del scopeLa herramienta Content discovery nos permite descubrir contenido que no está enlazado desde el contenido visible al que podemos navegar, incluidos parámetros
Mass assignment attack
Mediante un mass assignment attack es posible usar parámetros que estaban ocultos. Esta vulnerabilidad ocurre cuando los frameworks de software enlazan automáticamente los parámetros de la solicitud a campos en un objeto interno. Como resultado, la aplicación podría terminar procesando parámetros que el desarrollador nunca tuvo la intención de permitir
Identificar parámetros ocultos
Dado que un mass assignment attack crea parámetros a partir de campos de objetos, a menudo podemos identificar estos parámetros ocultos examinando manualmente los objetos devueltos por la API
Por ejemplo, consideremos una solicitud PATCH /api/users/ que permite a los usuarios actualizar su nombre de usuario y correo electrónico mediante el siguiente JSON:
1
2
3
4
{
"username": "wiener",
"email": "wiener@example.com",
}
Esta solicitud GET /api/users/123 devuelve el siguiente JSON:
1
2
3
4
5
6
{
"id": 123,
"name": "John Doe",
"email": "john@example.com",
"isAdmin": "false"
}
Esto puede indicar que los parámetros ocultos id e isAdmin están vinculados al objeto usuario, junto con los parámetros actualizados username y email
Testear un mass assignment attack
Para probar si podemos modificar el valor del parámetro enumerado isAdmin, lo agregamos a la solicitud PATCH:
1
2
3
4
5
{
"username": "wiener",
"email": "wiener@example.com",
"isAdmin": false,
}
Adicionalmente, enviamos una solicitud PATCH con un valor de parámetro isAdmin inválido:
1
2
3
4
5
{
"username": "wiener",
"email": "wiener@example.com",
"isAdmin": "foo",
}
Si la aplicación se comporta de manera diferente, esto puede sugerir que el valor inválido afecta a la lógica de la consulta, pero el valor válido no. Esto puede indicar que el parámetro puede ser actualizado exitosamente por el usuario
Posteriormente, podemos enviar una solicitud PATCH con el valor del parámetro isAdmin establecido en true para intentar explotar la vulnerabilidad:
1
2
3
4
5
{
"username": "wiener",
"email": "wiener@example.com",
"isAdmin": true,
}
Si el valor del campo isAdmin en la solicitud se vincula al objeto usuario sin una validación y sanitización adecuadas, serái posbile otorgale privilegios de administrador al usuario wiener al usuario wiener. Para determinar si este es el caso, vamos a navegar por la web como el usuario wiener y ver si podemos acceder a las funcionalidades administrativas
En este laboratorio vemos como aplicar esta técnica:
- Exploiting a mass assignment vulnerability - https://justice-reaper.github.io/posts/API-Testing-Lab-4/
Server side parameter pollution
Algunos sistemas contienen APIs internas que no son directamente accesibles desde internet. Un server side parameter pollution ocurre cuando un sitio web incrusta el input del usuario en una solicitud del lado del servidor a una API interna sin una codificación adecuada. Esto significa que un atacante puede ser capaz de manipular o inyectar parámetros y esto puede permitirle, por ejemplo:
Sobrescribir parámetros existentesModificar el comportamiento de la aplicaciónAcceder a datos no autorizados
Podemos testear cualquier entrada de usuario para cualquier tipo de parameter pollution. Por ejemplo:
Parámetros de consulta:
1
/search?q=test&role=user&role=admin
Campos de formulario:
1
2
3
username=sergio
email=sergio@test.com
email=admin@test.com
Cabeceras:
1
2
X-User: sergio
X-User: admin
Parámetros de ruta de URL:
1
/user/123/role/user/role/admin
A esta vulnerabilidad a veces se la llama HTTP parameter pollution. Sin embargo, este término también se usa para referirse a una técnica para bypassear un WAF (firewall de aplicaciones web). Para evitar confusión, en este tema solo nos referiremos a server side parameter pollution
Además, a pesar del nombre similar, esta vulnerabilidad tiene muy poco en común con un server side prototype pollution
Testear la cadena de consulta para identificar un server side parameter pollution
Para testear la cadena de consulta con el objetivo de identificar un server side parameter pollution, debemos usar caracteres de sintaxis de consulta como #, &, y = en nuestro input y observar cómo responde la aplicación
Consideremos una aplicación vulnerable que nos permite buscar otros usuarios basándonos en su nombre de usuario. Cuando buscamos un usuario, nuestro navegador realiza la siguiente solicitud:
1
GET /userSearch?name=peter&back=/home
Para recuperar información del usuario, el servidor consulta una API interna mediante la siguiente solicitud:
1
GET /users/search?name=peter&publicProfile=true
Truncar las cadenas de consulta
Podemos usar el carácter # URL encodeado para intentar truncar la solicitud del lado del servidor. Para ayudarnos a interpretar la respuesta, es recomendable agregar una cadena después del carácter #
Por ejemplo, podríamos modificar la cadena de consulta a lo siguiente:
1
GET /userSearch?name=peter%23foo&back=/home
El front-end intentará acceder a la siguiente URL:
1
GET /users/search?name=peter#foo&publicProfile=true
Es esencial URL encodear el carácter # o de lo contrario, el front-end lo interpretará como un identificador de un fragment y no se pasará a la API interna
Después de esto, debemos revisar la respuesta en busca de pistas sobre si la consulta ha sido truncada. Por ejemplo, si la respuesta devuelve el usuario peter, la consulta del lado del servidor puede haber sido truncada. Si se devuelve el mensaje de error "Invalid name", es posible que la aplicación haya tratado foo como parte del nombre de usuario. Esto sugiere que la solicitud del lado del servidor puede no haber sido truncada
Si podemos truncar la solicitud del lado del servidor, esto elimina el requisito de que el campo publicProfile sea true. Podríamos explotar esto para ver perfiles de usuario no públicos
Inyectar parámetros inválidos
Podemos usar un carácter & URL encodeado para intentar agregar un segundo parámetro a la solicitud del lado del servidor
Por ejemplo, podríamos modificar la cadena de consulta a lo siguiente:
1
GET /userSearch?name=peter%26foo=xyz&back=/home
Esto resulta en esta solicitud del lado del servidor a la API interna:
1
GET /users/search?name=peter&foo=xyz&publicProfile=true
El siguiente paso es revisar la respuesta en busca de pistas sobre cómo se analiza el parámetro adicional. Por ejemplo, si la respuesta no ha cambiado, esto puede indicar que el parámetro fue inyectado exitosamente pero ignorado por la aplicación. Para construir una imagen más completa de lo que ha pasado, necesitaremos testear más
Inyectar parámetros válidos
Si podemos modificar la cadena de consulta, podemos intentar agregar un segundo parámetro válido a la solicitud del lado del servidor. Por ejemplo, si hemos identificado el parámetro email, podríamos agregarlo a la cadena de consulta de la siguiente manera:
1
GET /userSearch?name=peter%26email=foo&back=/home
Esto resulta en la siguiente solicitud del lado del servidor a la API interna:
1
GET /users/search?name=peter&email=foo&publicProfile=true
Posteriormente, debemos revisar la respuesta en busca de pistas sobre cómo se analiza el parámetro adicional
Sobrescribir parámetros existentes
Para confirmar si la aplicación es vulnerable a server side parameter pollution, podríamos intentar sobrescribir el parámetro original. Para hacer esto, debemos inyectar un segundo parámetro con el mismo nombre
Por ejemplo, podríamos modificar la cadena de consulta a lo siguiente:
1
GET /userSearch?name=peter%26name=carlos&back=/home
Esto resulta en la siguiente solicitud del lado del servidor a la API interna:
1
GET /users/search?name=peter&name=carlos&publicProfile=true
Si la API interna interpreta los dos parámetros name, es importante saber que tecnología se está usando, porque el impacto de sobrescribir un parámetro depende de cómo la aplicación procesa el segundo parámetro, y esto varía dependiendo de la tecnología que esté utilizando. Por ejemplo:
PHP analiza solo el último parámetro, y estoresultaríaen unabúsqueda de usuario para carlosASP.NET combina ambos parámetros, y estoresultaríaen unabúsqueda de usuario para peter y carlos, lo que podría devolver en un mensaje de errorEl framework Express de Node.js analiza solo el primer parámetro, y estoresultaríaen unabúsqueda de usuario para peter, dando un resultado sin cambios
Si podemos sobrescribir el parámetro original, podríamos realizar una explotación. Por ejemplo, podríamos agregar name=administrator a la solicitud, lo cual podría permitirnos iniciar sesión como el usuario administrador
En este laboratorio vemos como aplicar esta técnica:
- Exploiting server-side parameter pollution in a query string - https://justice-reaper.github.io/posts/API-Testing-Lab-2/
Testear formatos de datos estructurados para identificar un server side parameter pollution
Un atacante puede ser capaz de manipular parámetros para explotar vulnerabilidades en el procesamiento del servidor de otros formatos de datos estructurados, como JSON o XML. Para probar esto, debemos inyectar datos estructurados inesperados en las entradas del usuario y observar cómo responde el servidor
Consideremos una aplicación que permite a los usuarios editar su perfil y que luego aplica sus cambios con una solicitud a una API del lado del servidor. Cuando editamos nuestro nombre, nuestro navegador realiza la siguiente solicitud:
1
2
POST /myaccount
name=peter
Esto resulta en la siguiente solicitud del lado del servidor:
1
2
PATCH /users/7312/update
{"name":"peter"}
Podemos intentar agregar el parámetro access_level a la solicitud de la siguiente manera:
1
2
POST /myaccount
name=peter","access_level":"administrator
Si la entrada del usuario se agrega a los datos JSON del lado del servidor sin una validación o sanitización adecuada, esto resulta en la siguiente solicitud del lado del servidor:
1
2
PATCH /users/7312/update
{"name":"peter","access_level":"administrator"}
Esto puede resultar en que al usuario peter se le otorguen privilegios de administrador. Consideremos un ejemplo similar, pero donde la entrada del usuario del lado del cliente está en datos JSON. Cuando editamos nuestro nombre, nuestro navegador realiza la siguiente solicitud:
1
2
POST /myaccount
{"name": "peter"}
Esto resulta en la siguiente solicitud del lado del servidor:
1
2
PATCH /users/7312/update
{"name":"peter"}
Podemos intentar agregar el parámetro access_level a la solicitud de la siguiente manera:
1
2
POST /myaccount
{"name": "peter\",\"access_level\":\"administrator"}
Si la entrada del usuario es decodificada y luego agregada a los datos del JSON en el lado del servidor sin una codificación adecuada, esto resulta en la siguiente solicitud del lado del servidor:
1
2
PATCH /users/7312/update
{"name":"peter","access_level":"administrator"}
Nuevamente, esto puede resultar en que al usuario peter se le otorguen privilegios de administrador
La inyección de formato estructurado también puede ocurrir en respuestas. Por ejemplo, esto puede ocurrir si la entrada del usuario se almacena de manera segura en una base de datos y luego se incrusta en una respuesta en formato JSON de una API back-end sin una codificación adecuada. Generalmente podemos detectar y explotar la inyección de formato estructurado en respuestas de la misma manera que podemos hacerlo en solicitudes
El ejemplo anterior está en formato JSON pero un server side parameter pollution puede ocurrir en cualquier formato de datos estructurados. Para un ejemplo en formato XML, podemos acceder esta apartado de la guía de XXE https://justice-reaper.github.io/posts/XXE-Guide/#ataques-xinclude
Testear con herramientas automatizadas
El escáner de Burpsuite detecta automáticamente transformaciones sospechosas en los inputs. Estas ocurren cuando una aplicación recibe el input de un usuario, la transforma de alguna manera y luego realiza un procesamiento adicional con el resultado. Este comportamiento no necesariamente constituye una vulnerabilidad, por lo que necesitaremos realizar pruebas adicionales usando las técnicas manuales descritas anteriormente. Para más información, podemos consultar la definición de "Suspicious input transformation"
También podemos usar la extensión Backslash Powered Scanner de Burpsuite para identificar vulnerabilidades de server side parameter pollution. El escáner clasifica las entradas como boring, interesting o vulnerable. Necesitaremos investigar las entradas interesantes usando las técnicas manuales descritas anteriormente
Prevenir un server side parameter pollution
Para prevenir un server side parameter pollution, utilizamos una allowlist para definir los caracteres que no necesitan codificación, y nos aseguramos de que el resto de inptus del usuario sean codificados antes de incluirlos en una solicitud del lado del servidor. También debemos asegurarnos de que todos los inputs se adhieran al formato y estructura esperados
Alineación de los temas de Web Security Academy con las principales 10 vulnerabilidades de las APIs según OWASP
La OWASP Foundation publica periódicamente una lista de riesgos de seguridad críticos específicos para las APIs. Aunque algunos de estos riesgos tienen un nombre diferente en el contexto de las API, muchos se alinean con los temas existentes en Web Security Academy
La siguiente tabla indica los temas de Web Security Academy que corresponden con las 10 principales vulnerabilidades de las APIs según el OWASP:
| Risk | Relevant Web Security Academy topics |
|---|---|
| Broken object level authorization | Access control vulnerabilities and privilege escalation |
| Broken authentication | Authentication vulnerabilities, OAuth 2.0 authentication vulnerabilities, JWT attacks |
| Broken object property level authorization | Mass assignment vulnerabilities |
| Unrestricted resource consumption | Race conditions, File upload vulnerabilities |
| Broken function level authorization | Access control vulnerabilities and privilege escalation |
| Unrestricted access to sensitive business flows | Business logic vulnerabilities |
| Server side request forgery | Server-side request forgery (SSRF) |
| Security misconfiguration | Cross-origin resource sharing (CORS), Information disclosure vulnerabilities, HTTP Host header attacks, HTTP request smuggling |
| Improper inventory management | API testing |
| Unsafe consumption of APIs | API testing |
Podemos leer más sobre esto en el sitio web de OWASP https://owasp.org/API-Security/editions/2023/en/0x00-header/
Cheatsheet
Usaremos estas cheatsheet para facilitar la detección y explotación de esta vulnerabilidad:
- Hacking tools https://justice-reaper.github.io/posts/Hacking-Tools/
¿Cómo detectar y explotar vulnerabilidades en APIs?
Instalarlas extensionesGAP (Get All Parameters, Links, and Words),Param Miner,Error Message Checks,Backslash Powered ScanneryContent Type ConverterdeBurpsuiteAñadireldominioy sussubdominiosalscopeAnalizarlawebcon elescáner de Burpsuite. Para ello,marcaremos Crawl and auditcomotipo de escaneoy comoconfiguración de escaneousaremosDeep. Mientras tanto, vamos ainteractuarcontodaslasfuncionalidadesde lawebdeforma manualyverlaspeticionesque serealizandesde elLoggerSi encontramos un
endpointde laapi,/api/swagger/v1/users/123por ejemplo,vamosaenviarunapeticiónporGETy porPOSTa lasrutas base, para ver siencontramosladocumentaciónde laAPI. Lasrutas basepara esteendpointen concreto son/api/swagger/v1,/api/swaggery/apiEn el caso de que no encontremos ningún endpoint de la api o no encontremos la documentación, vamos a aplicar fuzzing con la herramienta Content discovery de Burpsuite.Como diccionario, vamos a usar el que nos viene por defecto y si no encuentra nada, usaremos primero uno de uso general y luego otro que sea específico para APIs. Elobjetivode esto esencontrarlasrutas basede lasAPIsy sudocumentaciónEs
posibleque en lossiguiente pasostengamos quecambiarelContent-Typey elformatoen el que seenvíanlosdatospara quela petición se envíe correctamente. Parafacilitaresto, podemosusarlaextensión Content Type Converter de BurpsuiteSi
encontramosladocumentación, debemosanalizar que peticiones podemos realizaryver si hay alguna que nos permita realizar alguna acción interesanteHay ocasiones en las que hay
funcionalidadesde losendpointsqueno están en la documentación.Por lo que, tanto si hemos encontrado documentación como si no, tenemos queidentificar que endpoints de los que hemos encontrado son interesantesy desde elIntruderprocedemos aefectuarunataque de tipo Sniperparadescubrir que métodos soportan estos endpoints, comodiccionariopodemos usarHTTP verbs, el cual viene conBurpsuitepor defecto uotro diccionario que tenga más métodos HTTP.Tenemos que fijarnos bien si existe algún endpoint que podamos usar para realizar alguna acción interesanteEn el caso de que no podamos realizar ninguna acción interesante, vamos aprobaraefectuarunmass assignment attack. Para esto,nos vamos a fijar en los campos que se ven en las respuestas que devuelve el servidor al enviarle peticiones a los diferentes endpoints, ya que es posible que podamos añadir uno de esos campos a una petición y así modificar campos del objeto que no debería de ser modificables. También podemosusarlaextensión Param Miner de Burpsuiteparadescubrir nuevos parámetros.Para ver si ha encontrado algún parámetro nuevo, lo podemos hacer desde Extensions > Param Miner > Outputoanalizarnosotros mismos laspeticionesdesde elLogger. Alusarestaextensión, hay veces queel servidor no identifica correctamente la URL porque se le añade esto ?adfer32xa. Parasolucionaresto,debemos desactivar la opción include query-param in cachebusters antes de lanzar el ataque. También es recomendableactivarla opciónlearn observed wordsSi el mass assignment attack no da resultado, vamos aintentar llevar a cabo un parameter pollution.Si la extensión Backslash Powered Scanner nos ha reportado que existe algún tipo de inyección, esprobableque lawebseavulnerableaparameter pollution. Lo siguiente que debemos hacer esseguir los pasos que se explican en esta guía sobre como identificar un parameter pollutionycuando lleguemos a la parte en la que necesitamos especificar un campo o parámetro, podemos usar la extensión GAP (Get All Parameters, Links, and Words) para obtener un lista.Si no queremos introducirlos manulamente, podemos hacerlo desde el Intruder.Si la extensión GAP no da resultado, podemosusareldiccionario Server-side variable namesque vienepor defectoenBurpsuiteyefectuarunaataque de fuerza brutadesde elIntruder
