DVWA使⽤教程(BruteForce)(⼀)DVWA使⽤教程(Brute Force)(⼀)
发现的近义词是什么DVWA是⼀个⽤来练习Web渗透的PHP应⽤。共有⼗个模块,分别是
1.Brute Force(爆破)
2.Command Injection(命令注⼊)
3.CSRF(跨站请求伪造)
学生社会实践4.File Inclusion(⽂件包含)
5.File Uplod(⽂件上传)
6.Incure CAPTCHA(不安全的验证码)
7.SQL Inj(SQL注⼊)
8.SQL B Inj(SQL盲注)
9.XSS-ref(反射型xss)
10.xss-stored(存储型xss)
⼀、 简介
Brute Force通过登录页⾯进⼊到该漏洞的测试位置。
这个模块是⽤来测试暴⼒破解⼯具和展⽰不安全的开发实现。
⼆、 功能特点
耗费时间⽐较长,基本是软件⾃动化测试,枚举完成所有请求,攻击开始后,⼿⼯操作的部分⾮常有限。
三、 各防护等级简介
low等级,对爆破攻击⾏为毫⽆设防。
medium等级,对爆破攻击⾏为防护不⾜,防护做法⽋考虑。
hight等级,对爆破攻击⾏为有⼀定防护,但有疏忽。
impossible等级,对爆破攻击⾏为正确防护。
四、low代码模块剖析
概述:low等级,对爆破攻击⾏为毫⽆设防。
<?php
if( ist( $_GET[ 'Login' ] ) ) {
// Get urname
$ur = $_GET[ 'urname' ];
// Get password
$pass = $_GET[ 'password' ];
$pass = md5( $pass );
// Check the databa
$query = "SELECT * FROM `urs` WHERE ur = '$ur' AND password = '$pass';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___my if( $result && mysqli_num_rows( $result ) == 1 ) {
// Get urs details
$row = mysqli_fetch_assoc( $result );
$avatar = $row["avatar"];
// Login successful
echo "<p>Welcome to the password protected area {$ur}</p>";
echo "<img src=\"{$avatar}\" />";
}
el {
// Login failed
echo "<pre><br />Urname and/or password incorrect.</pre>";
}
((is_null($___mysqli_res = mysqli_clo($GLOBALS["___mysqli_ston"]))) ? fal : $___mysqli_res);
}
>
根据代码可以得知
1.ist函数⽤来检测变量是否设置,并且不是 NULL。
2.⽤户可以完全控制该参数,传参时给Login赋值即可满⾜条件继续执⾏。
3.⽆论⽤户名还是密码都没有经过任何的过滤和检查。
4.⽤户输⼊的⽤户名将原封不动传递到SQL语句中。
5.⽤户输⼊的密码将进⾏md5散列后传递到SQL语句中。
爆破尝试,步骤如下。
通过配置option选项可以让结果更直观些。
五、medium代码模块剖析
概述:medium等级,对爆破攻击⾏为防护不⾜,防护做法⽋考虑。
<?php
if( ist( $_GET[ 'Login' ] ) ) {
// Saniti urname input
$ur = $_GET[ 'urname' ];
$ur = ((ist($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $u // Saniti password input
$pass = $_GET[ 'password' ];
$pass = ((ist($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pas $pass = md5( $pass );
// Check the databa
$query = "SELECT * FROM `urs` WHERE ur = '$ur' AND password = '$pass';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___my if( $result && mysqli_num_rows( $result ) == 1 ) {
// Get urs details药学专业就业前景
$row = mysqli_fetch_assoc( $result );
$avatar = $row["avatar"];
// Login successful
echo "<p>Welcome to the password protected area {$ur}</p>";
echo "<img src=\"{$avatar}\" />";
}
el {
诗经静女// Login failed
sleep( 2 );
echo "<pre><br />Urname and/or password incorrect.</pre>";
}
((is_null($___mysqli_res = mysqli_clo($GLOBALS["___mysqli_ston"]))) ? fal : $___mysqli_res);
}
>
根据代码可以得知
1.ist函数⽤来检测变量是否设置,并且不是 NULL。
喜结构
2.⽤户可以完全控制该参数,传参时给Login赋值即可满⾜条件继续执⾏。
3.⽤户名部分使⽤mysqli_real_escape_string(str)函数⽤户名的特殊符号(\x00,\n,\r,\,‘,“,\x1a)(ascii码0,换⾏,回
车,回退)进⾏转义,除宽字节注⼊外,可以抵抗其余SQL注⼊。
4.⽤户输⼊的密码将进⾏md5散列后传递到SQL语句中。
5. 如果密码输错了,则延时两秒之后才能再次提交。中高风险
爆破部分尝试与low代码部分⼀样。
六、High代码模块剖析
概述:hight等级,对爆破攻击⾏为有⼀定防护,但有疏忽。
<?php
if( ist( $_GET[ 'Login' ] ) ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'ur_token' ], $_SESSION[ 'ssion_token' ], 'index.php' );
// Saniti urname input
$ur = $_GET[ 'urname' ];
$ur = stripslashes( $ur );
$ur = ((ist($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $u // Saniti password input
$pass = $_GET[ 'password' ];
$pass = stripslashes( $pass );
睡觉的英语怎么说$pass = ((ist($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pas $pass = md5( $pass );
// Check databa
$query = "SELECT * FROM `urs` WHERE ur = '$ur' AND password = '$pass';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___my if( $result && mysqli_num_rows( $result ) == 1 ) {
// Get urs details
$row = mysqli_fetch_assoc( $result );
$avatar = $row["avatar"];
// Login successful
echo "<p>Welcome to the password protected area {$ur}</p>";
echo "<img src=\"{$avatar}\" />";
}
el {
// Login failed
sleep( rand( 0, 3 ) );
echo "<pre><br />Urname and/or password incorrect.</pre>";
}
((is_null($___mysqli_res = mysqli_clo($GLOBALS["___mysqli_ston"]))) ? fal : $___mysqli_res);
}
// Generate Anti-CSRF token
generateSessionToken();
>
根据代码可以得知
太原龙潭公园1.ist函数⽤来检测变量是否设置,并且不是 NULL。
2.⽤户可以完全控制该参数,传参时给Login赋值即可满⾜条件继续执⾏。
3. 校验token,每次都需要更新token。
3.⽤户名部分使⽤,stripslashes(str)函数去除⽤户名中出现的反斜线。然后再使⽤mysqli_real_escape_string(str)函数⽤户名的特殊符
号(\x00,\n,\r,\,‘,“,\x1a)(ascii码0,换⾏,回车,回退)进⾏转义,完全抵抗SQL注⼊。
4.⽤户输⼊的密码将进⾏md5散列后传递到SQL语句中。
5. 如果密码输错了,则延时0-3秒之后才能再次提交。
爆破尝试,步骤如下。
抓取数据包