[SUCTF 2019] EasySQL1

[SUCTF 2019] EasySQL1
[Destino]
Inyección en pila de sentencias Sql
[Entorno]
Buuctf
[Herramientas]
Navegador
[Análisis]
1. Pruebe las rutinas normales de inyección SQL
(1) Pruebe 1 primero
Inserte la descripción de la imagen aquí

Hay un eco
(2) Prueba las letras de nuevo
Inserte la descripción de la imagen aquí

Sin eco
(3) Pruebe la inyección de comillas simples
Inserte la descripción de la imagen aquí

El indicador es diferente, así que suponga que hay un punto de inyección aquí
(4) pruebe cuántas columnas hay
Inserte la descripción de la imagen aquí

Todavía no tiene éxito, por lo que la consulta conjunta general no se puede usar aquí.
(5) La inyección ciega basada en el tiempo y la inyección de error requieren declaraciones de consulta conjunta anidadas para lograrlo, por lo que puede omitirlo y probar la inyección ciega booleana directamente
Inserte la descripción de la imagen aquí

Aún sin éxito
2. Utilice la inyección de pila
(1) para encontrar todas las bases de datos
Inserte la descripción de la imagen aquí

(2) Consultar todos los nombres de tablas
Inserte la descripción de la imagen aquí

(3) Consultar las columnas en la tabla de banderas
Inserte la descripción de la imagen aquí

Sin éxito
3. Las siguientes son dos soluciones en Internet, refiriéndose al WP de los magnates de Internet, y algunas conclusiones hechas por mí mismo
(1) La primera es adivinar el código fuente, seleccione $ _POST ['consulta'] || bandera de When Bandera,
sql_mode se establece en PIPES_AS_CONCAT, || es un concatenador de cadenas, que es equivalente a la función CONCAT ().
Cuando sql_mode no se establece en PIPES_AS_CONCAT (el valor predeterminado no está establecido), || es un OR lógico, que es equivalente al
primer tipo de función OR y presione el valor predeterminado No hay configuración para continuar. En este momento, || es la lógica o
|| vista en la ejecución del comando.
Recordar:
comando1; comando2 ejecuta
comando1 en secuencia || comando2
Si comando1 no se ejecuta, ejecutar command2
command1 && command2
Si command1 se ejecuta correctamente, ejecute command2

Así que solo necesito

$ _POST ['consulta']

Los datos enviados se reemplazan con *, 1 (si los escribe directamente , obtendrá un error y escribirlos más tarde no será válido)
Explicación:
sql = select.post ['consulta']. "|| bandera de la bandera" ; (declaración de empalme)
Si los datos de $ post ['consulta'] son

*, 1

La instrucción sql se convierte en select *, 1 || flag from Flag, que
es select *, 1 from Flag, de modo que todos los contenidos de la tabla Flag se consultan directamente.
Aquí 1 es para agregar temporalmente una columna, el nombre de la columna es 1 y todos los valores en esta columna son 1.

Ejecutar carga útil: * , 1
Inserte la descripción de la imagen aquí

Obtener la bandera
(2) El segundo es usar || como una concatenación de cadenas, por lo que debe cambiar su configuración en la declaración
sql_mode = PIPES_AS_CONCAT.
Carga útil: 1; establecer sql_mode = PIPES_AS_CONCAT; seleccionar 1 Después de
empalmar: seleccionar 1; establecer sql_mode = PIPES_AS_CONCAT; seleccionar 1 || bandera de Bandera es
equivalente a seleccionar 1 de Bandera y seleccionar bandera de Bandera
Inserte la descripción de la imagen aquí

Obtener bandera

Supongo que te gusta

Origin blog.csdn.net/bring_coco/article/details/108737434
Recomendado
Clasificación