punto de inyección sqlmap en datos POST

0

Actualmente estoy haciendo una prueba de Blackbox en una aplicación web para fines de capacitación. Es un proyecto personal.

Además de mi proceso de prueba manual, usé un escáner automatizado para detectar vulnerabilidades obvias. Si bien esta herramienta solo encontró algunos problemas básicos, también detectó una vulnerabilidad potencial de SQLi que no noté antes. Puedo reproducir el error utilizando Burp, pero aún no puedo extraer los datos de la base de datos manualmente. Debido a eso, le di a sqlmap una oportunidad.

Antes de llegar a mi pregunta, permítame darle algunos detalles:

La vulnerabilidad parece existir en un formulario de inicio de sesión. Cuando la siguiente secuencia se envía al formulario

password=letmein&username=1%c0%00xa7%c0%a2

se devuelve un error de mysql:

Advertencia: mysql_fetch_array () espera que el parámetro 1 sea un recurso, dado booleano

He reducido la secuencia al byte % c0 . Este valor urlencoded lleva a la advertencia. Hasta ahora, no estoy seguro de por qué exactamente este valor conduce a la advertencia.

La configuración de sqlmap se ve así:

 sqlmap -u http://thehost/include/login.php --method POST --data "password=letmein&username=1%c0%00xa7%c0%a2" -p "username" --dbms=mysql

Que genera solicitudes / cargas útiles en la siguiente forma:

 [PAYLOAD] 1%c0%00xa7%c0%a2)).("(,)'(
 [TRAFFIC OUT] HTTP request [#3]:
 POST /include/login.php HTTP/1.1
 Host: thehost
 Content-type: application/x-www-form-urlencoded; charset=utf-8
 Accept: */*
 Content-length: 70
 Connection: close

Lo que me gustaría hacer / intentar es cambiar el punto de inyección dentro de los datos POST. es posible? Sé que es posible especificar un punto de inyección dentro de una solicitud GET. Además, ¿alguien tiene una idea de por qué el byte % c0 inyectado confunde la consulta?

gracias

    
pregunta DucatiNerd 02.01.2017 - 13:05
fuente

4 respuestas

0

No sé sobre el punto de inyección, pero 0xc0a2 es otra forma de codificar el carácter " mediante la codificación de caracteres UTF-8. Lo que sucede aquí es que el script de la página no es correcto. borre los caracteres "peligrosos" antes convirtiendo la codificación. De hecho, puede insertar todos los caracteres restringidos de esta manera. Simplemente divida el valor binario de 7 bits del código ascii en dos y codifíquelo de esta manera: 1100000x 10xxxxxx

    
respondido por el Professor Chalkdust 02.02.2017 - 04:47
fuente
0

SQLmap funciona de manera heurística, en primer lugar, aprende acerca de las diferencias entre las respuestas buenas y malas de la aplicación, luego tiene que introducir un valor real para el parámetro username para obtener una buena respuesta. SQLmap analizará las respuestas después de eso inyectará comandos sql para detectar una posible inyección SQL. Su comando SQLmap debe ser algo como esto:

sqlmap -u http://thehost/include/login.php --data "password=letmein&username=this_is_a_real_username" -p "username" --dbms=mysql

La opción --method POST no es necesaria, SQLmap sabe que es una solicitud POST cuando se usa la opción --data .

Espero que esta información te ayude.

Buena suerte.

    
respondido por el hmrojas.p 02.01.2017 - 16:25
fuente
0

Refiriéndose a esta publicación: enlace

Creo que no es un problema con la inyección, más bien los parámetros pasados podrían no estar dando ningún resultado y la aplicación está intentando leer el valor falso devuelto debido a resultados vacíos.

Espero que esto ayude!

    
respondido por el swatilaxmi28 02.01.2017 - 19:13
fuente
0

Me encuentro con este bastante a menudo. No estoy seguro de si es explotable.

Sucede que cuando usa mysql_real_escape_string () en su código (¡Y USTED DEBE!) antes de pasar la entrada a una consulta de base de datos, se usa una cierta codificación.

Creo que en este caso el% c0 no se escapa, hace que execute_query () produzca un error (devolviendo falso, en lugar de la fila esperada)

% c0 en UTF-8 (que utiliza el programa) es "À" y eso rompe la consulta ya que no tiene ningún valor en UTF-8 y como resultado se inyecta "\ x00". Todo se rompe entonces .. He estado tratando de encontrar una manera de hacer este trabajo a mi favor, pero hasta ahora, ¡no he tenido suerte!

    
respondido por el FrankShorty 27.02.2017 - 13:08
fuente

Lea otras preguntas en las etiquetas