刷題[HCTF 2018]WarmUp


解題思路

進入頁面之后,一個大大的滑稽。

查看源碼

查看源碼發現有source.php 。打開

發現還有一個hint.php。打開發現

由此可知是代碼審計了

解題

代碼審計


先看此段代碼,大致意思是。如果提交過來的file不是空的,並且是字符串,經過了emmm類中,checkFile函數的過濾。那么就執行包含文件。由此可知可能存在文件包含,目錄穿越的漏洞。而要包含的就是ffffllllaaaagggg。
現在看如何繞過過濾

主要看這段代碼,這段代碼的意思是
獲取傳入的參數位數,然后截取前該位數的字符。
舉個例子,傳入參數是flag.php,首先經過mb_strpos獲取位數,為8.然后經過mb_substr截取flag.php的前八位,也就是flag.php。
然后需要該參數在白名單里,也就是截取第一個?后的值為hint.php或source.php
然后經過url解碼后再進行一次過濾,如果最后返回真,即可包含文件

文件包含

payload:?file=source.php%253F../../../../../ffffllllaaaagggg

確保url解碼后能通過白名單。瀏覽器會解碼一次,所以?二次編碼,%253F,這里是php的一個特性:

?兩次編碼可以實現跨目錄,#二次編碼也可以

$page經過兩次解碼 $_page=source.php?../../../../../ffffllllaaaagggg
經過函數截取?前的內容,source.phph可通過白名單檢驗,然后通過此include $_REQUEST['file']
實現文件包含,因為source.php也被解析為目錄,通過目錄穿越即可到達,獲得flag

總結思路

核心思路:

  • 查看源碼得知本題考點為代碼審計,文件包含,目錄穿越
  • 確定獲得flag值通過文件包含,本題共有四個可有true返回的條件,構造一個滿足的條件即可
  • php將二次編碼的?前的內容視為目錄

知識點

  • 代碼審計
  • 目錄穿越
  • 文件包含


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM