¿Cómo explotar esta vulnerabilidad de inyección de SQL?

2

Estoy aprendiendo inyección SQL en una aplicación web vulnerable. Lo escanee con w3af. Mostró muchas vulnerabilidades. Uno de ellos es:

  Se encontró

inyección SQL en una base de datos de Microsoft SQL en: " enlace ", usando el método HTTP POST . Los datos post enviados fueron: "... ctl00 $ cphMain $ txtUserName = d'z" 0 ... ".

¿Cómo puedo explotar esto? ¿Cuál es la URL que realmente explotará y me dará acceso? ¿Alguien puede ayudarme en esto?

    
pregunta narayan 25.12.2011 - 21:45
fuente

3 respuestas

5

Por lo general, cuando se explotan los inicios de sesión, se quiere inyectar algo que impida que el campo de la contraseña se valide. Por lo general, esto se puede lograr poniendo una sintaxis similar a la siguiente como su contraseña:

myphonypassword' OR 1=1;--

Esto afirmará que usted es el usuario administrador, termina la cadena en la consulta real y hace que a la consulta no le importe si escribió una contraseña legal o no, ya que OR 1 = 1 hace que la consulta sea siempre verdadera.

Es probable que tengas que intentar hacer que esta vulnerabilidad funcione (especialmente si se trata de una vulnerabilidad ciega de SQL). Puede ver muchos más ejemplos en este SQL Hoja de trucos de inyección especialmente para el inicio de sesión.

En tu ejemplo específico, probablemente tengas que editar el campo llamado txtPassWord, sin embargo, no está claro por los pequeños detalles que has proporcionado.

Editar: dado que este es un parámetro de solo publicación, no puede atacar solo a través de la URL. Puede interceptar la solicitud con un proxy y modificar los parámetros de publicación de esa manera o elaborar una nueva solicitud con Curl como en la sugerencia de otras respuestas

    
respondido por el Chris Dale 25.12.2011 - 22:19
fuente
3

Debe realizar un POST a la URL http://www.example.com/Login.aspx?CurrentPage=Login . El exploit está en los datos enviados en el cuerpo del POST, algo como ...ctl00$cphMain$txtUserName=d'z"0... - y el ' hace que parezca que txtUserName es el campo que desea atacar. La forma estándar de separar los campos es con un carácter & , pero el fragmento que publicaste hace que parezca que $ se está utilizando como separador.

Si usas curl desde la línea de comandos, podrías ejecutar un comando como (observa el \ escape del ' incrustado para evitar que la shell lo coma):

curl -d 'ctl00$cphMain$txtUserName=d\'z"0' http://www.example.com/Login.aspx?CurrentPage=Login

Tendrá que ajustar el valor de txtUserName para que se ajuste a la aplicación en particular que está atacando.

    
respondido por el bstpierre 26.12.2011 - 13:20
fuente
2

Generalmente, con una página de inicio de sesión, lo primero que debe hacer es rastrear el encabezado para encontrar los campos del formulario de inicio de sesión real, es decir, las variables de formulario de envío. Luego desea ver si puede enviar datos al servidor utilizando GET en lugar de POST. Entonces, por ejemplo, si un formulario tiene 4 variables, $ nombre de usuario, $ contraseña y $ x, entonces configura la solicitud para:

/Login.aspx?CurrentPage=Login&username=name&password=pass&x=1

para ver si obtiene una respuesta de usuario / contraseña incorrecta del servidor. Si es así, es mucho más fácil encontrar un vector de inyección con GET que con el método POST.

Si eso está permitido, entonces podría comenzar a intentar desencadenar respuestas de base de datos como

/Login.aspx?CurrentPage=Login&username=name'[enter your SQL statement here]&password=pass&x=1

Si el método POST es el único permitido, entonces no podrá usar la 'URL' para enviar los datos, sino más bien a partir de lo que bstpierre indicó, deberá inventar un remitente de formularios utilizando los complementos del navegador como Live HTTP Headers para Firefox o reconstruir el formulario en su propio servidor para enviarlo al sitio que está probando.

    
respondido por el Taipo 30.01.2012 - 00:00
fuente