N6 DVWA File Upload(文件上传)

一、概念

文件上传漏洞,通常是由于对上传文件的类型,内容没有进行严格的过滤、检查,是的可以通过上传webshell获取服务器权限,因此文件上传漏洞带来的危害常常是毁灭性的。

二、Low级别

1.代码审计
在这里插入图片描述
basename(path,suffix)函数的功能:返回path中的文件名部分,如果可选参数suffix为空,则返回文件名包含后缀名,反之不包含后缀名。
我们发现,这里的代码对于文件没有做任何的审查。

2.漏洞利用
我们创建一个test.php文件
在这里插入图片描述
尝试上传
在这里插入图片描述
发现出现相对路径,…/…/表示向上两个文件夹,那么我们对链接进行拼装
http://192.168.3.133/DVWA-master/vulnerabilities/upload/#
…/…/hackable/uploads/test.php
-》http://192.168.3.133/DVWA-master/hackable/uploads/test.php
尝试访问该链接,发现成功执行上传的文件。
在这里插入图片描述

三、medium级别

1.代码审计
在这里插入图片描述

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

发现代码判断文件类型描述为jpeg或png且文件小于100000字节的文件,可以通过上传。

2.漏洞利用
我们将test.php文件的后缀改为.jpg
在这里插入图片描述

上传文件时,我们使用Burpsuite修改上传的数据包
在这里插入图片描述
修改完毕,点击Foeward放行数据包。
访问以下的链接
http://192.168.3.133/DVWA-master/hackable/uploads/test.php
在这里插入图片描述
成功进行文件上传

四、high级别

1.代码审计
在这里插入图片描述

 // 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' ];

if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
        ( $uploaded_size < 100000 ) &&
        getimagesize( $uploaded_tmp ) ) 

文件名要jpg、jpeg且后缀名要jpg。
$uploaded_ext变量存储的为文件的后缀名
其中getimagesize(变量)判断是否为图片文件,检测文件头是不是有GIF98,然后检测图片文件大小。
我们可以在代码的头部加入GIF98进行绕过。
2.漏洞利用
将test.jpg里的内容修改如下

在这里插入图片描述
将文件上传,发现可以成功上传
在这里插入图片描述
我们在服务器中发现该文件为jpeg类型的文件
在这里插入图片描述
我们尝试直接进行访问
http://192.168.3.133/DVWA-master/hackable/uploads/test.jpg
在这里插入图片描述
发现这里默认是以jpg图片的格式进行解析的。
我们需要将jpg文件的内容按php的格式进行执行。
这时候我们就需要将文件包含漏洞进行利用,文件包含是将所有的文件先以php的形式进行执行,如果执行不成功,则返回文件内容。
我们使用high级别的文件包含,输入以下链接
http://192.168.3.133/DVWA-master/vulnerabilities/fi/?page=file://C:\PHPTutorial\WWW\DVWA-master\hackable\uploads\test.jpg
在这里插入图片描述
成功执行。
有的时候,一个低危的漏洞并不可怕,但几个低危的漏洞结合起来,有可能就会变成一个高危的漏洞。

五、impossible级别

1.代码审计
在这里插入图片描述

这里我们可以看到有token检测、将文件名重命名md5加密等,将文件名混淆。
判断文件后缀为jpg,判断是不是图片文件,然后检测图片大小。创建图片文件,如果报错则error,若创建成功,则删除这个文件。最终命名文件为md5加密混淆后的名字

六、防御

1.文件进行md5处理后作为文件名,可以使%00截断无法绕过
2.加入token
3.对文件内容进行严格检查。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尐猴子君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值