文件上传漏洞
概念
文件上传漏洞发生在有上传功能的应用中,如果应用程序没有对用户上传的文件没有经过严格的合法性检验或者检验或者检验函数存在缺陷,攻击者可以上传木马、病毒等有危害的文件到服务器上面,控制服务器。
前段js过滤绕过
前段JS过滤绕过通过上传漏洞是因为应用程序实在前端通过JS代码进行的验证,而不是通过程序后端进行的验证,这样就可以通过修改前段JS代码的方式进行绕过上传过过滤,上传木马。
文件名过滤绕过
黑名单绕过
1、文件名大小字母绕过 2、名单列表绕过
白名单绕过
1、0X00截断绕过
0x00是用16进制表示的%00,在url中%00表示ascii码中的0,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已经结束。
2、解析/包含漏洞绕过
这类漏洞直接配合上传一个代码注入过的白名单文件即可,再利用解析/包含漏洞
3、.htaccess攻击
Apache的.htaccess:<FilesMatch “xxx”>SetHandler application/x-httpd-php 指定名字含xxx的文件为php可执行文件。 上传一个自定义的.htaccess,然后上传一个代码注入过的白名单文件,就可以绕过各种检测。 如可以将jpg文件当做php文件来执行。
Content-Type过滤绕过
Content-Type用于定义网络文件的类型和网页的编码,用来告诉文件接收方式将以什么形式、什么编码读取这个文件。 不同的文件都会对应不同的Content-Type,比如jpg文件的Content-Type为image/jpeg,php文件的Content-Type为application/octet-stream。 Content-Type是在数据包的请求包头中,开发者会通过Content-Type的类型判断文件是否允许上传,但是Content-Type的类型可以通过抓包篡改,这样就可以通过抓包修改数据包的Content-Type来绕过Content-Type判断。 常见的Content-Type类型:
文件头过滤绕过
不同的文件都有特定的文件头格式,开发者通过检查上传文件的文件头检测文件类型,这种检测方式同样可以被绕过,只要在木马文件的头部添加对应的头文件,这样既可以绕过检测又不影响木马文件的正常运行。
.htaccess文件上传
.htaccess文件上传是利用.htaccess文件可以对Web服务器配置的功能,实现对jpg,png等后缀的文件当做PHP文件解析的过程。 .htaccess文件提供了一种基于每个目录进行配置更改的方法,包含一个或多个配置指令的文件放在特定的文档目录中,并且文件中的指令适用于该目录及其所有子目录。
截断上传
截断的产生原因就是存在%00这个字符,PHP版本小于5.3.4时,会把它当做结束符,导致后面的数据直接忽略,造成截断,上传时如果上传文件的路径可控,可以通过00截断,进行木马上传。
竞争条件文件上传
静载本段代码首先将用户上传的文件保存在up目录下,然后有判断了上传文件的后缀是否在allow_ext中,如果不在通过unlink函数再去删除已经上传的文件。漏洞点在于文件在保存到服务器之前并没有进行合法性的检查,虽然保存后进行了文件的检查,但是通过竞争条件漏洞,通过上传有写文件功能的木马,在删除木马之前访问已经上传的木马,可以写入新的木马。
上传漏洞修复
1、使用白名单限制文件上传的类型。 2、对上传文件进行随机重命名,并且文件的扩展名不允许用户自定义。 3、对文件上传的文件夹进行权限限制,去掉脚本的执行权限。 4、对文件的内容进行恶意代码的检测。 5、文件服务器单独设置。
|