Agrietamiento por fuerza bruta de DVWA
1. Agrietamiento por fuerza bruta de bajo nivel DVWA:
Brute Force Source
<?php
if( isset( $_GET[ 'Login' ] ) ) {
// Get username
$user = $_GET[ 'username' ];
// Get password
$pass = $_GET[ 'password' ];
$pass = md5( $pass );
// Check the database
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
if( $result && mysqli_num_rows( $result ) == 1 ) {
// Get users details
$row = mysqli_fetch_assoc( $result );
$avatar = $row["avatar"];
// Login successful
echo "<p>Welcome to the password protected area {
$user}</p>";
echo "<img src=\"{
$avatar}\" />";
}
else {
// Login failed
echo "<pre><br />Username and/or password incorrect.</pre>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
?>
parte central:
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
Esta pieza no se ha procesado, por lo que puede utilizarContraseña universalDerivación
admin ‘ or ‘1’ = ‘1
Declaración después del empalme:
$query = "SELECT * FROM `users` WHERE user = 'admin ‘ or ‘1’ = ‘1' AND password = '$pass';";
Tanto las comillas simples delanteras como traseras están cerradas, y la declaración o '1' = '1' se inserta para formar un juicio lógico con AND; cuándo o y y existen al mismo tiempo, y el juicio se realizará primero, y entonces o se ejecutará un juicio, y 1 = 1 siempre es cierto, por lo que se omitió con éxito.
Fuerza bruta normal
1. Realizar la captura de paquetes
2. Enviar al intruso y agregar variables
Se sabe que el nombre de usuario es admin, por lo que solo necesita agregar la variable de contraseña para destruirla.
3. Importe el diccionario para
iniciar el ataque y juzgue si el craqueo por fuerza bruta es exitoso o no a través de la diferencia de la longitud de retorno.
Así que adivina la contraseña como contraseña.
Verifique e inicie sesión correctamente.
**
Dos, agrietamiento de fuerza bruta de nivel medio DVWA:
**
Ver código fuente:
Brute Force Source
<?php
if( isset( $_GET[ 'Login' ] ) ) {
// Sanitise username input
$user = $_GET[ 'username' ];
$user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
// Sanitise password input
$pass = $_GET[ 'password' ];
$pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
$pass = md5( $pass );
// Check the database
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
if( $result && mysqli_num_rows( $result ) == 1 ) {
// Get users details
$row = mysqli_fetch_assoc( $result );
$avatar = $row["avatar"];
// Login successful
echo "<p>Welcome to the password protected area {
$user}</p>";
echo "<img src=\"{
$avatar}\" />";
}
else {
// Login failed
sleep( 2 );
echo "<pre><br />Username and/or password incorrect.</pre>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
?>
Encontrado usando mysqli_real_escape_stringfunción:
mysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符。
Por lo tanto, la contraseña universal no se puede usar para omitir, pero parece que el byte ancho se puede usar para omitir.
El método de fuerza bruta es el mismo que el de nivel bajo.
Tres, una explicación simple de los cuatro métodos de fuerza bruta.
Francotirador:
Para los parámetros de datos, no importa cuántas cargas útiles se agreguen, la función del francotirador se limita a cuando el valor de la variable del primer parámetro atraviesa el diccionario, el segundo parámetro u otros parámetros están en el valor de la variable del parámetro original hasta la primera variable de parámetro El valor se recorre. Después del diccionario, se procederá secuencialmente. Al mismo tiempo, los valores de las variables de parámetro del diccionario que se han recorrido permanecen sin cambios y ya no cambian. Finalmente, todos los valores de las variables de parámetro se modifican en este manera de lograr el propósito de agrietamiento por fuerza bruta.
diccionario | Variable uno | Variable dos |
---|---|---|
un | FALSO | |
segundo | FALSO | |
C | FALSO | |
re | CIERTO | |
mi | FALSO | |
F | FALSO | |
gramo | FALSO | |
h | CIERTO |
Si la variable dos está antes del parámetro d del diccionario, la voladura falla
Ariete
En el modo Ariete, no importa cuántas cargas útiles se agreguen, al recorrer el diccionario, el efecto final es que el valor de cada variable de parámetro es el mismo, es decir, el valor de todas las variables de parámetro de carga útil se toma en la primer intento Se toma el primero en el diccionario y el segundo en el segundo intento, y se recorre a su vez todo el diccionario.
diccionario | Variable uno | Variable dos |
---|---|---|
un | FALSO | FALSO |
segundo | FALSO | FALSO |
C | FALSO | FALSO |
re | CIERTO | CIERTO |
mi | FALSO | FALSO |
F | FALSO | FALSO |
gramo | FALSO | FALSO |
h | FALSO | FALSO |
Este método se utiliza cuando los parámetros reales de las variables son los mismos.
Barra transversal (horquilla)
Diccionario uno | Variable uno | Diccionario dos | Variable dos |
---|---|---|---|
un | FALSO | 1 | FALSO |
segundo | FALSO | 2 | FALSO |
C | FALSO | 3 | CIERTO |
re | CIERTO | 4 | FALSO |
mi | FALSO | 5 | FALSO |
F | Sin coincidencia | ||
gramo | Sin coincidencia | ||
h | Sin coincidencia |
El efecto final del craqueo por fuerza bruta en Pitchfork es que cada carga útil necesita cargar el conjunto de carga útil. Al mismo tiempo, el proceso de craqueo por fuerza bruta es que el valor del parámetro variable de cada carga útil atraviesa el diccionario respectivo para coincidir, y todos comienzan del primero, es decir En este proceso, la coincidencia de nombre de usuario y contraseña es consistente con la disposición del diccionario cargado. Finalmente, la regla final es detenerse según cuál diccionario es el menor, es decir, según El menos.
Bomba de racimo (Bomba de racimo)
Diccionario uno | Variable uno | Diccionario dos | Variable dos |
---|---|---|---|
un | FALSO | 1 | FALSO |
segundo | FALSO | 1 | FALSO |
C | FALSO | 1 | FALSO |
re | FALSO | 1 | FALSO |
un | FALSO | 2 | FALSO |
segundo | FALSO | 2 | FALSO |
C | CIERTO | 2 | CIERTO |
re | FALSO | 2 | FALSO |
En Clusterbomb, el resultado final es que ambas partes atraviesan todo el diccionario. El primer valor de parámetro del primer diccionario recorre todos los valores de parámetro del segundo diccionario hasta que estén todos completados, y luego el segundo valor de parámetro del primero diccionario recorre los segundos valores de todos los parámetros de un diccionario hasta completarlos todos. Finalmente, todos los valores de los parámetros del primer diccionario completan el recorrido del segundo diccionario, luego se termina.