preg_match绕过简单总结

发布时间 2023-03-30 15:10:46作者: z2n3

preg_match绕过

preg_match

2

PHP手册告诉我们, preg_match 函数的返回值有3种,分别为(安全的写法是使用 === 运算符对返回值进行比较,手册推荐用效率更快的 strpos 函数替代 preg_match 函数):

returns 1;      // 如果匹配到.
returns 0;      // 如果未匹配到.
returns FALSE;  // 发生错误时.

绕过方法

1.数组绕过

原理:

preg_match只能处理字符串,当传入的subject是数组时会返回false

举例:

image-20230330083809693

image-20230330083801014

当输入的为数组时

image-20230330083829865

2.PCRE回溯次数限制

原理:

具体可以参考p牛的博客:

image.png

举例:

image-20230330084206158

3.换行符绕过

原理:

image-20230330084657773

举例:

image-20230330085103540

image-20230330085130912

image-20230330085120412

这里如果正则变成了/^.*flag.*$/s 则无效了

  • 而在非多行模式下,$ 似乎会忽略在句尾的 %0a
    • 这里本地没测试成功,不知道是版本问题还是什么,挖坑。回头补上

4.多行匹配

  • /m 多行匹配,但是当出现换行符 %0a 的时候,会被当做两行处理,而此时只可以匹配第 1 行,后面的行就会被忽略。
    • 也没成功 回头补上

参考连接: