DVWA下的爆破(中难度) – 作者:fu福lin林

1、提交登录请求,抓包

1602314005_5f815f1521af40f257c84.png!small

1602314013_5f815f1db31a68e479f6e.png!small

2、发送给Intruder模块进行处理

1602314050_5f815f42dc57cd9aa8fb0.png!small

1602314060_5f815f4c806b5a5d36916.png!small

3、需要爆破的是用户名和密码的字段,因此选择cluster bomb模式

1602314089_5f815f69b20955386e34e.png!small

4、对用户名和密码字段相对应的payload手工添加字典,如果有字典top100,直接导入即可

Payload 1对应的是用户名

Payload 2对应的是密码

1602314135_5f815f97d9d037967a9ce.png!small

1602314145_5f815fa18659172d1316e.png!small

5、点击 start attack,开始爆破

1602314174_5f815fbecb92f1b300826.png!small

这次跑字典的速度有点慢,总共也就36种可能

1602314183_5f815fc781f473093cc35.png!small

6、找长度最特殊的一项,手工登录验证

1602314269_5f81601d852511cf19741.png!small

用户名为admin,密码为test

1602314284_5f81602caba37a44f8b7d.png!small

登录成功!!!

7、总结一下

感觉这个爆破过程与低难度的没啥区别啊,都是一样的步骤

源代码需要看看,看不懂也要看,多查多问

<?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);
}

?>

可以看到,medium级别的代码对用户输入的参数进行了简单的过滤,对一些预定义字符进行了转义,基本上防止了SQL注入。还有一个措施就是如果密码输错了,则延时两秒之后才能再次提交,如果亲手体验,确实能发现爆破时长变长了些,没有那么快跑完手工写的字典。

mysqli_real_escape_string(string,connection) :函数会对字符串string中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义,基本可以抵抗SQL注入。

$GLOBALS :引用全局作用域中可用的全部变量。不懂就百度,自行了解。

心理路程:知道这里大佬专家多,我写这些,只是记录自己学习的过程,不懂就多操作。

来源:freebuf.com 2020-10-10 15:24:40 by: fu福lin林

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论