文件上传漏洞检测工具 帮你绕过过滤防入侵

检测维修 0 110

网安教育

培养网络安全人才

技术交流、学习咨询

前言

从学完这文件上传相关知识之后, 本想着进行一番梳理总结, 然而却一直因自身懒散而不断往后拖延, 直至近期面临着要准备面试这一情况了, 才借此契机打算把它撰写出来。

文件上传漏洞介绍

这个漏洞是指, 用户上传了一个能够执行的脚本文件, 凭借此进行操作, 获得了执行服务器端命令的能力。“文件上传” 这件事本身不存在问题, 有问题的地方在于, 文件上传之后, 服务器用怎样的方式去处理, 怎样去解释这个文件。要是服务器处理逻辑的安全性不足, 就会引发严重后果。

最为直接且有效的是这种攻击方式, 因而我们所需思考的是怎样去绕过检测以及过滤。

文件上传漏洞危害

上传的文件属于 web 脚本语言, 服务器端的 web容器, 对用户上传的脚本进行了解释操作, 进而使得代码得以执行。

当所上传的文件属于病毒或者木马范畴时, 其主要作用在于, 对用户或者管理员进行诱骗, 使其去下载执行该文件, 或者让文件直接自动运行起来。

对于Flash而言, 其策略文件crossdomain.xml即是被用来上传文件的, 而黑客会借助它来操控Flash在该特定域之下的行为, (其他借助类似手段去控制策略文件的情形与之相类似)。

上传的文件, 属于病毒、木马类型的文件, 是黑客用来诱骗用户, 或者诱骗管理员进行下载并执行操作的文件。

上传的文件若是钓鱼图片, 或者是包含脚本的图片, 在某些版本浏览器里, 会被当作脚本执行, 进而被用于钓鱼与欺诈。除此以外, 还有一些不常见的利用方式呢, 比如说把上传文件当成一个入口, 使服务器的后台处理程序溢出, 像图片解析模块这样的;又或者上传一个合法的文本文件, 其内容含有PHP脚本, 接着通过“本地文件包含漏洞(Local File Include)”来执行此脚本。

文件上传漏洞满足条件

上传的后门文件,需要能被脚本语言解析执行。

说明一: 那处于对方服务器进行运行的PHP环境, 你是不可以去上传一个属于JAVA的后门代码的。

说明二: 你所上传文件的那个目录, 能够被脚本语言进行解析执行, 要是你上传的目录, 不存在执行权限, 那也是不行的。

说明三: 通常情况下, 文件上传完毕之后, 会给你返回一个地址。要是没办法链接到, 那就不能够构成文件上传方面的漏洞。

另外存在着例外情形, 并非脚本文件同样能够被成功地解析。举例来说: 上传了一幅图片, 要是对方中间件之上存在某些漏洞的话, 借助这些漏洞能够达成图片文件依照脚本文件进行解析。

文件检测流程

一般来讲, 当一个文件借助HTTP协议来进行上传之际, 会以POST请求去发送到web服务器那儿, web服务器把请求接收过来, 并且同意了之后, 用户跟web服务器就会建立起连接, 进而传输data。

而一般一个文件上传过程中的检测如下图红色标记部分:

检测的内容一般有一下几个方面:

客户端 java 检测 (通常为检测文件扩展名)

服务端进行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文件使用的限制条件:

1.上传.user.ini的目录必须有设置默认首页

2.php版本必须要在5以上

使用user.ini文件的好处:

文件上传漏洞危害_文件上传漏洞检测工具_文件上传漏洞原理

1.可以突破文件后缀的检测

2.可以突破图片目录不给解析执行权限的限制

详细利用手法如下:

上传user.ini文件

上传后门图片文件

后门链接读取flag

154关:关键字过滤

其手法与153关是一样的, 不同之处在于增添了对图片内容的检测, 检测图片的数据之中是否存在恶意的代码, 经过尝试之后发现, php被过滤了。

绕过方法:

//前提是开启配置参数short_open_tags=on

//不需要开启参数设置

//前提是开启配置参数asp_tags=on

先有< language=”php”>, 之后echo '1', 并且这里不需要修改参数开关。

1构造payload:

再次上传后门文件,读取flag即可

155关:关键字过滤

和上一关一模一样,不再赘述。

156关:过滤关键字

与第153关的手法是一样的, 需要结合上传 .user.ini, 不过过滤的内容发生了变化, 有改变 , 有调整。

从事经过尝试之后过滤的内容探究, 发觉呈现结果属于是, 倘若存在绕过的手法, 那么能够用以参考的是第154关列举出来的方法。

解决思路: == {}

1构造payload:

链接后门读取flag即可

157关:过滤关键字

和第153关手法一样,结合上传 .user.ini 但是过滤的内容变了

先做了尝试, 而后发现被过滤的, 是那个分号, 与特定的一些内容。一旦分号被过滤, 这就表明, 那一百五十四关的四种过滤方法都失效了。

解决思路:直接调用系统的命令

1构造payload:

直接访问upload命令就能看到结果

158关:过滤关键字

和157关一摸一样

159关:过滤关键字

和第153关手法一样,结合上传 .user.ini 但是过滤的内容变了

在前面一关进行过滤的基础之上, 增添了正确内容的过滤, 与此同时, 还传递过来了 flag.php。

解决思路:使用反引号,结合通配符

1构造payload:

160关:日志文件包含

这一关连反引号都过滤了,1.png里面包含后门的全部失效。

Nginx通常会去记录日志, 日志会将访问者的UA头给记录下来, 所以我们能够把后门代码写入到UA头当中, 再借助.user.ini去包含日志文件, Nginx默认日志位置处在/var/log/nginx。

首先上传文件.user.ini,在上传图片

图片中的内容

这时访问upload目录,得到了nginx日志信息

此时, 我们能够可在UA头当中写入那具有特定作用的后门代码, 把日志文件进行包含解析的操作, 我们会将UA写入日志文件这里当中, 进而对那已写入其中的后门代码展开解析。

161关:文件头检测

加上了对文件头的检测,GIF89A,

解题思考方向: 于上传的文件里头添加, GIF89A, 而后顺着160关的思考途径就行。

162关:过滤.

1GIF89a

相关推荐: