【渗透测试】文件上传漏洞总结

目录

什么是文件上传漏洞

文件上传功能验证类型

文件上传功能验证绕过

一、客户端JavaScript验证绕过

二、服务端MIME类型检测绕过

三、服务器文件内容验证绕过

四、服务端文件扩展名验证-黑名单

五、服务端文件扩展名验证-白名单

六、中间件之服务器解析漏洞

七、利用CMS、编辑器漏洞

八、WAF绕过

安全修复


什么是文件上传漏洞

对于具有文件上传功能点的地方,都有可能上传可执行的脚本文件,并通过此脚本文件获得服务器权限。

文件上传功能验证类型

  • 客户端JavaScript验证

  • 服务端MIME类型验证

  • 服务端文件扩展名验证

    • 白名单

    • 黑名单

  • 服务器文件内容验证

    • 文件头

    • 文件加载检测

文件上传功能验证绕过

一、客户端JavaScript验证绕过

  • 修改或删除关键的检测函数,或者通过浏览器插件直接禁用JavaScript

  • 通过Burp抓包,将抓取的内容进行修改,从而绕过前端JavaScript检测

二、服务端MIME类型检测绕过

  • 使用Burp抓包,修改Content-Type类型实现绕过

三、服务器文件内容验证绕过

  • 修改文件头(文件幻数)

    常见文件幻数

    • JPG:FF D8 FF E0 00 10 4A 46 49 46

    • GIF:47 49 46 38 39 61(GIF89a)

    • PNG:89 50 4E 47

四、服务端文件扩展名验证-黑名单

  • 上传特定的配置文件.htaccess

    <FilesMatch “shell.jpg”> 
    SetHandler application/x-httpd-php 
    </FilesMatch> 

    shell.jpg 即可以php脚本解析

  • shell.php::$DATA,Windows系统下PHP服务器会将后缀名带::$DATA的文件当作文件流处理,过滤不起作用,上传到服务器之后,截取::之前的格式作为文件后缀,也就是shell.php

  • 抓取数据包,在文件名最后加空格实现绕过

  • 抓取数据包,在文件名最后加点进行绕过

  • 后缀名大小写绕过,例如.Php

  • 双写后缀名绕过,例如.pphphp

  • 罕见的文件后缀名在设计黑名单时容易被遗忘,如.php5、.phtml、.phps、.pht文件进行上传,从而实现绕过

五、服务端文件扩展名验证-白名单

  • %00截断绕过

  • 条件竞争

六、中间件之服务器解析漏洞

  • Apache解析漏洞

    • apache解析文件规则是从右向左,例如shell.php.a.b.c,识别不出.c后缀名则会依次往前识别,直到识别为php时,才会被解析

    • AddHandler导致的解析漏洞

      如果服务器给.php后缀添加了处理器:AddHandler application/x-httpd-php.php就会导致类似shell.php.jpg这类多后缀的文件以php文件的形式进行解析,能够很好的绕过白名单

    • Apache换行解析漏洞(CVE-2017-15715)

      影响版本:2.4.0-2.4.29

      合法后缀配置文件中的正则表达式中$不仅匹配字符串结尾位置,还匹配\n或者\r,在解析php时,1.php\x0A将按照.php进行解析,而"".php\x0A"!=".php",即实现了黑名单的绕过。

  • IIS解析漏洞

    • 目录解析

      影响版本:IIS 6.x

      目录名为.asp、asa、cer,则目录下的所有文件都会被作为asp解析

    • 文件解析

      影响版本:IIS 6.x

      文件名中分号后不被解析,例如asp;、asa;、cer;

      url/test.asp;shell.jpg会被当作asp脚本执行

    • 文件类型解析

      影响版本:IIS 6.x

      .asa、.cer、.cdx都会被当作aso文件执行

      url/shell.asa会被作为asp文件执行。

    • FastCGI配置错误

      影响版本:IIS 7&&IIS 7.5

      利用条件:

      • 以Fast CGI运行

      • cgi.fix_pathinfo=1(全版本PHP默认为开启)

      使得当你访问任意URL时,在URL后面添加“/x.php”,该文件都会被IIS当php文件进行解析。

  • Nginx解析漏洞

    • PHP+nginx默认是以cgi的方式去运行的,当用户配置不当(cgi.fix_pathinfo默认开启),且URL中不存在访问的文件,PHP就会向前递归解析,就会导致任意文件被当作php去解析。

      利用条件:

      • 以Fast CGI运行

      • cgi.fix_pathinfo=1(全版本PHP默认为开启)

      满足以上条件时,当你访问url/shell.jsp/shell.php时,你上传的shell.jpg会被当作php去执行,

      在Nginx<=0.8.37版本时,即使关闭了Fast CGI,在这个文件路径(/x.jpg)后面加上%00.php则依旧会解析为php文件。除了使用%00还可以上传一个任意名称的jpg文件,包含:<?php fputs(fopen('shell.php','w'),'<?php eval($POST[cmd])?>');?>,访问test.jpg/.php则会在当前目录生成恶意文件shell.php。

    • Nginx文件名逻辑漏洞

      影响版本:Nginx 0.8.41~1.4.3/1.5.0~1.5.7

      利用过程:

      1. 上传"shell.jpg "文件,注意文件名后面为空格

      2. 访问"url/shell.jpg[0x20][0x00].php"

      (两个中括号中的数字是用Burp在Hex界面修改)

七、利用CMS、编辑器漏洞

八、WAF绕过

安全修复

  1. 服务端文件扩展名使用白名单检测+文件名重命名

  2. 对文件内容进行检测

  3. WAF防护软件:宝塔,云盾等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello_Brian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值