简介
Burp Suite 是一个广泛使用的网络安全测试工具,由 PortSwigger 开发,主要用于渗透测试和 Web 应用程序的安全评估。它包含一系列工具,可以帮助测试 Web 应用程序的漏洞,例如 SQL 注入、XSS(跨站脚本攻击)、CSRF(跨站请求伪造)等。
应用场景
版本
主要功能 拦截代理(Proxy)
用于拦截和修改客户端与服务器之间的 HTTP/HTTPS 请求和响应。可以实时分析并更改数据包内容。
将请求包转到其他模块进行配合
对抓到的包进行筛选
可筛选特定的状态码和扩展格式,支持正则表达式的形式对包中包含的内容进行筛选。
进行高亮显示,即将请求包复制成CURL的请求格式
爬虫(Crawler 或 Spider)
自动扫描 Web 应用程序,发现隐藏链接和输入点。有助于全面覆盖测试范围。
扫描器(Scanner)
自动扫描目标应用的漏洞。提供详细的风险报告,包括发现的漏洞类型和位置。
侵入点测试器(Intruder)
用于自动化测试,尝试多种输入组合,发现漏洞。常用于暴力破解、参数篡改等测试。
Repeater(重放器)
对特定的请求进行反复编辑和重新发送,观察响应的变化。适合用于精确调试和漏洞验证。
解码器(Decoder)
用于编码和解码数据(如 Base64、URL 编码等)。帮助分析和测试序列化漏洞。
扩展(Extender)
支持加载自定义插件(通过 Burp Extender API),扩展 Burp Suite 的功能。支持多种编程语言(如 Python、Java 等)。
Logger(记录器)
自动记录通过 Burp Suite 代理发送的每个 HTTP 请求和接收到的响应。包括客户端和目标服务器之间的完整交互。
目标(Target)
提供目标站点的整体结构视图。帮助用户识别测试范围,记录所有交互和发现。
comparer(对比)
测试不同的输入值(如修改参数、Cookie)对服务器响应的影响。确定特定输入是否导致漏洞行为(如未授权访问)分析请求变化
对比不同框架之前的区别,来判断有漏洞的包。
设置Burp Suite代理实现抓包
Burp Suite是通过流量经过他的代理端口来实现抓取HTTP包的,属于被动抓包的方式,可以通过设置代理来实现抓取特定的包
查看Burp Suite代理端口
配置全局代理
即计算机中的所有包都能被捕获到,可在系统网络中的代理设置,端口设置为8080即可(Burp Suite的代理端口)
浏览器设置代理
有两种方式一种是设置浏览器自身的代理,另一种是使用插件来时间特定网页使用代理。这里使用插件来设置。
先设置代理端口
设置情景模式选择刚刚创建的模式,特定域名走Burp Suite代理
如果提示网页不安全,则导入证书
导出证书
双击导入证书,设置为信任的
外部设备走代理端口
首先查看本地IP地址
外部设备配置
这里用模拟器替代,需要设置桥接模式才能和本机同一网段
配置端口代理
在无线网络右上角✏️设置手动,主机名为本机IP,端口为代理端口
导入证书
在Burp Suite导出der格式证书,后缀改为cer格式传到设备安装
随便设置个名称安装即可
测试结果
能正常抓取
验证码爆破 配置相关环境
下载jar
扩展和验证码识别脚本下载源代码
安装验证码脚本所需的python库
pip install ddddocr aiohttp
导入jar
扩展
使用步骤 抓取验证码请求包
选中验证码右键新标签打开,可以看到验证码的照片,刷新一下验证码会有改变(仅只适用于这种类型验证码识别)
刷新一下验证码的网页,抓取获取验证码的请求包,选择发送到扩展验证码部分
打开扩展的页面每获取一下都能改变验证码图片,那就证明获取获取成功了
配置验证码识别脚本
前面已经安装好了库,直接运行。看到running on http:0.0.0.0:8888
证明运行成功了
2. 将识别的地址填入接口,右键模板,根据自身爆破的验证码类型设置,我这里纯数字于是填写纯数字 3. 将识别的网页接口配置到扩展后,点击获取,然后再测试识别,测试一下能否正常工作。
抓取登录请求包,设置攻击
随便输入个账号密码抓取,发送到攻击器
选择集群炸弹,和添加payload
位置,这里我就爆破密码和验证码
按照你添加payload
的顺序来配置爆破的字典,验证码部分选择为模块
设置资源池
扩展记得开启使用
测试结果,payload2
是我验证码的部分能正常运作
IP伪造技术
简述
当对一个传参点进行测试的时候服务器可能会对IP有请求限制,超过一定限制后将会对IP地址进行封禁,这时候就需要对IP地址伪造来对传参点进行多次测试。
实现的方法
方法一:
通过修改数据包中源IP地址字段来实现如网络层IP数据包中的Source IP Address
和应用层中的HTTP请求包中的X-Forwarded-For
、Client-IP
来实现。但是服务器日志能正常看到请求的IP
方法二:
利用代理中继的方法通过使用代理服务器、CDN、僵尸网络(Tor网络)、匿名网络来转发流量将目标服务器与攻击者隔离,隐藏真实IP。服务器日志看到的是不同IP进行的正常请求
配置python解释环境
配置jython
下载包
选择最新版jar
类型的
打开Burp Suite导入,注意路径不能有中文。
方法一
这种方式适用于应用层的HTTP协议请求包欺骗,无法欺骗传输层的TCP/IP协议,而服务器的日志记录的访问IP就是基于TCP/IP的真实发送IP。
实现方法利用扩展BurpFakeIP
来为请求包中添加X-Forwarded-For
、Client-IP
来实现,但是一个个添加肯定不太限时,于是就需要到扩展
一、安装扩展
扩展下载地址 ,导入即可。如果无法使用或者报错要看看自己jython
或者扩展路径是不是有中文
二、基本使用
在请求包右键扩展选择BurpFakeIP
选择一种模式伪造IP
配合Intruder
使用
测试结果
方法二
通过获取大量的代理地址或者僵尸网络、肉鸡等,代替客户端发送请求包到服务器,那又要怎么获取如此数量庞大的代理服务器来,那就需要zmap
zmap
专为大规模扫描设计,可以在较短时间内扫描整个IPv4地址空间。找到指定服务的端口,相较于nmap
更专注于扫描而不支持服务检测。而且nmap
是对一个网络,zmap
是对整个互联网
一、配置安装zmap
通过软件包安装的的zmap
版本较低缺乏部分依赖,可通过编译安装来确保功能正常使用,这边使用的是debian系统
下载相关依赖和源代码,github链接:链接
sudo apt-get updatesudo apt-get install -y build-essential cmake libgmp3-dev gengetopt libpcap-dev flex byacc pkg-config libunistring-dev git libjudy-dev libjson-c-dev libunistring-devgit clone https://github.com/zmap/zmap.git
构建环境
cd zmapmkdir build && cd buildcmake ..
3. 编译安装
4. 验证安装
二、zmap基本命令
命令
说明
示例
zmap -p
扫描指定端口可范围的目标 IP 地址
zmap -p 80
zmap -a IP_RANGE
扫描指定的 IP 地址范围
zmap -a
zmap --output-module
指定输出格式,例如 CSV、JSON
zmap --output-module=csv --output-fields=saddr
zmap --output-fields
指定输出字段,例如 saddr、port、status
zmap --output-fields=saddr,port,status
zmap --output-filter
输出过滤条件,例如只显示成功响应的 IP(默认即使响应的)
zmap --output-filter='success=1'
zmap --version
显示 ZMap 版本号
zmap --version
zmap -T THREADS
设置并发连接数
zmap -T 1000
zmap -u -p PORT IP_RANGE
使用 UDP 扫描
zmap -u -p 80
zmap -S PROXY
使用代理 IP
zmap -S
zmap -r PORT_RANGE IP_RANGE
随机扫描指定端口范围
zmap -r 1-65535
扫描互联网上的代理端口
80,443用于 HTTP 协议的代理转发,1080为Socks5代理端口
zmap -p 80,443,1080 -o ip_port.txt -T 4
筛选出可用的地址
import requests from concurrent.futures import ThreadPoolExecutor TEST_URL = 'http://www.baidu.com' INPUT_FILE = 'raw_ips.txt' OUTPUT_FILE = 'ip_prot.txt' MAX_WORKERS = 10 def check_proxy (proxy, test_url, output_file ): """ 检测单个代理是否可用,并立即写入文件。 Args: proxy (str): 代理地址,格式为 'ip:port'。 test_url (str): 用于验证代理的目标URL。 output_file (str): 可用代理写入的文件路径。 """ proxies = { 'http' : f'http://{proxy} ' , 'https' : f'https://{proxy} ' } try : response = requests.get(test_url, proxies=proxies, timeout=5 ) if response.status_code == 200 : print (f'代理IP {proxy} 可用' ) with open (output_file, 'a' ) as file: file.write(f'{proxy} \n' ) except requests.RequestException as e: print (f'代理IP {proxy} 不可用: {e} ' ) def process_proxies (input_file, output_file, test_url, max_workers ): """ 处理代理列表,使用多线程并发检测代理的可用性。 Args: input_file (str): 包含代理地址的输入文件路径。 output_file (str): 可用代理写入的文件路径。 test_url (str): 用于验证代理的目标URL。 max_workers (int): 最大并发线程数。 """ with open (input_file, 'r' ) as file: proxies = [line.replace(',' , ':' ).strip() for line in file if line.strip()] with ThreadPoolExecutor(max_workers=max_workers) as executor: for proxy in proxies: executor.submit(check_proxy, proxy, test_url, output_file) if __name__ == "__main__" : process_proxies(INPUT_FILE, OUTPUT_FILE, TEST_URL, MAX_WORKERS) print (f"检测完成,可用代理已写入文件: {OUTPUT_FILE} " )
三、配置Burp Suite代理插件
设置代理池需要用到Burp Suite的一个扩展,扩展地址:地址
注意路径不能有中文,如果报错就要检查一下是不是jython
问题。
四、测试使用
这边原先是筛选的端口为80
、443
、1080
,这边后续过滤出来的包含1080
端口SOCKS5协议
的,最好就是将他从筛选出来。
攻击器找个传参点跑一下试试
查看结果,因为有可能节点访问不到这个地址,等其他因素,要保证成功发包最好就多次筛选
查看模块,也可以看到有正常运行,设置代理