登录创建数据库(账号为admin,密码为password)
登录后界面在dvwa security选项中,可以调度dvwa的难易程度,
暴力破解
Brute Force即为暴力破解,通过列举获取管理员的账号和密码,在实际的操作中,一样平常用来破解后台管理系统的登录。

难度(低)
先审计代码
<?phpif( 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);}?>
可以看到,做事器只是验证了参数Login是否被设置,没有任何的防爆破机制
接下来开始操作:
在该模块任意输入账号和密码,在burp中抓包
嗝抓包抓到包后,右键发送 ro 入侵者
send to intruder在intruder的positions选择中,先点击clear$打消所有的变量。然后分别给用户名和password这两个字段后面的内容添加add$,添加变量并将attack type的值设置为cluster bomb
在payloads选择等分别给payload 1和payload 2设置字典路径。
同理,选择第二个payload
然后点击右上方的start attack
如上,开始列举破解。通过长度的长度讯断即可
赤色部分为破解的密码通过上面的破解,我们创造length的长度存在不一样,不一样的便是为破解成功的账号和密码。
末了在暴力破解模块填写精确的账号密码
难度(中)
先审计代码
<?phpif( 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);}?>?>
比较Low级别的代码,Medium级别的代码紧张增加了mysql_real_escape_string函数,这个函数会对字符串中的分外符号(x00,n,r,,',,",,x1a)进行转义,把个中的字符串给过滤掉了,基本上能够抵御sql注入攻击,那低等级时候用到的注入就失落效了,须要把稳的是中级的暴力破解相对来说较慢是由于有个就寝函数,在破解失落败后会使程序停滞运行两秒。以是我们直接用爆破方法即可,和low级的一样(以是这里就不多演示一遍了)
难度(高)
先审计代码
<?phpif( isset( $_GET[ 'Login' ] ) ) { // Check Anti-CSRF token checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Sanitise username input $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)) ? "" : "")); // Sanitise password input $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 ); // Check 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( rand( 0, 3 ) ); echo "<pre><br />Username and/or password incorrect.</pre>"; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);}// Generate Anti-CSRF tokengenerateSessionToken();?>
High级别的代码加入了Token,可以抵御CSRF攻击,同时也增加了爆破的难度,通过抓包,可以看到,登录验证时提交了四个参数:username、password、Login以及user_token。
开始操作:
在该模块任意输入账号和密码,用burp中抓包
创造多了一个token参数。将抓到的包发送到intrude,
选择攻击模式为pitchfock,并且给要破解的项带上美元符号
设置参数,在option选项卡中将攻击线程thread设置为1
由于Recursive_Grep模式不支持多线程攻击,然后选择Grep-Extract,意思是用于提取相应中的有用信息,点击Add,如下图进行设置,末了将Redirections设置为Always
写上value=' 点击刷新相应信息 做事器返回的token选中(即value后面,表示每次从相应中获取该值)
将这个令牌 值先记录下来
87a8523f6d96f38f4f22738f2297e61a
找到Directions模块设置许可重定向,选择
设置密码本,点击payload,选择第一项的密码本与低等级的相同,第二项的时候选择递归 grep 并且把之前得到的token值粘贴到下方的方框中。
最后进行攻击破解
最后进行登录