CTF中绕过preg_match方法小结

0x01 数组绕过

解题思路

preg_match接收的参数为数组时返回为NULL

PAYLOAD greeting[]=Merry Christmas

0x02换行绕过,变量绕过

解题思路

if (preg_match("/^\d+\.\d+\.\d+\.\d+$/im",$ip))

结尾带有/m,^和$将匹配行首行尾,可用换行/n绕过

if (!preg_match("/\?|flag|}|cat|echo|\*/i",$ip))

过滤了关键字符,使用shell变量绕过

PAYLOAD 127.0.0.1%0a a=c;b=at;c=fl;d=ag;$a$b+../../../$c$d

0x03回溯绕过

php为了防止dos攻击,使用了pcre.backtrack_limit限制了回溯上限,当超过回溯上限时preg_match将会返回false,那么只要构造超长字符串的payload超过回溯上限即可让正则匹配失效

附上正则表达式的一个工具https://regex101.com/

可用于观察正则匹配过程

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注