概述 文件上传漏洞是发生在有上传功能的应用中,如果应用程序对用户的上传文件没有控制或者存在缺陷,攻击者可以利用应用上传功能存在的缺陷,上传木马、病毒等有危害的文件到服务器上面,控制服务器。漏洞成因及危害 文件上传漏洞产生的主要原因是:应用中存在上传功能,但是上传的文件没有经过严格的合法性检验或者检验函数存在缺陷,导致可以上传木马文件到服务器。文件上传漏洞危害极大因为可以直接上传恶意代码到服务器上,可能会造成服务器的网页篡改、网站被挂马、服务器被远程控制、被安装后门等严重的后果。 下面我们就文件上传的几种验证及绕过方法1。本地验证(前端验证) 前端JS过滤绕过上传漏洞是因为应用程序是在前端通过JS代码进行的验证,而不是在程序后端进行的验证,这样就可以通过修改前端JS代码的方式进行绕过上传过滤,上传木马。 那么如何判断是否为前端验证呢?我个人觉得我们可以看在进行上传抓包的时候是否能到数据包,是否有数据流过,或者可以看上传图片是否页面会显示上传的图片地址等 绕过:将过滤代码删除,修改或禁用Javascript2。后端验证及绕过 文件上传常见验证:后缀名(直接验证),文件,文件头(间接验证) 【一一帮助安全学习,所有资源获取处一一】 网络安全学习路线 20份渗透测试电子书 安全攻防357页笔记 50份安全攻防面试指南 安全红队渗透工具包 信息收集80条搜索语法 100个漏洞实战案例 安全大厂内部视频资源 历年CTF夺旗赛题解析2。1后缀名 2。1。1黑名单(明确不允许上传的脚本格式后缀) 文件名过滤绕过漏洞主要是因为通过黑名单的方式判断了文件上传的类型,而且并没有完整的过滤,导致攻击者通过上传黑名单类型之外的文件。 黑名单判断方法:上传文件,系统提示不允许上传xxx格式文件 绕过:使用其他格式(php5,Phtml,php3)或者文件大小写,同时也可以加一些干扰符号实现绕过 2。1。2。htaccess(伪静态协议)重写解析(Apache才有并且开启伪静态模块) 。htaccess文件上传是利用。htaccess文件可以对Web服务器配置的功能,实现对jpg、png等后缀的文件当做PHP文件解析的过程。 。htaccess文件(分布式配置文件)提供了一种基于每个目录进行配置更改的方法,包含一个或多个配置指令的文件放在特定的文档目录中,并且文件中的指令适用于该目录及其所有子目录。。htaccess是Web服务器的一个配置文件,可以通过。htaccess文件实现Web服务器中的定义文件的解析方式、重定向等配置。 绕过方法:首先上传1。htaccess文件。2。再上传图片马。 2。1。3空格绕过 绕过方法:数据包中文件后缀名后加一个空格实现绕过 2。14。绕过 绕过方法:跟空格绕过方法类似,数据包中文件后缀名后加一个。实现绕过 2。1。5::data绕过 这是windows特有的一种协议,在window的时候如果文件名::DATA会把::DATA之后的数据当成文件流处理,不会检测后缀名,且保持::DATA之前的文件名,他的目的就是不检查后缀名 2。1。6循环过滤 绕过:代码将字符串里的php替换为空如:a。pphphp会变成a。 2。1。7白名单:明确可以上传的格式后缀(更安全) 00截断、0x00截断(建立在地址上的原理,截断文件后面数据)00截断绕过只能绕过前端验证。 截断的产生主要原因就是存在00这个字符,PHP5。3。4时,会把它当做结束符,导致后面的数据直接忽略,造成截断,上传时如果上传文件的路径可控,可以通过00截断,进行木马上传。 绕过方法(path00截断): 1。将test改为test。php00aaa,1。php改为1。jpg这样可以通过验证函数 2。test。php00aaa中的00进行URL编码,选中00选择【Convertselection】命令,选择【URL】命令,选择【URLdecode】命令进行编码 3。文件类型验证3。1文件头检测:文件头内容信息(如gif89a) 不同的文件都有特定的文件头格式,开发者通过检查上传文件的文件头检测文件类型,但是这种检测方式同样可以被绕过,只要在木马文件的头部添加对应的文件头,这样既可以绕过检测又不影响木马文件的正常运行。 常见的文件头如下: JPEG0xFFD8FFPNG0x89504E470D0A1A0AGIF474946383961(GIF89a) 复制代码 绕过方法: 1。更改头部信息达到欺骗,如在木马的头文件中添加图片文件的文件头即可绕过检测。 GIF89alt;?phpechoREQUEST〔cmd〕;? 复制代码 2。制作图片马1。直接在图片中插入一句话木马,进行上传。利用文件包含原理2。使用cmd命令将一张正常图片1。jpg与一个包含一句话木马的a。txt文件,合成一个新的test。php木马文件 cmd命令:copy1。jpgba。txttest。php 复制代码3。2ContentType检测 ContentType用于定义网络文件的类型和网页的编码,用来告诉文件接收方将以什么形式、什么编码读取这个文件。不同的文件都会对应的不同的ContentType,比如jpg文件的ContentType为imagejpeg,php文件的ContentType为applicationoctetstream。ContentType是在数据包的请求包头中,开发者会通ContentType的类型判断文件是否允许上传, 绕过:ContentType的类型可以通过抓包篡改,这样就可以通过抓包修改数据包的ContentType来绕过ContentType判断。MIME:可以通过判断类型猜测文件后缀名,利用抓包工具将ContentType进行篡改,如改为imagepjpeg、imagejpeg、imagegif、imagepng四个中的一个即可绕过过滤4。内容及其他4。1逻辑安全:条件竞争(相当于系统占用) 定义:竞争条件是指多个线程在没有进行锁操作或者同步操作同时访问同一个共享代码、变量、文件等,运行的结果依赖于不同线程访问数据的顺序。先将文件上传到服务器,服务器按照规则对图片选择保存与删除,漏洞点在于文件在保存到服务器之前并没有进行合法性的检查,虽然保存后进行了文件的检查,但是通过竞争条件漏洞,通过上传有写文件功能的木马,在删除木马之前访问已经上传的木马,就可以写入新的木马。 绕过:将文件上传到服务器后,我们就不断进行文件路径访问,由于条件竞争,就会达到上传Webshell的目的,漏洞利用就是发送请求通过不断上传内容,这样的访问会生成新的木马文件,然后再发送另一个请求不断访问此文件,如果竞争条件漏洞利用成功就会生成新的木马。4。2目录命名 绕过:通过添加。后缀让服务器识别文件为文件夹形式,达到上传的目的,如x。php。5。其他漏洞脚本函数漏洞cveCVE201712615CVE20155254CVE20192618 复制代码 。。。。。。这些漏洞网上都有利用教程,感兴趣的可以去查阅一下资料6。中间件解析漏洞6。1IIS6。0解析漏洞 解析漏洞快速判断,。php看是否有乱码,有则存在,无则不存在 6。1。1以文件夹执行 正常文件名:imageaa。jpg绕过:image。aspaa。jpgaa。jpg就会被当作asp解析 6。1。2以文件执行 正常文件名:image。jpg绕过:image。asp;。jpg或xxx。asp;xxx。jpg此文件会被当作asp执行 asp可以换做php如果换了php,那么就可以当作php执行7。WAF绕过 要想绕过WAF,我们需要了解哪些参数可以修改,如ContentDisposition:一般可修改name:表单参数值,不能修改filename:文件名,可以修改ContentType(文件自带类型):文件MIME,视情况更改waf绕过的核心就是在可以修改的参数名后不断修改测试,尝试绕过。 常见绕过方法:7。1数据溢出(垃圾数据填充) 利用WAF检测上限,添加大量垃圾数据,让其匹配不到,类似于溢出漏洞,一般可在上传参数后面添加干扰数据,垃圾数据和参数之间要记得添加;,否则数据包会报错7。2符号变异(;) 利用程序开发漏洞,对数据包中上传参数中的符号进行替换,添加、删除,达到上传目的。如如x。jpg;。php分号代表一个数据的结束7。3数据截断(00;换行) 文件后缀名后加个00(空格)截断,x。php00。jpg换行(类似于程序中)和数据分块传输差不多,如x。php数据包其实识别的是x。php7。4重复数据 相当于函数中的递归循环,将参数在数据包中写多次原理跟垃圾数据也十分类似8。防御 1。部署宝塔,waf等安全产品 2。对上传的内容进行严格多次校验 3。对文件内容进行完整性检测