Instructor: Bien, ahora me gustaría
mostrarle una inyección SQL y en un archivo
diferente y
en una página diferente y le mostraré algunas
cosas diferentes que puede hacer para aprovechar la vulnerabilidad.
Entonces, lo primero que voy a ir a la página de
inicio de sesión que está aquí.
Información de usuario.
Entonces, la primera vez que fuimos a la página de inicio de sesión desde allí, esta
vez fuimos a la página de información del usuario.
Por lo tanto, esta página le mostrará la información sobre el usuario
siempre que le proporcione el nombre de usuario y la contraseña.
Así que voy a
hacer zaid y voy a poner mi contraseña, 123456.
Y mostrará mis detalles, nombre de usuario y contraseña y
mi firma como aa.
Entonces, la declaración que se está ejecutando
aquí es similar a la que se estaba ejecutando
cuando inicia sesión.
Entonces, seleccionar estrella de las cuentas
donde el nombre de usuario es lo que pones en el campo de
usuario y la contraseña es lo que pones en el campo de contraseña.
Entonces, lo que haremos ahora
es ver una forma diferente de explotar
este tipo de vulnerabilidad.
En el video
anterior, lo estábamos haciendo usando un cuadro de texto POST.
Por lo tanto, lo que haya
puesto en el cuadro de texto se publicará utilizando un método POST en la aplicación web.
Ahora, estas vulnerabilidades pueden existir en GET.
Y lo que quiero
decir con Get es que cuando haces un Get cuando algo se envía
como GET, lo verás aquí en la URL.
Entonces, si mira
la URL aquí, verá que se envía como
nombre de usuario zaid y contraseña 123456.
Permítanme copiar esta URL aquí.
Y comenzaremos a jugar
con él desde la URL en lugar de hacerlo en la página web.
Solo quiero mostrarle un ejemplo
diferente porque en muchos lugares, puede
que ni siquiera haya cuadros de
texto, por ejemplo, podría ser algo así como
noticias y noticias. php, por lo que podemos ver aquí, por ejemplo,
en este ejemplo, es el índice. php.
Y en su prueba de lápiz, puede
ver algo como noticias. php y,
por ejemplo, id es igual a dos y
luego puede intentar inyectar cosas allí.
Así que tenemos un
ejemplo aquí donde vamos a inyectar
cosas en el campo de nombre de usuario que
es este campo y vamos a inyectar cosas aquí.
Por lo tanto, cada vez que realice su
prueba de lápiz, cada vez que vea parámetros como
este, debe intentar inyectarlos.
Cada vez que ves algo. php y
luego tienes un parámetro igual a algo,
siempre trata de inyectar cosas allí y ver
si funciona para ti.
Así que también hemos visto una forma de descubrir la
inyección y eso fue utilizando las comillas y el
uso de y.
Entonces hacemos un falso y un verdadero y
uno es igual
a uno y luego uno
es igual a dos y si el servidor está ejecutando
lo que queremos, entonces sabremos que hay una inyección SQL.
Te mostraré
otra forma de descubrir estas
hazañas y está usando el orden de.
Como su nombre
lo indica, el orden por declaración se
utiliza para ordenar los resultados que obtenemos en la pantalla
en función de una columna específica.
Entonces nuestra inyección será así.
Así que voy a ordenar por uno.
Entonces, si la inyección existe, esto debería funcionar
porque
en cada instrucción select, debería
haber al menos una columna seleccionada.
Por lo tanto, cuando decimos ordenar
por uno, estamos diciendo que quiero ordenar los resultados
en función de la
primera columna, por lo tanto, esto siempre debe ser aceptable
para la base de datos.
Y devuelve un verdadero o algo que esperamos.
También necesitamos agregar el comentario aquí
y ejecutar este código.
Entonces es exactamente como antes.
Entonces, cuando hacemos
esto, básicamente esta es nuestra URL y lo que sucederá en la base
de datos, así que este es
el código que se está
ejecutando en la base de datos, se verá así.
Por lo tanto, será una estrella
seleccionada de las cuentas donde el
nombre de usuario es igual a zaid y observe
cómo esto está cerrando la cotización y haremos un pedido por uno y
no debería haber este código para el
y, y este comentario le dirá al El intérprete de SQL ignora todo lo
que viene después, por lo que
todo esto se ignorará.
Entonces estoy copiando esto.
Entonces, puede pegar esta inyección para el
orden zaid por uno
en el nombre aquí y eso funcionará, pero
nuevamente, solo quiero mostrarle una forma
diferente de hacerlo inyectándola a través del navegador.
Otra cosa que quiero que
tenga en cuenta
es que cuando está inyectando cosas en el navegador, el navegador, el código debe estar codificado.
Entonces, por ejemplo, este signo generalmente, cuando
lo coloca en
la URL, debe escribirse como% 23.
Los espacios, por ejemplo, se convierten
a% 20 y% 23 es el comentario que estamos usando.
Así que copiaré eso y reemplazaré mi signo de comentario con él.
Ahora, puedes buscar en Google HTTP Encoder y
verás en línea que hay herramientas
en línea que simplemente convertirán esto por ti.
Para mí ahora sé que el hashtag
se puede convertir a% 20.
Por eso lo estoy usando allí.
Y voy a presionar Enter.
Y como
puede ver ahora, estamos viendo algo aceptable.
No pasa nada y luego me muestra
la información sobre zaid 123456 y me muestra la firma.
Por lo tanto, está ignorando la
contraseña, por lo que la
inyección funcionó y está ordenando por una,
por lo que no me muestra nada malo.
Tratemos de hacer de este número uno un
número muy grande, así que pondré 10,000 o 100,000 ahora.
Entonces, lo que
estamos diciendo ahora es que quiero
que ordene los resultados que devolverá la declaración de
selección actual basada en la columna 100,000.
Ahora es probable que no se utilicen 100.000 columnas en
esta instrucción select y,
por lo tanto, esto debería devolver un error.
Entonces, cuando ejecuto esto,
verá que hay un error.
Y el error está en el orden de cierre.
Y todavía hay una columna Desconocida para 100,000 y esto es genial porque
ahora sabemos que la
base de datos está ejecutando lo que queremos.
Entonces, cuando le dijimos que ordenara los
resultados basados en la primera columna, nos mostró resultados.
Entonces siguió lo que le dijimos
y luego, cuando
le dijimos que ordenara los resultados en función de
una columna que no existe, nos dio un error.
Por lo tanto, es obviamente vulnerable a las inyecciones de SQL.