目录
一、暴力破解
基于表单的暴力破解
验证码绕过(on server)
编辑 验证码绕过(on client)
编辑 token防爆破?
二、暴力破解的相关知识点
(1)Burte Force(暴力破解)概述
(2)验证码的绕过原理
【验证码机制原理】
【客户端可能存在的安全问题】
验证码固定
无条件不刷新
有条件不刷新
(3) token防爆破的知识点
Token 是如何工作的?
最优解法
一、暴力破解
基于表单的暴力破解
后端php代码审计:pikachu靶场第一关-密码爆破之基于表单的暴力破解(附代码审计)-CSDN博客
1.对于不知道用户名和密码的,进行暴力破解,首先抓包,发送到Intruder
2.设置到用户名和密码的字典,设置好就进行暴力破解
3.暴力破解出来为admin/123456,注册成功
验证码绕过(on server)
后端php代码审计:pikachu靶场第二关-密码爆破之验证码绕过(on server)(附代码审计)_pikachu验证码绕过on server-CSDN博客
1.发现输入错误的验证码,并且每次提交注册请求后验证码都会刷新;输入正确的验证码,错误的用户名和密码,会说用户名和密码不存在;只要输入错误的验证码,就会输出验证码错误
2.进行抓包,发送到repeater,观察到不管你怎么修改用户名和密码,验证码始终是有效的
3.抓包发送到Intruter,重复上题的操作,得到用户名和密码
验证码绕过(on client)
后端php代码审计:pikachu靶场第三关-密码爆破之验证码绕过(on client)(附代码审计)_pikachu验证码绕过on client代码审计-CSDN博客
1.用户名,密码,验证码任意输入,直接出现前端弹框,很可能是前端验证
2.在浏览器中禁用js,验证码进行选填,像上面的题一样,爆破得出用户名和密码
token防爆破?
后端php代码审计:pikachu靶场第四关-密码爆破之token防爆破?(附代码审计)_利用验证token值的方式对pikachu靶场中的csrf(post)漏洞进行防御。-CSDN博客
1.抓包进行观察,发现存在token值,修改其值,发现会回显这个值错误
2.token放爆破,攻击方式选择Pitchfork,这里只能爆破两个参数,所以要已知用户名或密码时才能使用,变量设置在password和token(在知道用户名的情况下)
3.将Payload-1(用户名/密码)
设置为正常字典,第一个密码选择Simple list,然后再选择字典
4.第二个token的值选择Recursive grep,Payload-2(Token)
设置为递归提取即可
5.然后在Options中找到Redlrections设置为Always,原因:如果不点上这个就不会打开 HTML 包的 body 部分,因为 Token 值是存储在 body 的 hidden 部分,那么也就不会自动获取 Token 值,我们也就不能绕过它进行暴力破解了
6.在Resource Pool中进行下图的设置,将线程设置为 1,否则多线程爆破后 Token 会无法被匹配到(对于每一个包返回来的token值都是不一样的,所以我们只能选择单线程进行攻击)
7.Recursive_Grep模式不支持多线程攻击,选择Grep-Extract,意思是用于提取响应消息中的有用信息,点击Add,然后点击Refetch response,在下面出现的数据里找到token,复制
8.将复制的token的值粘贴到first request ,这里的token值是之前复制的token值
9.进行攻击,比较长度,得到密码,最后注册成功
二、暴力破解的相关知识点
(1)Burte Force(暴力破解)概述
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。
web安全中的暴力破解俗称穷举法或者枚举法,就是利用尝试所有的可能性最终获取正确的结果的一种攻击方式。
理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:
1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
...等等。
(2)验证码的绕过原理
资料参考:渗透测试-验证码的爆破与绕过_验证码绕过-CSDN博客
【验证码机制原理】
客户端发起请求->服务端响应并创建一个新的SessionID同时生成随机验证码,将验证码和SessionID一并返回给客户端->客户端提交验证码连同SessionID给服务端->服务端验证验证码同时销毁当前会话,返回给客户端结果。
【客户端可能存在的安全问题】
1、有的网站验证码由本地js生成仅仅在本地用js验证。可以在本地禁用js,用burp把验证字段删除。
2、有的网站把验证码输出到客户端html中,送到客户端Cookie或response headers。
3、有些网站默认不显示验证码,而是在输入错误一定数量之后才需要验证验证码,开发人员可能在Cookie中写入一个标记loginErr,用来记录错误数量,则可以不更新Cookie中的loginErr值反复提交,验证码就不会出现。
验证码固定
导致验证码不刷新(固定)的原因是:登录密码错误之后,session中的值没有更新,验证码不变。验证码不刷新通常有以下两种情况:无条件不刷新、有条件不刷新。
无条件不刷新
无条件不刷新是指在某一时间段内,无论登录失败多少次,只要不刷新页面,就可以无限次的使用同一个验证码来对一个或多个用户帐号进行暴力猜解。换句话说,攻击者可以在同一个会话下,在获得第一个验证码后,后面不再主动触发验证码生成页面,并且一直使用第一个验证码就可循环进行后面的表单操作,从而绕过了验证码的屏障作用,对登录进行暴力猜解。
有条件不刷新
有条件不刷新多见于如下情况:登录失败之后,系统会打开一个新页面或者弹出一个新的警告窗口,提示用户登录失败,点击确定后返回登录界面且验证码刷新。这种情况下,只要我们不关闭新窗口或弹窗,配合使用Burpsuite的intruder模块就可以进行暴力破解了。
(3) token防爆破的知识点
Token是什么?
所谓的Token,其实就是服务端生成的一串加密字符串、以作客户端进行请求的一个“令牌”。当用户第一次使用账号密码成功进行登录后,服务器便生成一个Token及Token失效时间并将此返回给客户端,若成功登陆,以后客户端只需在有效时间内带上这个Token前来请求数据即可,无需再次带上用户名和密码。并且后端每收到一次请求就会产生一个新的token,同时把token连同响应信息一起发给前端。
那么Token都可以解决哪些问题呢?
1.Token具有随机性、不可预测性、时效性、无状态、跨域等特点。
2.Token完全由应用管理,所以它可以避开同源策略
3.Token可以避免CSRF攻击
4.Token可以是无状态的,可以在多个服务间共享
5.Token是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回Token给前端。前端可以在每次请求的时候带上Token证明自己的合法地位。如果这个Token在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。
Token 是如何工作的?
1.通过 Burp Suite 进行抓包,我们可以发现请求中包含了一条 Token 字段
2.发现具体的 Token 数值后,我们在前端页面发现此值,发现 Token 在前端的变量名叫做Value
3.
通过查询后端 PHP 代码,找到对应的后端代码
4.通过变量名token
我们还可以发现后端的登录逻辑判断代码
5.回看前端,Token 所属的HTML <input>
标签类型是hidden
,相当于每次随着表单(POST)隐形提交了 Token 值,只不过这个值在前端默认是不可见的,若我们将标签类型改为text
则可以看到 Token 值也出现在前端
HTML input 标签类型属性 text:默认,定义单行输入字段,用户可在其中输入文本,默认是 20个字符 hidden:定义隐藏输入字段
6.到此,整个 Token 的运行逻辑就已清晰,当首次请求时,会收到一条包含 Token 的响应包,当我们在同一页面进行第二次请求时,则会提交上一次的 Token 并获取下一次请求所需的 Token,并以此原理不断循环下去
资料参考:https://zhuanlan.zhihu.com/p/671570750
(36.2)【Token漏洞专题】Token的原理、认证过程、爆破过程_recursive grep payloads cannot be used with multip-CSDN博客
最优解法
既然我们已经知道当前的响应会包含上一次所需的 Token,那我们就可以使用工具对上一次响应包中的 Token 进行提取,放入下一次的请求当中,形成一个递归的循环,至此理论成立,以上题为例