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