File Upload(文件上传)

File Upload

前言

文件上传漏洞:攻击者上传了一个可执行的脚本文件,通过此脚本文件获得了执行服务器端命令的功能。文件上传是否会产生漏洞关键在于服务器怎么来处理,怎么来解析这个文件。如果说服务器处理的模式不够安全,那么就会导致严重的后果,也就是上传了恶意的可执行文件以后,服务器端对此文件进行执行

文件上传漏洞需要对一句话木马,以及菜刀的使用有所了解。

练习

Low

文件上传我们直接先尝试下上传个一句话木马
在这里插入图片描述
上传成功
在这里插入图片描述
还给你返回了路径…(这还真贴心)
来试下菜刀连(这里是uploads有个s,前面没有输s结果命令一直不能执行,搞了好久…)
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
可以看到菜刀连的很顺利,文件管理,命令执行都没问题
emmm…Low级别整体还是没什么障碍吧,体验感很好…

Medium

在这里插入图片描述
medium按照上面的方法上传已经不行了,它提示说只接受JPEG和PNG的图片文件…
OK,我们首先将文件名改为png,上传试下。
在这里插入图片描述
可以看到改了之后上传成功了,但最重要的是菜刀能不能连啊
在这里插入图片描述
可以看到完全不行,按照image/png图片把文件给传回来了…
很好理解吧,你传的png的文件,然后访问png文件,自然按图片给解析了…
有没有方法把png或jpeg当做PHP来解析呢?前面做文件包含漏洞的时候它的一个特性没注意到,php文件包含,其包含文件无论是什么格式,都会被当做php文件来解析…
这个特性在这里配合文件上传来用就很6了…
在菜刀这里来配置构建的url(这里是medium等级,构造时要注意)
http://192.168.2.123:8325/vulnerabilities/fi/?page=hthttp://tp://192.168.2.123:8325/hackable/uploads/webshellm.png
emmm这里菜刀连的时候有些问题了…
在这里插入图片描述
emmm…这就懵逼了,哪里有问题呢???
好吧百度了下,发现了问题所在,菜刀发的包,cookie有点问题,有两个security参数
在这里插入图片描述
wireshark抓包确实有两个security…我又懵逼了,这应该算菜刀的bug吧…
emmm…我重启了下菜刀,然后浏览网站选择medium难度(因为上面写的low不太对)…然后就正常了(还有我看有人说可以用burp抓包来修改也行,但怎么让菜刀走代理呢???有没有知道的大佬告知下)
在这里插入图片描述
通过代码审计,我们可以发现这里是通过判断content-type来判断文件类型,这我们就可以抓包来修改了
在这里插入图片描述
这里我们把最下面的content-type修改为image/png来上传
在这里插入图片描述
可以发现上传成功!
菜刀连接,很稳没问题,虚拟终端,文件管理都很完美,可以使用在这里插入图片描述
当然我们也可以上传png文件,截包改文件名后缀,都一个道理

我看了下资料据说还有截断绕过这种操作。但随着时代的发展,这个方法在现代这个年代已经不好使了…
当Magic_quote_gpc选项为off时,可以在文件名中使用%00截断
但5.2的时候已经默认开启了,php 5.4的时候gpc的选项的都移除了…
iis5.x/6.0也存在文件解析的漏洞,会以分号作为截断,但现在基本不好使了…

High

这里服务端会对上传文件后缀及文件头部进行校验
然后会用到文件合并的知识,下面是我在百度上找的,说的还是比较清楚了

在Windows系统中,两个文件可以通过命令提示符来合并成一个文件,目的是为了隐藏重要数据。
其中,jpg、rar合并是一个典型的例子,并且有着举足轻重的作用。
例如:1.jpg和2.rar的合并文件可以命名为3.jpg。
3.jpg可以当做普通图片浏览,此时效果等同于1.jpg;
也可以用WinRAR等压缩软件打开,此时效果与2.rar相同。

讲道理,菜鸡的我还真是第一次用这个…
在这里插入图片描述
成功(参数“/b”表示以二进制格式复制、合并文件,参数“/a”表示以ASCII格式复制、合并文件)
(Linux: a.php >> b.jpg)
在这里插入图片描述
可以看到上传成功…
再来试下菜刀连接
http://192.168.2.123:8325/vulnerabilities/fi/?page=file:////var/www/html/hackable/uploads/webshell.jpg
果然又不行…cookie又有问题
在这里插入图片描述
按照上面的方式重启了下菜刀,就好了…
(最开始没写成绝对路径一直不行,sb了很久…)
上传了一个phpinfo的一句话木马通过浏览器去访问也没问题
在这里插入图片描述

Impossible

这个级别,对文件进行了严格的检查,对文件名进行了md5重命名(防止截断)。
在这里插入图片描述
可以看到这里上传已经没有给路径了,返回的文件名是MD5后的文件名(而且我试了下即使传相同的文件返回的文件名是不一样的…,因为加了uniqid()函数)
在这里插入图片描述
可以看到用high级别的漏洞包含去执行上传文件已经不行了…
在这里插入图片描述
在这里插入图片描述
可以看到文件尾部已经不一样了(上面是high级别上传的,下面是impossible级别上传的)为什么会更改可以去看下源码,(不会世界最好的语言代码审计都莫得搞…)

总结

  1. 其实我一直觉得这里的练习省了一个最大的步骤,如何获取绝对路径,我觉得很难啊(菜鸡的感觉,大佬可能觉得这根本不是问题)…
  2. 单纯的上传漏洞其实从上面的练习中就可以看出来用的已经不多了,多配合文件包含,命令行注入来执行
  3. 整体来看文件上传感觉技术含量还是没有sql注入来的高,而且使用条件有些苛刻,经常需要配合别的漏洞使用才行

Tips

文件包含一些补充,下面的文章感觉干货还是很多的
Web安全实战系列:文件包含漏洞

参考

  1. 新手指南:DVWA-1.9全级别教程之File Upload
发布了54 篇原创文章 · 获赞 22 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_26406447/article/details/89391470