Professional Documents
Culture Documents
inyecciones SQL son una de las vulnerabilidades ms comunes (web). Todas las
inyecciones SQL ejercicios, encuentran aqu, utilizan MySQL para back-end.
inyecciones SQL provienen de la falta de codificacin / escapar de la entrada
controlada por el usuario cuando se incluyen en las consultas SQL.
Dependiendo de cmo la informacin se agrega en la consulta, necesitar
diferentes cosas para romper la sintaxis. Hay tres maneras diferentes de
informacin en un eco sentencia SQL:
Por ejemplo, si desea utilizar la informacin como una cadena que puede hacer:
En este primer ejemplo, podemos ver que el parmetro es una cadena, y podemos
ver uno lnea de la tabla. Para entender el cdigo del lado del servidor, tenemos que
empezar a jugar alrededor:
se muestra en la tabla.
Si inyectamos una comilla simple, usando? Name = root ', la tabla
desaparece. Probablemente nos separamos algo ...
A partir de esta primera parte, se puede deducir que la solicitud debe verse como:
? Name = root ' and ' 1 '=' 1 '# (no se olvide de codificar #): en la cita la
devuelven falso.
? Name = root 'and' 1 '=' 1 # (no se olvide de codificar #): en la cita la consulta
inicial ser comentada. Debemos tener el mismo como resultado de la consulta
anterior.
? Name = root 'or ' 1 '=' 1: la cita en la consulta inicial, se cerrar la una en el
extremo de nuestra inyeccin. o seleccionar todos los resultados, con el
segundo parte es siempre cierto. Se puede dar el mismo resultado, pero es poco
probable, ya que el valor se utiliza como un filtro para este ejemplo (en
Con todas estas pruebas, podemos estar seguros de que tenemos una inyeccin de
SQL. slo que esta formacin se centra en la deteccin. Usted puede mirar en otro
tipo de formacin PentesterLab, y aprender para explotar este tipo de problemas.
EJEMPLO 2
En este ejemplo, el mensaje de error regala la proteccin creado por el
desarrollador: error no ocupan espacio. Este mensaje de error aparece tan pronto
como el espacio es inyectada dentro de la peticin. Nos impide el uso de la ' and ' 1
Mtodo 1 '=', o cualquier toma de huellas digitales que utilizan el carcter de
espacio. Sin embargo, este filtrado es fcilmente dejado de lado, utilizando la
tabulacin (HT o \ t). Usted tendr que utilizar la codificacin, para usarlo dentro de
la peticin HTTP. El uso de esta simple derivacin, debe ser capaz de ver cmo para
detectar esta vulnerabilidad.
Ejemplo 3
En este ejemplo, los bloques de desarrollador espacios y tabulaciones. Hay una
manera de
pasar por alto este filtro. Puede utilizar los comentarios entre las palabras clave
para construir un vlido
Ejemplo 4
Este ejemplo representa una tpica mala comprensin de cmo protegerse de SQL
inyeccin. En los 3 ejemplos anteriores, usando la funcin mysql_real_escape_string
habra evitado la vulnerabilidad. En este ejemplo, el desarrollador utiliz la misma
lgica. Sin embargo, el valor usado es un nmero entero y no se hizo eco entre sola
cita '. Dado que el valor se pone directamente en la consulta, utilizando
mysql_real_escape_string no impide nada. A continuacin, slo tiene que ser capaz
de aadir espacios y palabras clave de SQL para romper la sintaxis. El mtodo de
deteccin es realmente similar a la utilizada para la inyeccin SQL basada en la
cadena. Slo que no es necesario el citar al comienzo de la carga til.
Otro mtodo para detectar esta es jugar con el nmero entero. La solicitud inicial
es? Id = 2.
Al jugar con el valor 2, podemos detectar la inyeccin de SQL:
resultado.
? Id = 2.0 debe devolver la misma cosa.
? Es = 2 + 1.
? Id = 3-0.
Ejemplo 5
Este ejemplo es muy similar a la anterior, la deteccin se refiere. Si nos fijamos en
el
cdigo, ver que el desarrollador trat de evitar la inyeccin de SQL mediante el
uso de una
expresin regular:
if (!preg_match('/^[0-9]+/', $_GET["id"])) {
die("ERROR INTEGER REQUIRED");
}
Sin embargo, la expresin regular utilizada es incorrecta; slo asegura que la
Identificacin del parmetro comienza con un dgito. El mtodo de deteccin
utilizado anteriormente se puede utilizar
para detectar esta vulnerabilidad.
Ejemplo 6
Este ejemplo es al revs. El desarrollador hizo un error en la regularidad la
expresin de nuevo:
if (!preg_match('/[0-9]+$/', $_GET["id"])) {
die("ERROR INTEGER REQUIRED");
}
Esta expresin regular slo asegura que el parmetro id termina con un dgito
(Gracias al signo $). No garantiza que el comienzo del parmetro es vlido (Falta ^).
Se pueden utilizar los mtodos aprendidos previamente. Slo tiene que aadir un
nmero entero al final de su carga til. Este dgito puede ser parte de la carga til o
colocado despus de un comentario de SQL: 1 o 1 = 1 # 123.
Ejemplo 7
Otro y ltimo ejemplo de una mala expresin regular:
if (!preg_match('/^-?[0-9]+$/m', $_GET["id"])) {
die("ERROR INTEGER REQUIRED");
}
Aqu podemos ver que el principio (^) y el final ($) de la cadena estn
correctamente comprobado. Sin embargo, la expresin regular contiene el
modificador PCRE_MULTILINE (/metro). El modificador multine slo confirma que una
de las lneas que contienen solamente se un entero, y los siguientes valores sern,
por tanto vlidos (gracias a la nueva lnea en ellos):
123\nPAYLOAD;
PAYLOAD\n123;
PAYLOAD\n123\nPAYLOAD.
Estos valores deben ser codificada cuando se utiliza en un URL, pero con el uso
decodificacin y las tcnicas vistas anteriormente que debe ser capaz de detectar
este vulnerabilidad.