preg_match()绕过的问题总结
最近参加⽺城杯,遇到了⼀道题本来的思路是绕过preg_match()函数读取secret.php⽂件,然后从secret.php中给的函数构造pop链使⽤反序列化的知识点进⾏命令执⾏,从⽽得到flag
但是问题是第⼀步就出现了问题,绕过preg_match()就绕不过去记录⼀下:
我搜索到的常⽤的绕过⽅法有:
1.数组绕过,即传⼊的参数为数组
源代码如下:
效果:
成功绕过preg_match()php文件下载源码
2.利⽤PCRE回溯次数限制绕过
源代码:
如何绕过呢,让回溯次数超过最⼤限制就可以使preg_match()函数返回false,从⽽绕过限制,中⽂的回溯次数在100万次就会崩溃,这个回溯保护使PHP为了防⽌关于正则表达式的DDOS
结果:
POC:
成功绕过了preg_match()
3.换⾏符绕过
.不会匹配换⾏符
源代码:
结果:
成功绕过,Hacking attempt detected<br/><br/>没有输出