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

news2024/11/24 15:23:07

文章目录

    • 前言
    • 一、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相对会繁琐一些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java诊断工具——arthas,实时监控,了解一下

文章目录1、arthas 简介官方文档2、arthas 的使用场景3、安装&启动3.1 安装3.2 启动4、常用命令5、使用示例5.1 stack5.2 jad5.3 sc5.4 watch5.5 trace5.6 jobs5.7 logger5.8 dashboard5.9 redefine6、其它1、arthas 简介 arthas是由阿里巴巴中间件团队开源的Java诊断工具。…

kubernetes对外服务之Ingress

目录 ​​​​​​​一、Ingress 是什么 1.1Service的作用 1.2Ingress简介 二、Ingress 安装 三、Ingress 代理访问 3.1Ingress HTTP 代理访问 3.2 Ingress: HTTPS 代理访问 3.3Ingress Contronler怎么工作的? ​​​​​​​​​​​​​​一、Ingress 是什…

Java核心实操:内存溢出 实战、内存泄漏实战

文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

ARM系列之MMU TLB和ASID基础概念介绍。

目录1、为什么要设计TLB?TLB中不包含我们需要的映射关系怎么办?2、TLB中都包含了啥?3、那什么是ASIDAddress Space ID(ASID)4、小结内存寻址简要过程如下:VA以页表大小取余,得到PA的低位&#x…

Go sync.Pool池化的学习

一句话总结:保存和复用临时对象,减少内存分配,降低 GC 压力。 一.前言 Go 语言标准库也大量使用了 sync.Pool,例如 fmt 和 encoding/json。 1.1 要解决的问题 一个新技术亦或是一个新名词,总是为了解决一些问题才出…

数据挖掘课程设计报告总结

一、实验题目 实验一 Apriori算法设计与应用 二、背景介绍 Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和向下封闭检测两个阶段来挖掘频繁项集。 三、实验内容 1.3.1 运用的理论知识 关联规则挖掘是数据挖掘中最活跃的研究方法之…

数控恒流源电路简单讲解

(1)最近课设是做一个可步进的恒流源,所以查查找了很多资料之后。说一下自己对于恒流源电路的简单理解。 (2)我只是会将怎么使用和调整数据进行讲解,至于为什么这样只会讲我懂的部分。本人知道的也不是很多&…

【RPA前置知识】 整理并总结ForEach Activity类

🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。 🐬个人主页:会敲键盘的肘子 🐰系列专栏:.Net实用方法总结 🦀专栏简介:本专栏介绍如何编写 Windows…

Biopython教程

Biopython教程 参考: https://biopython-cn.readthedocs.io/zh_CN/latest/index.html 蛋白质文件获取 Entrez方法 from Bio import Entrez Entrez.email邮箱名 #如123456789qq.com handleEntrez.esearch(dbprotein,term2rbg) recordEntrez.read(handle) idrecor…

C++PrimerPlus 第八章 函数探幽-8.2 引用变量

目录 8.2 引用变量 8.2.1 创建引用变量 8.2.2 将引用用作函数参数 8.2.3 引用的属性和特别之处 8.2.3.1 临时变量、引用参数和const 8.2.4 将引用用于结构 8.2.4.1 程序说明 8.2.4.2 为何要返回引用 8.2.4.3 返回引用时需要注意的问题 8.2.4.4 为何将const用于引用返…

纳米柱阵列超颖表面构建模块的严格分析

摘要 利用先进的制造技术,人们成功实现了具有高数值孔径的可见波长的超透镜。通常使用空间变化的纳米结构作为模块来构建超透镜。在这个例子中分析了用于组成偏振不敏感超透镜的纳米柱状结构。利用傅立叶模态方法(FMM,也称为RCWA)…

Windows配置开机自启jar包,不显示黑窗口,并输出日志

背景 如果是在 Linux 下开机自启一个服务相对比较简单,这次遇到一个需求是关于 Windows 开机自启的: 在 Windows 环境下开机自动运行一个 SpringBoot 服务;而且由于是一个后台服务,要求对终端用户无感知;为后期维护方…

AC自动机的实现思想与原理

1. 基本介绍 本文最先发布于博客园,原地址:AC自动机的实现与思想原理 - yelanyanyu - 博客园 (cnblogs.com) 1.1案例引入 有一个字典有若干的敏感词 String[] str;,有一个大文章 string,我们要找到大文章中出现的所有的敏感词&…

物联网ARM开发- 6协议 FSMC模拟8080时序驱动LCD(上)

目录 一、常见显示器介绍 1、显示器分类 2、显示器的基本参数 二、TFT-LCD控制原理 1、TFT-LCD结构 2、TFT-LCD控制框图 3、控制原理 LCD数据传输时序 LCD数据传输时序参数 三、SSD1963液晶控制器 1、SSD1963液晶控制器 2、SSD1963内部框图分析 3、8080写时序…

RK3568平台开发系列讲解(音视频篇)FFmpeg公共基础参数

🚀返回专栏总目录 文章目录 一、公共操作部分二、每个文件主要操作部分三、视频操作部分四、音频操作部分沉淀、分享、成长,让自己和他人都能有所收获!😄 📢当我们使用 FFmpeg 时,有一些贯穿 FFmpeg 各个组件的核心参数,在我们查看帮助信息时就可以看到,help 不带参…

基于 Tensorflow 2.x 实现多层卷积神经网络,实践 Fashion MNIST 服装图像识别

一、 Fashion MNIST 服装数据集 Fashion MNIST 数据集,该数据集包含 10 个类别的 70000 个灰度图像。大小统一是 28x28的长宽,其中 60000 张作为训练数据,10000张作为测试数据,该数据集已被封装在了 tf.keras.datasets 工具包下&…

move functions with VS without noexcept

本文所讲对移动函数使用noexcept修饰时带来的效率提升只针对std::vector。而对std::deque来说没有功效。 1. 针对std::vector 1.1 move functions with noexcept 当移动构造函数有noexcept修饰时,在对std::vector进行push_back扩充致使vector的size等于capacity时…

26. GPU以及 没有gpu的情况下使用colab

在PyTorch中,CPU和GPU可以用torch.device(‘cpu’) 和torch.device(‘cuda’)表示。 应该注意的是,cpu设备意味着所有物理CPU和内存, 这意味着PyTorch的计算将尝试使用所有CPU核心。 然而,gpu设备只代表一个卡和相应的显存。 如果…

【大数据技术Hadoop+Spark】Spark SQL、DataFrame、Dataset的讲解及操作演示(图文解释)

一、Spark SQL简介 park SQL是spark的一个模块,主要用于进行结构化数据的SQL查询引擎,开发人员能够通过使用SQL语句,实现对结构化数据的处理,开发人员可以不了解Scala语言和Spark常用API,通过spark SQL,可…

数据挖掘Java——Kmeans算法的实现

一、K-means算法的前置知识 k-means算法,也被称为k-平均或k-均值,是一种得到最广泛使用的聚类算法。相似度的计算根据一个簇中对象的平均值来进行。算法首先随机地选择k个对象,每个对象初始地代表了一个簇的平均值或中心。对剩余的每个对象根…