温馨提示:这篇文章已超过469天没有更新,请注意相关的内容是否还可用!
摘要:本文详细介绍了文件上传漏洞,包括其成因、危害及如何利用漏洞进行攻击。文章全面解析了文件上传漏洞的各个方面,帮助读者了解如何防范和应对这一安全威胁。通过本文,读者可以了解到文件上传漏洞的重要性和紧迫性,以及如何在日常生活中保护自己的网络安全。文章内容丰富,全网最详细,具有很高的实用价值。
目录
前言
文件上传漏洞介绍
文件上传漏洞危害
文件上传漏洞满足条件
文件检测流程
CTFSHOW 151关-170关
151关:前端验证绕过
152关:后端校验 Content-Type 校验文件格式
153关:filename字段文件后缀校验
154关:关键字过滤
155关:关键字过滤
156关:过滤关键字
157关:过滤关键字
158关:过滤关键字
159关:过滤关键字
160关:日志文件包含
161关:文件头检测
162关:过滤 .
163关:条件竞争
164关:二次渲染
165关:二次渲染
166关:上传zip格式
167关:. htaccess文件绕过
168关:考验免杀
169关:日志包含
170关:和169一摸一样
前言
自从学完文件上传后,寻思总结一下,但一直懒惰向后推迟,最近要准备面试了,就趁此机会写一下。
文件上传漏洞介绍
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。“文件上传” 本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
这种攻击方式是最为直接和有效的,所以我们需要思考的是如何绕过检测和过滤。
文件上传漏洞危害
- 上传文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行。
- 上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接 自劢运行;
- 上传文件是Flash的策略文件 crossdomain.xml,黑客用以控制Flash在该域 下的行为(其他通过类似方式控制策略文件的情况类似);
- 上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行;
- 上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。 除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢 出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本,再通过"本地文件包含漏洞(Local File Include)"执行此脚本。
文件上传漏洞满足条件
上传的后门文件,需要能被脚本语言解析执行。
- 说明一:对方服务器运行的PHP环境,你不能上传一个JAVA的后门代码。
- 说明二:你上传文件的目录可以被脚本语言解析执行,如果你上传的目录没有执行权限也不行
- 说明三:一般文件上传后会返回你一个地址,如果无妨链接到也不能构成文件上传漏洞。
还有例外情况,非脚本文件也能被成功解析。比如:上传了一个图片🐎,如果对方中间件上存在一些漏洞的话,配合这些漏洞可以实现图片文件按照脚本文件解析。
文件检测流程
通常一个文件以HTTP协议进行上传时,将以POST请求发送至web服务器,web服务器接收到请求后并同意后,用户与web 服务器将建立连接,并传输data:
而一般一个文件上传过程中的检测如下图红色标记部分:
检测的内容一般有一下几个方面:
- 客户端 javascript 检测 (通常为检测文件扩展名)
- 服务端 MIME 类型检测 (检测 Content-Type 内容)
- 服务端目录路径检测 (检测跟 path 参数相关的内容)
- 服务端文件扩展名检测 (检测跟文件 extension 相关的内容)
- 服务端文件内容检测 (检测内容是否合法或含有恶意代码)
CTFSHOW 151关-170关
151关:前端验证绕过
前端代码,限制只允许上传图片。
修改png为php即可绕过前端校验。
最后会返回一个地址,使用蚁剑链接
读取flag
152关:后端校验 Content-Type 校验文件格式
前端修改,抓取上传数据包,并且修改 Content-Type
上传成功
后门链接读取flag
153关:filename字段文件后缀校验
按照刚刚提到的文件上传成因来说,如果加入了php后缀校验的话,路就被封死了。但还有另外一条路,就是非php文件后缀解析按照php进行解析。
文件后缀校验解决思路:引入 user.ini 文件
根据网上查到的信息,user.ini文件中有个字段 auto_prepend_file 它可以把指定文件文件加载到网站的首页,是根目录的首页。
我们可以得到的信息:通过这个字段可以把文件与你上传的目录首页文件一起加载,被php脚本执行解析。
由此我们得出结论,user.ini文件使用的限制条件:
- 上传.user.ini的目录必须有设置默认首页
- php版本必须要在5以上
使用user.ini文件的好处:
- 可以突破文件后缀的检测
- 可以突破图片目录不给解析执行权限的限制
详细利用手法如下:
上传user.ini文件
上传后门图片文件
后门链接读取flag
154关:关键字过滤
手法和153关一样,不同点在在于增加了对图片内容的检测,检测图片的数据里有没有恶意的代码。经过尝试发现,过滤了php。
绕过方法:
//前提是开启配置参数short_open_tags=on
//不需要开启参数设置
//前提是开启配置参数asp_tags=on
echo '1'; //不需要修改参数开关
构造payload:
再次上传后门文件,读取flag即可
155关:关键字过滤
和上一关一模一样,不再赘述。
156关:过滤关键字
和第153关手法一样,结合上传 .user.ini 但是过滤的内容变了
经过尝试过滤的内容发现是 [] 绕过的手法可以参考第154关列举出来的方法
解决思路: [] == {}
构造payload:
链接后门读取flag即可
157关:过滤关键字
和第153关手法一样,结合上传 .user.ini 但是过滤的内容变了
经过尝试发现过滤的 ; 与 [] ,分号一旦被过滤就意味着154关的四种过滤手法失效
解决思路:直接调用系统的命令
构造payload:
直接访问upload命令就能看到结果
158关:过滤关键字
和157关一摸一样
159关:过滤关键字
和第153关手法一样,结合上传 .user.ini 但是过滤的内容变了
在上一关过滤的基础上,加入了对()的过滤,同时还过来了 flag.php
解决思路:使用反引号,结合通配符
构造payload:
160关:日志文件包含
这一关连反引号都过滤了,1.png里面包含后门的全部失效。
Nginx一般会记录日志,日志会记录访问者的UA头,所以我们可以把后门代码写到UA头里面,然后利用.user.ini来包含日志文件,Nginx默认日志位置/var/log/nginx
首先上传文件.user.ini,在上传图片
图片中的内容
这时访问upload目录,得到了nginx日志信息
此时我们可以在UA头中写入后门代码。 将日志文件包含解析,我们将UA写入日志文件,进而解析后门代码
161关:文件头检测
加上了对文件头的检测,GIF89A,
解决思路:在上传的文件中加入,GIF89A,再延续160关的思路即可
162关:过滤 .
这一关不仅是检测了文件头,也过滤了()、[]、{}、.这些,所以我们可以将.user.ini的内容写为
GIF89a auto_prepend_file=png
我们可以远程包含文件,然后这个文件里面有一句话木马,这边需要用到IP转换地址,将IP转换为纯数字 网址:在线ip转int,ip转数字-BeJSON.com
GIF89a
还没有评论,来说两句吧...