带token的登陆页面爆破方法(burp宏+爬虫脚本分享)


前言

在工作中,会遇到很多登陆页面有token保护,如果用Burpsuite直接抓取数据包并使用爆破模块,则会因token过期导致无法爆破。此时至少可以采用三种办法:
第一种是设置burp宏,从服务器返回包中提取token值,并更新当前数据包再爆破;
第二种是使用爬虫脚本,动态更新token值,并构造新数据后进行爆破;
第三种是使用python运行selenium库进行爆破,好处是无需管什么token,坏处是效率很低,不推荐这种方法。
下面使用DVWA在线靶场分别演示前两种方法(建议读者自行下载DVWA本地搭建环境即可)。


一、token参数分析

首先访问DVWA登陆页面:
在这里插入图片描述
账号密码随便输入,然后点击登陆按钮并抓取数据包:
在这里插入图片描述
发现页面中存在token。那么此时使用重放模块测试一下token是否只能用一次,。第一次发送(注意需要跟随重定向):
在这里插入图片描述
发现提示的是Login Failed。
第二次发送:
在这里插入图片描述
发现提示token不正确。这就意味着,token必须每次更新,通过后端校验后,才会检验正好密码。
接下来查看返回包内容,可以找到token的藏身之处:
在这里插入图片描述
现在我们知道,该页面需要保证token正确。那么token又是如何更新的呢,我们在repeater模块是跟随了重定向后出现了token,那么在proxy模块正常传递数据包时,服务端又是如何返回token的呢?查看proxy模块的http history:
在这里插入图片描述
可以看到,登陆请求包发送之后,会发送一次GET请求,同时服务器会返回新的token值,下次登陆就需要用这个新的token了。
现在可以判断出,DVWA登陆页面的防爆破功能的逻辑,就是先提交账号密码,当登陆失败时,返回一个新的token,下次提交登陆数据时,需要带着这个token,当token验证通过后,才会验证账号密码。

因此,要想对此页面进行爆破,只要在常规操作的基础上增加一个读取响应包中的token并替换掉数据包中的旧token这样的操作即可实现爆破操作。


二、burp设置宏操作

从上述分析中可以看出,这样的操作流程是固定的,而且需要大量重复操作,那么此时burp的宏就有用武之地了。
现在为了方便你们操作,我用Burp英文版演示一下。
为了节约时间,我就当开了天眼了,知道了账号是admin,但密码不知道,需要爆破。
首先登陆页面输入账号admin,密码随便输入,然后使用burp拦截并放包一次。这样做是为了在burp的历史记录中留下一条记录,如图所示:
在这里插入图片描述
接下来在burp的设置中找到以下内容:
在这里插入图片描述
不同版本的burp不尽相同,但通常都在sessions里面,有Macrors,这个就是burp的宏。找到以后,需要新增一条宏规则,点击add,然后选择刚才生成token的那条历史记录,接着点击OK:
在这里插入图片描述
在出来的界面中,Macro description表示宏的描述,可以随便写。然后点击下方的Response,接着点击右边的Configure item:
在这里插入图片描述
接着点击右下角的add:
在这里插入图片描述
接着在parameter name这个输入框中,输入user_token,这个值由于后面会变成全局变量,因此绝对不能出错,要完整填入。然后选中下方token的值(不包含单引号),如图所示:
在这里插入图片描述
然后连续点击OK即可。
接着可以看到,宏已经设置好了:
在这里插入图片描述
此时宏还不能起作用,需要设置规则,告诉burp什么时候执行这个宏。
在session handling rules这里,点击add,然后再rule actions这里点击add,并输入run a macro:
在这里插入图片描述
然后如图所示添加user_token变量:
在这里插入图片描述
其余内容保持不变,点击右下角的OK。接着点击scope:
在这里插入图片描述
接下来就比较灵活了,上面表示该规则要在哪些模块里生效,下面表示要在哪些URL里生效。目前来看如果只是爆破的话,设置对所有URL生效就可以了,因为不是所有的URL都有user_token这个参数:
在这里插入图片描述
接着点击OK。
然后在proxy模块将刚才登陆页面的POST请求发送到repeater模块(注意先不要跟随重定向)。
第一次发送:
在这里插入图片描述
第二次发送:
在这里插入图片描述
此时发现token已经自动在变化了,说明我们刚才设置的规则已经生效了。
接着将该数据包发送到intruder模块。注意爆破时需要跟随重定向,否则无论密码正确与否,都是302,就无法分辨结果了:
在这里插入图片描述
之后通过爆破可得密码为password。
用爆破后的密码登陆:
在这里插入图片描述


三、爬虫脚本

使用爬虫脚本就不好多做解释了,懂得自然一看就懂,不明白的解释了也没用,大家自行使用即可,源码如下:

import requests
import re

url = "http://target_ip:port/login.php"

def login(password):
    headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'}
    session = requests.session()
    session.headers.update(headers)
    req=session.get(url)
    #{}是限定符,{32}表示固定匹配32位,而[a-z0-9]本身表示匹配小写字母和任意数字,后面加上限定符表示必须连续匹配32个数字或小写字母
    #re.search()是匹配整个字符串,并返回第一个匹配成功的字符串,因此使用group()函数时,该函数只能为空参数或传入参数0来提取匹配的结果中的字符串
    user_token=re.search("[a-z0-9]{32}",req.text).group(0) 
    data={"username":"admin","password":password,"Login":"Login",'user_token':user_token}
    #需要跟随重定向才能保证结果的准确性
    req=session.post(url=url,data=data,allow_redirects=True)
    html = req.text
    return html

with open('这里替换为你的密码字典.txt') as p:
    passlist =p.readlines()

#开始爆破  
for line in passlist:
    line = line.strip("\n")
    #随机选取一段只有登陆成功后才能看到的字符串,比如File Upload
    if 'File Upload' in login(line):
        print( f'>>>爆破成功!正确密码为:{line}')
        break
    else:
        print(f'>>>正在使用密码{line}进行爆破尝试,未成功!')

运行效果如下:
在这里插入图片描述


四、小结

本文以DVWA登陆页面为例介绍并演示了含token的登陆页面如何使用burp宏或爬虫脚本实时更新token并进行爆破操作,其中爬虫是我个人重点推荐的,操作简单效率极高,burp相对会繁琐一些。

### 提升Burp Suite暴力破解效率的方法 为了提升Burp Suite在执行暴力破解过程中的速度,可以采取以下几种策略: #### 优化请求频率 调整发送HTTP/HTTPS请求的时间间隔能够显著影响暴力破解的速度。通过减少延迟时间来增加每秒发出的请求数量,从而加快整个攻击进程[^1]。 ```python # 设置较低的线程数和重试次数以提高效率 threads = "5" retries = "0" with open('intruder_options.burp', 'w') as file: file.write(f'Threads={threads}\nRetries={retries}') ``` #### 利用多线程技术 启用多个发连接有助于加速密码猜测的过程。合理配置行处理的数量可以在不影响目标服务器稳定性的前提下极大程度上缩短所需时间[^2]。 #### 处理CSRF Token等动态参数 当遇到含防跨站伪造令牌(CSRF Tokens)或其他形式的会话管理机制时,需特别注意这些因素可能会阻碍暴力破解的成功率。利用Burp内置的功能或编写自定义脚本来绕过此类防护措施是必要的步骤之一[^3]。 ```bash # 使用Intruder模块内的Pitchfork攻击模式应对复杂的表单结构 burpsuite -attack pitchfork -positions $POSITIONS_FILE -payloads $PAYLOAD_LIST ``` #### 配置合适的字典文件 选择针对性强且规模适中的用户名与密码组合列表同样重要。过于庞大而缺乏方向感的数据集不仅浪费资源还可能引起不必要的网络流量负担;相反地,精心挑选的小型高效词库则更有利于快速定位潜在漏洞所在之处。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值