對CTF不是很感興趣,但是從中一些php的安全知識還是不錯的,從這個項目中找了10個案例,自己本地搭建環境嘗試分析,這篇文章記錄一下
extract
extract函數是把數組里面的鍵、值映射為變量、值。
該題條件是$shiyan==$content
$shiyan是可控的,而$content為讀取一個文件名為$flag的文件內容。
嘗試網上的payload:?shiyan=&flag=1
這個思路是覆蓋$flag為1,file_get_contents讀取1這個不存在的文件內容為空,然后滿足條件,讀出了flag:
我想到一個加強版:
我在條件里面加了一個 $shiyan=='mkdd',這個時候上面的方法就不可用了,因為問題在於怎么讓file_get_contents讀取一個文件,內容為mkdd?這時候需要用到php://input偽協議,直接把post的內容傳給$content即可
strcmp
strcmp是對兩個變量進行比較,完全相同才返回0,題目的意思就是你傳入一個和flag完全相同的值,我就告訴你flag...這不扯淡嗎
那肯定還有某些情況下也能返回0?是的,strcmp傳入數組的話,會返回null , 而null==0 是true
繞過過濾的空白字符