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

DVWA学习之File Upload

  • File Upload(文件上传)
    • 0x01 何为文件上传漏洞?
    • 0x02 low级别
    • 0x03 medium级别
    • 0x04 high级别
    • 0x05 impossible级别
    • 0x06 文件上传漏洞技巧
    • 0x07 文件上传漏洞的使用条件
    • 0x08 中国菜刀的原理
    • 0x09 文件上传漏洞的防范

File Upload(文件上传)

0x01 何为文件上传漏洞?

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

0x02 low级别

首先,编辑一句话jerry.php:
DVWA学习之File Upload(文件上传)_第1张图片
然后,直接上传试试,发现可以直接上传,所谓只允许上传图片都是幌子:
DVWA学习之File Upload(文件上传)_第2张图片
接着,访问一下上传的jerry试试,发现没有报错:
DVWA学习之File Upload(文件上传)_第3张图片
然后,上菜刀,直接连接,拿下webshell:
DVWA学习之File Upload(文件上传)_第4张图片
DVWA学习之File Upload(文件上传)_第5张图片
接下来,就可以再提权,获取system权限,蹂躏拿到的服务器了。

0x03 medium级别

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

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

DVWA学习之File Upload(文件上传)_第11张图片
然后再用菜刀连接一下,注意三个位置的参数:
DVWA学习之File Upload(文件上传)_第12张图片
获取webshell
DVWA学习之File Upload(文件上传)_第13张图片
action two:使用burpsuite进行绕过
首先,设好代理,开启拦截
DVWA学习之File Upload(文件上传)_第14张图片
直接将filename改为“jerry.php”,让后放行:forword

DVWA学习之File Upload(文件上传)_第15张图片
发现上传成功,此时,上传到目标服务器的文件到底是什么格式呢???答案:是jerry.php
之后访问jerry.php,使得一句话被执行,再上刀连接即可。
DVWA学习之File Upload(文件上传)_第16张图片
action three:还是通过burpsuite抓包,这次使用%00截断

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

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:表示追加)

DVWA学习之File Upload(文件上传)_第22张图片
然后,通过%00截断上传,菜刀连接即可。

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

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

 cmd:   127.0.0.1&&dir

DVWA学习之File Upload(文件上传)_第23张图片
然后,cd到我们上传目录并cop文件,发现真的执行成功了,现在已经获取jerry.php,只需要访问执行再上刀连接即可:

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

DVWA学习之File Upload(文件上传)_第24张图片

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.上传文件存放在独立服务器使用

你可能感兴趣的:(DVWA学习)