搜索型注入

搜索型注入

一种特殊的“字符型注入”。

它与的字符型注入核心都要用单引号 '​ 来闭合。但是,它们在后台 SQL 语句的写法逻辑上有一个关键的区别,这个区别决定了为什么有时候你的 Payload 需要微调(比如加个 %)。

  • 字符型id = '$id'​,所以用 ' 闭合。
  • 搜索型username LIKE '%$name%'​,所以要用 %' 来闭合(把那个百分号顶回去)。

在绝大多数情况下,用字符型的 kobe'和搜索型的 kobe%'确实没区别,都能把数据注出来。

为什么?

因为注释符 (--) 把屁股擦得太干净了

情况 A:你用“正统”的搜索型写法 (kobe%')

你输入:kobe%' union select ... -- 拼接到 SQL 里变成:

SELECT * FROM users WHERE name LIKE '%kobe%' union select ... -- %';
  • 解析: 红色部分被注释掉了。
  • 实际执行: WHERE name LIKE '%kobe%'
  • 逻辑: 查找包含 "kobe" 的名字。这完美还原了原来的业务逻辑。

情况 B:你用“偷懒”的字符型写法 (kobe')

你输入:kobe' union select ... -- 拼接到 SQL 里变成:

SELECT * FROM users WHERE name LIKE '%kobe' union select ... -- %';
  • 解析: 注意看!原本最后面那个 %​ 被注释符 -- 给切掉了!
  • 实际执行: WHERE name LIKE '%kobe'
  • 逻辑: 查找以 "kobe" 结尾的名字。

【关键点来了】: 不管你是查“包含 kobe”还是“以 kobe 结尾”,只要前面的 SQL 语句​语法没报错​,后面的 UNION SELECT 就能正常执行!

所以,只要能把那个单引号 '闭合上,把后面多余的东西注释掉,至于原来的搜索逻辑是“包含”还是“结尾”,根本不重要!

但是:

既然 '​ 通杀,为什么还要学 %'?主要有两个原因:

1. 为了“逻辑闭合” (优雅)

有的更复杂的注入场景,后面可能不能用注释符(比如要把注入语句插在中间,或者有防火墙过滤了 -- )。 这时候你就必须手动把后面的结构补全。

  • 如果你不加 %​,语句可能变成 LIKE '%kobe' AND ...
  • 如果你加了 %​,语句变成 LIKE '%kobe%' AND ...后者更能保证原始 SQL 逻辑的完整性,不容易因为逻辑错误导致查不到数据(虽然在 Pikachu这种简单靶场体现不出来)。

有些程序员为了防止 SQL 注入,会把 %​ 放在单引号外面拼接,或者用特殊的转义函数。了解 %' 的结构有助于你分析更复杂的代码审计。

posted @ 2025-12-15 22:48  xx666q  阅读(5)  评论(0)    收藏  举报