资讯专栏INFORMATION COLUMN

WEB漏洞攻防 - 文件上传漏洞 - 配和文件解析漏洞绕过安全检测突破文件上传漏洞

newtrek / 805人阅读

摘要:中间件解析格式变异与规则文件解析根据中间件平台决定比如可以利用格式变异绕过过滤进行文件上传。是服务器中的一个配置文件不是上传的文件的黑名单之内所以文件是可以上传成功。

什么是文件解析漏洞?

在服务器与WEB容器的一些本身特性的相关功能中,开发人员如果没有深入理解这些特性的话,这些特性的弊端往往会成为攻击者可以利用的手段。比如像 IIS、Apache、Nginx 中,在一些特定的情况下会将一些特定的文件解析成脚本文件格式,这就是文件解析漏洞。当攻击者上传了无法正常识别解析的文件再配合这些服务器与WEB容器的弊端特性去解析,就会产生直接利用后门脚本的效果,直接getshell。

中间件解析 - 格式变异与规则文件解析 [根据中间件平台决定]

比如 upload-labs-Pass-3 可以利用格式变异绕过过滤进行文件上传。 [利用 “.phtml” 或者 “.php5” 绕过过滤]

".phtml" 原理

在 Apache 的 “http.conf” 配置文件中



从图中可以看到,我安装的Apache默认解析php和phtm的,如果黑名单并没有过滤phtm,就可以上传phtm的木马。

比如 upload-labs-Pass-4 可以利用 “.htaccess” 后缀突破过滤。[".htaccess"是 apache 服务器中的一个配置文件,不是上传的文件的黑名单之内 ,所以 .htaccess 文件是可以上传成功。]

".htaccess" 原理[需要拿到服务器权限之后才能更改,一般常用于留后门使用]

“.htaccess” 文件是Apache才有的一个配置文件,可被执行可上传。默认情况下是开启状态,如果不开启,找到 “httpd.conf” 配置文件。



Options FollowSymLinksAllowOverride None改为:Options FollowSymLinksAllowOverride All

这样就开启了。


#AddType application/x-httpd-php3 .phtml#AddType application/x-httpd-php3-source .phps#Addtype application/x-httpd-php .jpg .shtml

变更 “AddType” 参数配置:“AddType"参数可以为特定后缀的文件指定MIME类型,这里的设置将覆盖mime.types中的设置。如上文中的 “.phtml”、”.phps"、".jpg"、".shtml"的后缀的文件都可以被当作脚本去解析。

还有一种方法就是直接在上传的 “.htaccess” 文件进行设置更改当前解析规则

SetHandler application/x-httpd-php	# 通过.htaccess文件调用php解释器去解析一个文件名中只要包含"shell.jpg"的文件,[注意这里即使是正常的jpg文件,也会被解析。]GIF89aSetHandler aplication/x-httpd-php	# 通过.htaccess文件调用php解释器去解析一个文件名中只要包含"hehe",无论文件名是什么都会被以 php 的方式进行解析。

利用".htaccess"的方式以前会有多,现在不多了。即使现在有,也不一定有这样的安全问题,可以利用的机会也不多;完全算是当作一个知识点来看吧。

upload-labs-Pass-3 [格式变异绕过]

源码如下



从源码中我们可以看出,过滤限制了 "’.asp’,’.aspx’,’.php’,’.jsp’"的后缀文件名,这里我们就可以利用格式变异去突破。如 “.phtml”



upload-labs-Pass-4 [规则文件解析绕过]

从源码和提示中我们看到过滤了大量的后缀,但是没有过滤 “.htaccess” 后缀,这里我们就可以利用上文提到的 “.htaccess” 的原理上传一个 “.htaccess” 文件,内容 SetHandler aplication/x-httpd-php 然后再上传一个 “test.hehe” 的文件即可绕过验证。




Nginx 文件名逻辑漏洞(CVE-2013-4547)

原理:

该漏洞其实和代码执行没有太大关系,主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。

举个例子,比如,Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,常见的写法如下:

location ~ /.php$ {    include        fastcgi_params;    fastcgi_pass   127.0.0.1:9000;    fastcgi_index  index.php;    fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;    fastcgi_param  DOCUMENT_ROOT /var/www/html;}

正常情况下(关闭pathinfo的情况下),只有.php后缀的文件才会被发送给fastcgi解析。

而存在CVE-2013-4547的情况下,我们请求1.gif[0x20][0x00].php,这个URI可以匹配上正则.php$,可以进入这个Location块;但进入后,Nginx却错误地认为请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。

fastcgi根据SCRIPT_FILENAME的值进行解析,最后造成了解析漏洞。

所以,我们只需要上传一个空格结尾的文件,即可使PHP解析之。

再举个例子,比如很多网站限制了允许访问后台的IP:

location /admin/ {    allow 127.0.0.1;    deny all;}

我们可以请求如下URI:/test[0x20]/…/admin/index.php,这个URI不会匹配上location后面的/admin/,也就绕过了其中的IP验证;但最后请求的是/test[0x20]/…/admin/index.php文件,也就是/admin/index.php,成功访问到后台。(这个前提是需要有一个目录叫“test ”:这是Linux系统的特点,如果有一个不存在的目录,则即使跳转到上一层,也会爆文件不存在的错误,Windows下没有这个限制)

漏洞复现:

前提条件已经安装了 vulhub , cd vulhub/nginx/CVE-2013-4547

执行编译: docker-compose up -d



然后访问 “ip:8080” 即可看到一个上传的页面,经过测试我们发现不能上传带有 “php、php5” 等相关格式的脚本文件。



此时我们结合 “CVE-2013-4547” 执行上传的操作,上传一张正常的图片,同时将一句话写入该图片。



当上传成功之后,响应包会报出文件的上传地址,此时我们再访问该图片。同时在文件名后面加上 “ .php” 【这里注意有两个空格】

通过burp抓取该数据包,如下图




该解析漏洞的原理:错误的解析了请求的URL,错误的获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。

该漏洞复现的引用:

在windows中,文件名 xxx.jpg 后的空格经常被忽略,因而会产生较大的利用率nginx 0.8.41 ~ 1.4.3/1.5.0~1.5.7 为其影响版本适用于php语言

Nginx 解析漏洞

首先这里要说明的是该漏洞成因和上传漏洞无关,漏洞成因为 “用户配置不当造成的解析漏洞。”

启动 vulhub 环境

cd /vulhub/nginx/nginx_parsing_vulnerability

在目录下执行

docker-compose up -d 进行环境编译运行

访问 “http://your-ip/uploadfiles/nginx.png” 可以看到一张图片。



在访问图片URL地址后面加上 .php 访问



访问http://your-ip/index.php可以访问该环境的上传功能,上传代码不存在漏洞,我们可以直接上传一张正常的图片,在图片主体中加上 一句话,然后利用 .php 后缀访问,即可利用该解析漏洞 getshell。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/118956.html

相关文章

  • WEB漏洞攻防 - 文件上传漏洞 - 白名单的绕过处理方法

    摘要:文章目录白名单的绕过处理方法白名单绕过修改文件类型白名单绕过截断白名单的绕过处理方法采用后缀名的绕过方法如修改截断截断白名单绕过修改文件类型检测并不是检测后缀名是检测文件类型虽然不检测后缀名但是属于白名单机制。官方地址真尼玛坑 ...

    Jason 评论0 收藏0
  • WEB漏洞攻防 - 文件上传漏洞 - CTF比赛类应用场景 - [GXYCTF2019]BabyUp

    摘要:说明文件类型与文件内容也有过滤。将数据包发送至模块,针对文件类型进行变量设置并导入文件上传类型爆破字典尝试爆破。先行上传一个后缀文件用于解析。 思考:在实际应用场...

    wanglu1209 评论0 收藏0
  • 《Python安全攻防:渗透测试实战指南》学习一

    摘要:白盒测试是指在拥有客户组织所有的资产信息的情况下进行渗透测试。信息分析对搜集到的信息进行分析,为下一步实施渗透测试做准备。形成报告按照与客户确定好的范围需求整理渗透测试结果并将资料形成报告。 第1章 渗透测试概述  1.信息安全发展史  2.信息安全行业的现状         2.1渗透测试...

    Baoyuan 评论0 收藏0
  • web 应用常见安全漏洞一览

    摘要:应用常见安全漏洞一览注入注入就是通过给应用接口传入一些特殊字符,达到欺骗服务器执行恶意的命令。此外,适当的权限控制不曝露必要的安全信息和日志也有助于预防注入漏洞。 web 应用常见安全漏洞一览 1. SQL 注入 SQL 注入就是通过给 web 应用接口传入一些特殊字符,达到欺骗服务器执行恶意的 SQL 命令。 SQL 注入漏洞属于后端的范畴,但前端也可做体验上的优化。 原因 当使用外...

    darkerXi 评论0 收藏0
  • web 应用常见安全漏洞一览

    摘要:应用常见安全漏洞一览注入注入就是通过给应用接口传入一些特殊字符,达到欺骗服务器执行恶意的命令。此外,适当的权限控制不曝露必要的安全信息和日志也有助于预防注入漏洞。 web 应用常见安全漏洞一览 1. SQL 注入 SQL 注入就是通过给 web 应用接口传入一些特殊字符,达到欺骗服务器执行恶意的 SQL 命令。 SQL 注入漏洞属于后端的范畴,但前端也可做体验上的优化。 原因 当使用外...

    Panda 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<