DVWA靶场-暴力破解漏洞
DVWA靶场-暴力破解
等级:high
源码分析以下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
if( isset( $_GET[ 'Login' ] ) ) {
// 检查Token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// 输入用户名
$user = $_GET[ 'username' ];
$user = stripslashes( $user );
$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)) ? "" : ""));
// 输入密码
$pass = $_GET[ 'password' ];
$pass = stripslashes( $pass );
$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 );
// 进行数据库查询
$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
$html .= "<p>Welcome to the password protected area {$user}</p>";
$html .= "<img src=\"{$avatar}\" />";
}
else {
// Login failed
sleep( rand( 0, 3 ) );
$html .= "<pre><br />Username and/or password incorrect.</pre>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
// Generate Anti-CSRF token
generateSessionToken();
接下来开始逐行分析1
if( isset( $_GET[ 'Login' ] ) ) {
检查是否存在名为 Login 的 GET 请求参数。如果存在,则执行登录逻辑。
1 | checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); |
调用一个名为 checkToken 的函数,用于验证 CSRF (跨站请求伪造) 令牌
1 | $user = $_GET[ 'username' ]; |
这里是登陆的后端入口,负责用户名及密码的输入,并对sql注入进行防范
1 | $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"; |
构造sql语言并进行查询
1 | if( $result && mysqli_num_rows( $result ) == 1 ) { |
这是对用户、密码的验证
1 | ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); |
关闭sql查询
1 | generateSessionToken(); |
生成新的CSRF 令牌。
每次爆破都需要生成新的token,所以我们需要在每次回应时获取token,据此,开始爆破
实验开始
工具:burpsuite
因为需要提前获取token,所以需要开启重定向,并提取页面页面信息。
playload类型3选择递归提取。
页面选择单线程,并需要缓冲300ms。
开始爆破
DVWA靶场-暴力破解
等级:high
源码分析以下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
if( isset( $_GET[ 'Login' ] ) ) {
// 检查Token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// 输入用户名
$user = $_GET[ 'username' ];
$user = stripslashes( $user );
$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)) ? "" : ""));
// 输入密码
$pass = $_GET[ 'password' ];
$pass = stripslashes( $pass );
$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 );
// 进行数据库查询
$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
$html .= "<p>Welcome to the password protected area {$user}</p>";
$html .= "<img src=\"{$avatar}\" />";
}
else {
// Login failed
sleep( rand( 0, 3 ) );
$html .= "<pre><br />Username and/or password incorrect.</pre>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
// Generate Anti-CSRF token
generateSessionToken();
接下来开始逐行分析1
if( isset( $_GET[ 'Login' ] ) ) {
检查是否存在名为 Login 的 GET 请求参数。如果存在,则执行登录逻辑。
1 | checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); |
调用一个名为 checkToken 的函数,用于验证 CSRF (跨站请求伪造) 令牌
1 | $user = $_GET[ 'username' ]; |
这里是登陆的后端入口,负责用户名及密码的输入,并对sql注入进行防范
1 | $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"; |
构造sql语言并进行查询
1 | if( $result && mysqli_num_rows( $result ) == 1 ) { |
这是对用户、密码的验证
1 | ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); |
关闭sql查询
1 | generateSessionToken(); |
生成新的CSRF 令牌。
每次爆破都需要生成新的token,所以我们需要在每次回应时获取token,据此,开始爆破
实验开始
工具:burpsuite
因为需要提前获取token,所以需要开启重定向,并提取页面页面信息。
playload类型3选择递归提取。
页面选择单线程,并需要缓冲300ms。
开始爆破
DVWA靶场-暴力破解
等级:high
源码分析以下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
if( isset( $_GET[ 'Login' ] ) ) {
// 检查Token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// 输入用户名
$user = $_GET[ 'username' ];
$user = stripslashes( $user );
$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)) ? "" : ""));
// 输入密码
$pass = $_GET[ 'password' ];
$pass = stripslashes( $pass );
$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 );
// 进行数据库查询
$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
$html .= "<p>Welcome to the password protected area {$user}</p>";
$html .= "<img src=\"{$avatar}\" />";
}
else {
// Login failed
sleep( rand( 0, 3 ) );
$html .= "<pre><br />Username and/or password incorrect.</pre>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
// Generate Anti-CSRF token
generateSessionToken();
接下来开始逐行分析1
if( isset( $_GET[ 'Login' ] ) ) {
检查是否存在名为 Login 的 GET 请求参数。如果存在,则执行登录逻辑。
1 | checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); |
调用一个名为 checkToken 的函数,用于验证 CSRF (跨站请求伪造) 令牌
1 | $user = $_GET[ 'username' ]; |
这里是登陆的后端入口,负责用户名及密码的输入,并对sql注入进行防范
1 | $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"; |
构造sql语言并进行查询
1 | if( $result && mysqli_num_rows( $result ) == 1 ) { |
这是对用户、密码的验证
1 | ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); |
关闭sql查询
1 | generateSessionToken(); |
生成新的CSRF 令牌。
每次爆破都需要生成新的token,所以我们需要在每次回应时获取token,据此,开始爆破
实验开始
工具:burpsuite
因为需要提前获取token,所以需要开启重定向,并提取页面页面信息。
playload类型3选择递归提取。
页面选择单线程,并需要缓冲300ms。
开始爆破






