freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

SQL注入绕waf姿势:AND和OR被过滤了怎么办?
zero1234 2025-04-02 16:59:47 108307
所属地 广东省

引言

嘿嘿,没有,单纯就想教会所有人绕WAF

需要准备的环境

1. sql-labs靶场

2. 安全狗WAF

3. 思考的思维(嘿嘿)

为什么写?

首先我们常说的八种符号:

and 、 &&、or 、 ||、xor 、 |、not 、 !

他们的关系是这样的:

and = &&、or = ||、xor = |、not = !

我不知道有多少人看过这个关系式子,但说实话,我在找绕waf的文章的时候,10篇文章有8篇文章都提到了这些。但却没有提到具体应该怎么用,愁啊 。因为也误导了我挺久,直到我真正下定决心开始绕WAF的现在,才弄明白一些东西。

以这八个常见的测试SQL点为题,给它一一的抽丝剥茧!!!

总而言之,言而总之,今天我们要将其掰开一个程度,进入一个深度,而不是只停留在公式化的关系上。

系列大饼

我打算从绕SQL注入点为开始,绕时间注入,绕注入数据库,绕注入数据库实际数据,一一的写过去,让所有人都能学会绕WAF(嘿嘿,不一定实现),因为之前写过一篇绕IF过滤的,感觉其实并不好,看完以后有人反馈学不到啥,所以我以后的文章都会实战结合~

你能获得什么

1.得到一个AND和OR的绕WAF的payload

2.得到一个NOT绕WAF的payload

3.学会绕WAF的思维

正式开始

先了解一些基础吧~

AND

要求两侧条件均为真才会返回结果
OR只需一侧条件为真即返回结果
XOR要求两侧条件一真一假才返回真
对 id 和 SLEEP(5) 的二进制值进行按位或运
! 反转右侧条件的结果。
NOT反转右侧条件的结果

当然这上面不重要,重要的看下面

知识点一:ANDOR和&&和||

场景:

SELECT * FROM WHERE id="$id" Limit 1,1

一个简单的SQL语句,时间注入探测SQL注入点:

1' or sleep(5)-- -

1' and sleep(5)-- -

区别在什么地方?

1743582976_67ecf7002beb6bc6f5ed3.png!small?1743582900473

1743582989_67ecf70da694014e3553b.png!small?1743582914158

你知道是为什么吗?

具体的解释可以图文解释可以参考:

SQL注入绕WAF姿势:当if被过滤了怎么办? - FreeBuf网络安全行业门户中的知识点四:IFNULL(a, b)语法

​**OR的本质**:相当于“无条件全选”,因 True 覆盖了所有可能性。

​**AND 的严格性**:必须所有条件同时满足,True 的存在仅作为冗余条件,不影响核心逻辑。

简单来说就是AND他只会检查id=1的这一行,OR他会检查这张表的所有行,检查一次执行一次sleep(5),这个表如果有10行,那么OR延时的就是10次,10*sleep(5),最终导致连接超时。


ANDOR还需要注意第二点是什么呢?那就是,除了返回10,还会返回一个null

AND --> 当所有操作数均为非零值且不为 NULL 时返回 1;任一操作数为 0 时返回 0;其他情况返回 NULL

OR --> 当任一操作数为非零值时返回 1;所有操作数为 0 时返回 0;若存在 NULL 且其他操作数非零则返回 1,否则返回 NULL


看解释就复杂了许多,其实并不是什么很难懂的东西

AND NULL 会使得整个条件的逻辑结果变为“未知”(即 UNKNOWN)

而 SQL 的 WHERE 子句仅接受“真”条件,因此会排除该行数据。

1743583082_67ecf76aad8c313a366fa.png!small?1743583007116

1743583087_67ecf76f12eddab09b6fe.png!small?1743583011518

主播主播,结果上没有区别呀?

嘿嘿,那我们开启安全狗的WAF试试。

1743583097_67ecf7793d62bd89cf462.png!small?1743583021602

1743583101_67ecf77d825256d759bcf.png!small?1743583026082

诶,这里是不是绕WAF了,是不是绕过了?对的,没错,这就是绕了安全狗的WAF成功探测到SQL注入点。

但这不是重点嗷,重点是我们可以明确两个概念:

ANDOR返回的不仅仅是10,还可能会返回null

null0不是一样的,null代表的是空

​示例查询 1:SELECT * FROM users WHERE id="1" AND 0

逻辑结果:0 导致条件恒假 → 无数据返回。

​示例查询 2:SELECT * FROM users WHERE id="1" AND NULL

逻辑结果:NULL 使条件变为“未知” → SQL 默认排除“未知” → 无数据返回。


可能有新手师傅不太理解

返回10,为什么很多人会称之为真和假、TrueFalse

这里就再提一次,引用一下我写的文章中的内容

SQL注入绕WAF姿势:当if被过滤了怎么办? - FreeBuf网络安全行业门户

1743583217_67ecf7f13ccc2038c63e5.png!small?1743583143361

所以正确的说法是,10相当于truefalse,是为了让别人更好的理解,并不是ANDOR真的会返回truefalse。

|| 和 && 也是同理。
1743583268_67ecf8246ef87d82c994b.png!small?17435831927371743583317_67ecf85510a69c9e23809.png!small?1743583241461

那么AND=&&, OR=|| 真的成立吗?不成立,他们是有区别的!优先级上的不同。但因为不是主要需要讨论的问题,所以这里就只是提一嘴~


知识点二:XOR 和 | 

| 是位运算符,对 id 和 SLEEP(5) 的二进制值进行按位或运

XOR| 在网络上,也常常被大家看到吧,关系是一个等于的符号XOR = |

但我们抽丝剥茧看看是不是一回事。

首先是XOR,两侧条件一真一假才返回真是我们大部分知道的,但如果两侧的条件同时为真呢?回返回假吗?

试试就知道了:

1743583478_67ecf8f62c34136b030a8.png!small?1743583402493

id=1存在为true0会被隐性的转换为false,那么一真一假,会返回真。那么就会查询id=1的字段

当然XOR返回的其实也是10,并不是truefalse

再理一遍逻辑:id='1'XOR 0 ,在表达式中,id=1是存在这行数据的,所以会返回1

可试读前30%内容
¥ 9.9 全文查看
9.9元开通FVIP会员
畅读付费文章
最低0.3元/天
# SQL注入 # waf绕过 # sql注入各种姿势 # sql注入之waf绕过 # sql注入原理
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 zero1234 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
渗透注入类攻击
zero1234 LV.4
希望大家每天都开开心心,快快乐乐,坚持学习网络安全~
  • 30 文章数
  • 51 关注者
红队APT基础 | 钓鱼邮件的制作与SPF绕过(一)
2025-04-15
SQL注入绕waf姿势:sleep被过滤了怎么办?
2025-04-15
渗透测试基础|信息收集——框架识别&框架漏洞利用
2025-04-07
文章目录