最近參加羊城杯,遇到了一道題本來的思路是繞過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/>沒有輸出