pikachu靶场通关笔记04-暴力破解之Token绕过
目录
一、暴力破解
二、Token防爆破
三、源码分析
四、渗透实战
1、构造字典
2、打开靶场防token关卡
3、bp开启inception on
4、登录同时bp拦截报文并发送到intruder
5、配置intruder的positons
6、配置intruder的payload字段
7、配置宏
(1)添加宏
(2)配置宏
(3)配置configure item
(4)配置refetch response
(5)成功获取字段
(6)成功配置宏
8、配置宏应用到intruder
(1)添加规则
(2)编辑规则
(3)编辑list
(4)编辑应用scope
(5)规则配置成功
9、设置单线程
10、开启攻击
本文通过《pikachu靶场通关笔记》系列,使用burpsuite的intruder模块完成暴力破解之token绕过关卡。
一、暴力破解
暴力破解是一种通过自动化工具系统尝试大量认证组合(如密码、验证码)的攻击技术。其核心原理是利用系统缺乏有效防护(如无限次尝试、弱密码策略、验证码缺陷),通过穷举法突破认证屏障。常见攻击方式包括字典攻击(使用常见密码库)、暴力枚举(全字符组合)等。暴力破解成功率直接取决于密码强度与系统防护水平。
弱密码(Weak Password)是指安全性不足、容易被猜测或破解的密码,通常具有以下特征:
-
简单组合:如
123456
、password
、admin
等常见字符串。 -
短长度:少于8位字符,缺乏复杂度。
-
规律性:使用连续数字(
1234
)、键盘路径(qwerty
)或重复字符(aaaaaa
)。 -
个人信息:包含生日、姓名、手机号等易获取的信息。
风险:弱密码易被暴力破解或字典攻击攻破,导致账户被盗、数据泄露或系统入侵。
二、Token防爆破
Token(令牌)机制是防止暴力破解的重要防护手段,原理如下。
-
每个会话生成唯一Token
-
Token与服务端Session严格绑定
token认证的处理逻辑图如下所示。
三、源码分析
暴力破解之Token关卡的源码如下所示。
代码主要实现了一个简单的用户登录验证与token防止暴力破解的功能,具体总结如下:
- 表单提交检查:代码会检查是否通过 POST 方式提交了表单,且表单中包含
username
、password
和token
字段。只有这些条件都满足,才会继续执行后续的登录验证流程。 - 数据获取:从 POST 数据中提取用户输入的
username
、password
以及token
,为后续的数据库查询和 Token 验证做准备。 - SQL 查询准备:构建一个 SQL 查询语句,使用预处理语句防止 SQL 注入。该语句用于从
users
表中查找与用户输入的username
和经过 MD5 加密后的password
相匹配的记录。 - token验证:检查用户提交的
token
是否与存储在会话中的token
一致。若不一致,会提示token error
,拒绝该请求,以此防范暴力破解攻击。 - 登录验证:当
token
验证通过后,执行 SQL 查询。若查询结果存在记录,说明用户名和密码正确,显示登录成功提示;若不存在记录,则提示用户名或密码不存在;若查询执行出错,则显示相应的错误信息。 - Token 生成:无论登录验证结果如何,最后都会调用
set_token
函数重新生成 Token。
四、渗透实战
1、构造字典
构造暴力破解的用户名字典user.txt、密码字典password.txt。
(1)用户名字典user.txt内容如下所示。
admin
root
liujiannan
(3)密码字典password.txt内容如下所示。
123456
000000
ljn
999999
用户名密码和密码字典如下所示。
2、打开靶场防token关卡
http://127.0.0.1/pikachu/vul/burteforce/bf_token.php
3、bp开启inception on
4、登录同时bp拦截报文并发送到intruder
登陆任意账户,用户名和密码随意设置,使用bp进行抓包并将报文发送到intruder,如下所示参数除了用户名和密码多了一项token参数。
5、配置intruder的positons
在burpsuite intruder中的intruder中配置positons,注意:
(1) 选择集束炸弹cluster bomb。
(2) 两个payload分别选择username和password对应的值。
6、配置intruder的payload字段
(1)参数payload1配置截图
(2)参数payload2配置截图
7、配置宏
使用burpsuite的宏功功能,自动把登陆页的token值抓取出来填入登陆请求,创建宏,获取 token 值。
(1)添加宏
在burpsuite中按照点击extentions,选择extensions settings部分,弹出的setting配置中点击sessions,然后在右边的macro部分点击add,具体如下图红框的步骤1-步骤4所示。
(2)配置宏
在点击添加宏(即macros-add)后,在弹出的历史中找到刚刚的报文(一直向下滑到最后找到刚刚登录的POST报文),注意这个报文正式我们发送到intruder的报文,选中该报文后点击OK,如下所示。
(3)配置configure item
上一步点击OK后进入到宏编辑器,点击如下红框中的contigure item,如下所示。
此时点击configure item后进入到如下页面。
点击add键,进入到如下页面,此时再次点击refetch response,具体如下所示。
(4)配置refetch response
此时选择点击refetch response,并在搜索框中搜索value,同时在页面中选中value值,即2163268123f342b7c9806051123,点击OK,如下图红框所示。
(5)成功获取字段
点击OK后进入到如下页面,可见username、password和token字段均已正确获取,继续点击OK。
(6)成功配置宏
再点击OK,注意我们刚刚配置的宏名为Macro1,具体如下所示。
8、配置宏应用到intruder
(1)添加规则
sessions添加规则,点击session add,其中rule actions配置选择run a macro,如下图红框中的步骤1到步骤3所示。
(2)编辑规则
进入到如下界面,当前选择我们上一步创建的macro1即可,然后在update only the following parameters后的edit,如下图红框所示。
(3)编辑list
在弹出的edit list中,输入token字段并点击add,如下图红框所示。
配置完毕后效果如下所示,此时update only the following parameters中的参数为token字段。
(4)编辑应用scope
点击OK后回到到如下界面后,点击右侧的scope,如下所示。
配置范围,此时tools scope至少要保证macro1的rule2规则包含intruder这个模块,URL scope需要配置为include all URLS,具体如下图红框所示。
(5)规则配置成功
配置完成后效果如下所示。
9、设置单线程
将爆破线程设置为1(因为如果是多线程它们会同时刷新token,就无法取得正确的token),在intruder的资源池模块配置单线程,注意此时的cocuurent requests需要配置为1,具体如下图所示。
10、开启攻击
点击start attack后效果如下所示,在intruder result中找到长度不同的用户名密码对,点击此项目对应的response render使显示图形化登录结果,通过暴力破解渗透成功获得用户名admin、密码123456。
此时查看request报文中的token值,已经发生变化,查看response登陆成功,说明渗透成功。