实验环境:
DVWA靶机:172.16.12.10
windos攻击机:172.16.12.7
kali攻击机:172.16.12.30
实验步骤:
一、基于表单的暴力破解
打开BP抓包,随便输入用户名密码,点login
选择测试器——位置,进行如下设置
点有效载荷,选择爆破用户名的字典
再选择爆破密码的字典,点开始攻击
点长度,这三个疑似用户名密码,逐一尝试,用户名:pikachu 密码:000000是正确的
二、验证码绕过(on server)
随便输入提交,发现验证码会刷新
打开BP抓包,连续抓了多次发现验证码不会刷新了
接下来就简单了,同样开始爆破就ok
选择用户名字典
选择密码字典,点开始攻击
成功爆破
$html=""; if(isset($_POST['submit'])) { $html .= "<p class='notice'>用户名不能为空</p>"; } else { if (empty($_POST['password'])) { $html .= "<p class='notice'>密码不能为空</p>"; } else { if (empty($_POST['vcode'])) { $html .= "<p class='notice'>验证码不能为空 哦!</p>"; } else { //验证验证码是否正确 if (strtolower($_POST['vcode']) != strtolower($_SESSION['vcode'])) { $html .= "<p class='notice'>验证码输入 错误哦!</p>"; //应该在验证完成后,销毁该 $_SESSION['vcode'] }else{ $username = $_POST['username']; $password = $_POST['password']; $vcode = $_POST['vcode']; $sql = "select * from users where username=? and password=md5(?)"; $line_pre = $link->prepare($sql); $line_pre- >bind_param('ss',$username,$password); if($line_pre->execute()){ $line_pre->store_result(); //虽然前面做了为空判断,但最后,却没有验 证验证码!!! if($line_pre->num_rows()==1){ $html.='<p> login success</p>'; }else{ $html.= '<p> username or password is not exists~</p>';
源码中写的很清楚了,比较完验证码后,没有重置验证码,又由于我这里是使用的burpsuite,没有让我重新去请求验证码,所以此验证码是一直有效的
三、验证码绕过(on client)
随便输入,提示如下
BP拦截,发现拦截不到验证码,这个验证码是在前端验证的,难怪叫做onclient,于是在源码中找到了对应的JS
1、源码分析
var code; //在全局定义验证码 function createCode() { code = ""; var codeLength = 5;//验证码的长度 var checkCode = document.getElementById("checkCode"); var selectChar = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N', 'O','P','Q','R','S','T','U','V','W','X','Y','Z');//所有候 选组成验证码的字符,当然也可以用中文的 for (var i = 0; i < codeLength; i++) { var charIndex = Math.floor(Math.random() * 36); code += selectChar[charIndex]; } //alert(code); if (checkCode) { checkCode.className = "code"; checkCode.value = code; } } function validate() { var inputCode = document.querySelector('#bf_client .vcode').value; if (inputCode.length <= 0) { alert("请输入验证码!"); return false; } else if (inputCode != code) { alert("验证码输入错误!"); createCode();//刷新验证码 return false; } else { return true; } } createCode()
依然抓包爆破,同上操作,成功
四、token防爆破
抓包如下,新增token验证
全选右击,发送到insrucder
这里选择Pichfork,爆破password和token
点选项,找到Grep-Extract,点添加
点获取回复
选中token的值,点OK,复制下来备用
找到请求引擎,线程改为1
找到重定向,选总是
点有效载荷,第一个payload爆破密码,选密码字典
第二个payload,选递归搜索,粘贴刚才的token值到图下位置,点开始攻击
成功爆破密码