文件上传漏洞各种姿势分析

文件上传,最主要的漏洞是图片上传,如果能上传对应开发语言的文件,那极大可能会获取到服务器的权限,即getshell。各上传功能点多少都有做过滤,这次做个总结,也方便以后查笔记,包括各语言、中间件及稀奇古怪的方法。

0x01 常用后缀变异绕过

语言可解析后缀
asp/aspxasp、aspx、asa、asax、ascx、ashx、asmx、cer、aSp、aSpx、aSa、aSax、aScx、aShx、aSmx、cEr
phpphp、php2、php3、php4、php5、pHp、pHp5、pHp4、pHp3、pHp2、html、htm、phtml、pht、Html、Htm、pHtml
jspjsp、jspa、jspx、jsw、jsv、jspf、jtml、jSp、jSpx、jSpa、jSw、jSv、jSpf、jHtml

0x02 中间件解析漏洞上传绕过

  1. IIS6.x解析漏洞

    基于目录名,默认将*.asp/目录下的所有文件当成asp解析

    基于文件名,默认会将*.asp;jpg当成asp解析,原理是服务器默认不解析;号及后面的内容,相当于截断。

  2. IIS7.5解析漏洞

    任意文件php解析,此版本在Fast-CGI运行模式下,在任意文件后面加上/.php都能解析为php,例如test.jpg/.php

  3. Nginx配置文件错误导致的解析漏洞

    对于任意文件名,在cgi.fix_pathinfo默认开启的状态下,访问路径添加/xx.php(xx为任意字符)后,即可将该文件作为php解析,例如:test.jpg/xxx.php

  4. Apache未知扩展名解析漏洞

    Apache默认一个文件可以有多个以点分割的后缀,当最右边的后缀无法识别(不在mime.types文件内),则 文 继续向左识别,直到识别到合法后缀才进行解析。比如访问phpinfo.php.xxx。

  5. Apache addhandler导致的解析漏洞

    如果在Apache的conf里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php就以php文件执行。

0x03 其他各种姿势的绕过

  1. 客户端校验

    上传即提示文件格式不支持,bp抓不到包,大多是前端JS校验,上传合法文件再改后缀即可。

  2. 服务端校验Content-Type

    bp抓包修改文件类型

  3. %00截断(php版本必须小于5.3.4php.ini中的magic_quotes_gpc设置为Off)

    截断注释,/payload/x.php%00.jpg,%00需要转化为URLencode,在有些函数执行时,会把这个字符(%00或0x00)当做结束符。GET请求使用%00,POST请求使用0x00。

  4. 服务端验证逻辑漏洞(此处有多种可能,比如后端未进行大小写转换、或只是去除关键词)

    后缀名大小写变化,如Php、asP等

    双写后缀,phphpp,asaspp等

  5. 服务端为windows环境可尝试

    在上传文件名后缀添加空格

    在上传文件名后缀添加.

    在上传文件名后缀添加::$DATA

  6. 可修改/覆盖apache解析配置文件.htaccess

    上传.htaccess,重写文件解析,可以直接上传图片自动解析成php文件

    例如:.htaccess内容写入,SetHandler application/x-httpd-php,这行配置表示将所有后缀名都解析为php

  7. .user.ini配置覆盖

    服务器脚本语言为PHP,并且使用CGI/FastCGI模式,php版本>5.3.0,上传目录下要有可执行的php文件。

    .user.ini,它会影响php.ini中的配置,从而将指定的文件内容按php来解析,影响的范围该文件所在的目录以及子目录。需要等待php.ini中的user_ini.cache_ttl设置的时间或重启Apache才能生效,且只在php5.3.0之后的版本才生效。.user.ini比.htaccess用的更广,不管是nginx/Apache/IIS,只要是以fastcgi运行的php都可以用这个办法。

    上传一个.user.ini

    auto_prepend_file = xxx.jpg
    

    然后再上传一个图片马xxx.jpg

    <script language='php'>system('whoami');</script>
    

    如果在上传目录中还有一个可执行的php文件,访问php文件,就达到了执行系统命令的效果。

    总结一下:上传目录中有一个可执行的php文件,我们先上传一个.user.ini文件,这个文件的内容为auto_prepend_file=xxx.jpg。起到的作用相当于在可执行的php文件前插入图片马中的内容。然后图片马中的恶意代码也会被当做PHP解析

0x04 测试tips

  • 实战环境下可以考虑后缀fuzz,大多数情况校验的是后缀和Content-Type
  • 多尝试组合验证,跑fuzz,验证黑白名单,逐步排查。正常内容,正常MIME;后门内容,正常MIME;伪造格式+后门内容,正常MIME等等
  • CTF环境可能还会校验文件头,可用GIF89a伪造文件头
  • 二次渲染自动去除图片马,对比上传之前和上传之后图片的十六进制代码,在保留的那部分中插入payload,应用gif文件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值