Burpsuite使用教程
目标靶场 :pikachu
系统 :win11
(一)暴力破解
1.基于表单的暴力破解
什么是暴力破解?
Burte Force(暴力破解)概述
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。
理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:
1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
...等等。
千万不要小看暴力破解漏洞,往往这种简单粗暴的攻击方式带来的效果是超出预期的!
你可以通过“BurteForce”对应的测试栏目,来进一步的了解该漏洞。
我们这里随便输入账户和密码
打开burpsuite抓包 将post请求发送到repeater
可以看到我们的账号密码
在响应里面正常返回了一个200
认证因素也只有账号和密码 没有对应的验证码 可以基本上确认这个借口可以进行暴力破解
将post请求发送到intrude
攻击选项里面有4种类型,这里简要说明一下
Sniper:逻辑是依次对我们设置的动态变量去替换 先把账号设置的变量替换完后在设置密码设置的变量
Battering ram :是同事把所有的动态变量都给替再进行重换
Pitchfork: 多出个payload 每设置个几个动态变量都有几个payload 就要有几个字典
每个payload都要设置自己的字典 每个payload的字典会一一替换变量
Cluster bomb :会把payload2的变量依次和payload1里面的变量去进行一次组合 再会用payload2的第二个密码跟payload1再依次去组合
clear将默认的变量给他清除掉 选中我们的账号和密码 添加一个动态变量 将攻击模式选为 Cluster bomb
点击option
当用户登陆失败的时候出现提示 username or password is not exists
在options里面滑到 grep—match
clear清除所有的 add上username or password is not exists我们刚才添加的这个字符串 也就是说我们所有响应的数据包里面响应的内容可以flag出来 如果没有被flag出来的数据就有可能是我们破解成功的数据包
在点击payloads
将poload type选为 Runtime file 意思是从字典导入
将paload set 选1
在select file 导入我们自己写好的字典 我这里已经提前写好一个字典 username.txt
然后在paload set 选2 导入我们自己提前写好的字典
选好后点击右上角的攻击
可以看到没有被flag被拍到了第一个 也就是这个响应是没有被flag出来的 然后我们将账号密码拿到pikachu上面去试试
登陆成功
以上就是pikachu基于表单的暴力破解
(二)暴力破解
验证码绕过 -on client相关问题
当你打开一个登录页面 向后台发送了请求 当后台接受到这个请求之后 它会调用一个验证码的函数去生成验证码 验证码返回前端的时候一定是一个图片 同时它会将后台的算法生产的这个验证码的值以session的形式存到它的缓存里面去 用户在页面登录认证的时候输入账号密码 输入验证码 它会把验证码的这个文本信息提交到后台 后台会对前端提交进来的这个验证码跟session里面的验证码做一个对比 如果是正确就是可以验证成功 然后后台这个时候一旦5这个验证码被验证过后 就会把验证码销毁一样 验证码都是一次一用 那同时如果前端只是请求的这个验证码后台也会对这个验证码设置一个超时时间 比如默认是一分钟 前端重新刷新页面的时候后端也会重新生产验证码 并且在验证码算法中一般会包含这种随机函数
在页面上右点鼠标查看源代码 在最下面发现有这么一段的JavaScript的源代码
然后我们可以发现所有的验证逻辑实际上直接在JavaScript里面实现的
var code定义了一个变量 写了一个函数fuction createcode 去生成验证码 在用fuction validate函数去验证这个验证码 当你onlink点一下验证码图片 它就会调用JavaScript那个函数去生产一个新的验证码
也就是有说验证码的生成和验证实际上都是在前端完成的
···c
<script language="javascript" type="text/javascript">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();
</script>
为了测试验证码是否有效果 手动添加一个随机验证码
提示用户名或者密码不存在 但是并没有说验证码错误那我们基本上就要可以确认这个验证码虽然说提交了但是后台并没有验证 那说明验证码是在端通过JavaScript来实现的
将数据包发送到intruder去
添加变量 修改攻击模式 跟之前的一样了
payload1 跟2选择字典 然后攻击
可以看到这个15的返回长度不一样
把账号密码去pikachu进行输入
登录成功
(三)暴力破解
不安全验证码 -on server
打开pikachu
这里随便 输入一个账号密码 在burpsuite抓包
显示验证码不能为空 说明后端是进行了验证了的
接下来验证一下这个验证码有没有过期的问题
返回页面刷新一个新的验证码 根据我们之间说的 去刷新这个验证码的时候后台会返回一个新的验证码 同时会在session里面把这个验证码的字符串存下来 对你提交的验证码去进行验证
返回前端将新的验证码给记下来 然后返回burpsuite
在里输入我们正确的验证码 因为账号密码是错误的验证码 安装逻辑会给我返回显示账号密码错误的提示
为了验证码是否能被重复利用 这里将账号和密码修改一下
还是提示用户或者密码错误 那么这个验证码就是可以被重复利用的
根据我们之前的操作进行暴力破解
clear清楚选中我们的账号密码添加变量
准备好我们事先写的字典 点击右上角的start attack
打开pikachu将admin 和123456输入
登录成功