天天看點

dvwa檔案包含漏洞原理知識點執行個體

檔案包含漏洞

  • 原理
    • 1.本地檔案包含
    • 2. 遠端檔案包含
    • 3.日志檔案包含 ??
  • 知識點
    • 1. PHP包含檔案的函數
    • 2. PHP僞協定
    • 3. 繞過(未完善
    • 5. tip
  • 執行個體
    • 1. 檔案包含與上傳結合

原理

當伺服器開啟allow_url_include時,通過PHP函數(如include)去動态包含檔案,且該輸入使用者可控,即會造成檔案包含漏洞

eg:

#漏洞:
<?php
include $_GET['filename'];
?>

#我們控制輸入file為惡意檔案test.php
filename=test.php

#test.php
<?php
phpinfo();
?>
           

1.本地檔案包含

被包含的檔案在伺服器本地

  • 使用者對輸入可控且無過濾
  • 可以利用相對路徑或絕對路徑讀取系統敏感檔案

2. 遠端檔案包含

被包含的檔案在别的伺服器(要開啟allow_url_fopen

3.日志檔案包含 ??

知識點

1. PHP包含檔案的函數

include()
 require()
 include_once()
 require_once()
 # include()函數并不在意被包含的檔案是什麼類型,隻要有php代碼,都會被解析出來
           

2. PHP僞協定

官方文檔:PHP僞協定

php://input 利用post傳參  #将post請求的資料當作php代碼執行
zip:// 可以通路壓縮包裡面的檔案。 #當它與包含函數結合時,zip://流會被當作php檔案執行,進而實作任意代碼執行
phar:// #類似zip,但其路徑無限制
data:// 同樣類似與php://input,可以讓使用者來控制輸入流 #當它與包含函數結合時,使用者輸入的data://流會被當作php檔案執行,進而導緻任意代碼執行
?
php://filter可以擷取指定檔案源碼。  #當它與包含函數結合時,php://filter流會被當作php檔案執行 是以我們一般對其進行編碼,讓其不執行,進而導緻任意檔案讀取  

           

3. 繞過(未完善

雙寫,截斷…

5. tip

  • 利用…/或…\傳回上一級目錄
  • 預設情況下,系統會将多餘的…\ 丢棄,可以利用這一點直接傳回根目錄
  • 遇到file_get_contents()要想到用php://input繞過

    file_get_contents() 将整個檔案讀入一個字元串

  • php://filter/read=convert.base64-encode/resource=檔案路徑
  • zip://中隻能傳入絕對路徑。

    要用#分隔壓縮包和壓縮包裡的内容,并且#要用url編碼%23(即下述POC中#要用%23替換)

    隻需要是zip的壓縮包即可,字尾名可以任意更改。

    相同的類型的還有zlib://和bzip2://

執行個體

1. 檔案包含與上傳結合

  • 思路:

    先用一句話木馬寫入圖檔後上傳,傳回一個相對路徑

    利用該路徑去進行檔案包含,執行木馬(利用include漏洞)

    蟻劍連結拿到shell

  • 操作:

上傳

dvwa檔案包含漏洞原理知識點執行個體

檔案包含

dvwa檔案包含漏洞原理知識點執行個體

蟻劍連結

dvwa檔案包含漏洞原理知識點執行個體

成功連結,拿到shell

dvwa檔案包含漏洞原理知識點執行個體
  • 注意

    蟻劍連結的應該是木馬寫入的檔案位址,如本次寫入的位址為:

    http://127.0.0.1/DVWA-master/vulnerabilities/fi/shell.php

繼續閱讀