360webscan检测脚本可绕过

360webscan检测脚本可绕过
2014-05-27      我来说两句       作者:phith0n
收藏     360webscan检测脚本可绕过 - ☆奋力拼搏☆ - 北方的…郎我要投稿
这个 漏洞暴露出一个细节问题,可能会影响很多cms。这个靠大家发掘了。
 
借用cmseasy中的360webscan来说明。
 
其中有一个白名单函数:
 
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
 
  *  拦截目录白名单
 
  */
 
function webscan_white($webscan_white_name,$webscan_white_url_t=array()) {
 
   $url_path=$_SERVER[ 'PHP_SELF' ];
 
   $url_var=$_SERVER[ 'QUERY_STRING' ];
 
   if (preg_match( "/" .$webscan_white_name. "/is" ,$url_path)== 1 ) {
 
     return false ;
 
   }
 
   foreach ($webscan_white_url_t as $webscan_white_url) {
 
  foreach ($webscan_white_url as $key => $value) {
 
if (!empty($url_var)&&!empty($value)){
 
  if (stristr($url_path,$key)&&stristr($url_var,$value)) {
 
return false ;
 
  }
 
}
 
elseif (empty($url_var)&&empty($value)) {
 
  if (stristr($url_path,$key)) {
 
return false ;
 
  }
 
}
 
 
 
  }
 
   }
 
   return true ;
 
}

 

 
这个函数在后面的过滤中起着至关重要的作用,因为过滤的时候判断如果webscan_white返回false就不执行过滤。
 
也就是说,我们如果能让这个函数返回false,那么就能轻松绕过360webscan的过滤。
 
那我们来看这个函数,这个函数第一个字段是白名单内容,我们在webscan_cache.php中可以找到:
 
//后台白名单,后台操作将不会拦截,添加"|"隔开白名单目录下面默认是网址带 admin  /dede/ 放行
 
$webscan_white_directory='admin|\/dede\/|\/install\/';
 
 
然后再看到下面:
 
?
1
2
3
4
5
6
7
8
9
$url_path=$_SERVER[ 'PHP_SELF' ];
 
   $url_var=$_SERVER[ 'QUERY_STRING' ];
 
   if (preg_match( "/" .$webscan_white_name. "/is" ,$url_path)== 1 ) {
 
     return false ;
 
   }

 

 
 
当$_SERVER['PHP_SELF']中能正则匹配出'admin|\/dede\/|\/install\/'的时候,就返回false,就绕过了检测。
 
然后再给大家说明一下$_SERVER['PHP_SELF']是什么:
 
PHP_SELF指当前的页面地址,比如我们的网站:
 
http://www.leavesongs.com/hehe/index.php
 
那么PHP_SELF就是/hehe/index.php。
 
但有个小问题很多人没有注意到,当url是PATH_INFO的时候,比如
 
http://www.leavesongs.com/hehe/index.php/phithon
 
那么PHP_SELF就是/hehe/index.php/phithon
 
也就是说,其实PHP_SELF有一部分是我们可以控制的。
 
说到这里大家应该知道怎么绕过360webscan了吧?只要PHP_SELF中含有白名单字段即可。
 
这也可以发散到很多cms上,php_self也是可控变量,注意过滤。
 
官网的demo不知道为何不成功,但是我 下载了最新版20140118,本地搭建。
 
比如我们提交一个含有敏感字符union select的查询,被360拦截了:
360webscan检测脚本可绕过 - ☆奋力拼搏☆ - 北方的…郎
 
那我们修改一下path_info,其中带有白名单字段“/admin/”:
 
360webscan检测脚本可绕过 - ☆奋力拼搏☆ - 北方的…郎
 
 
果断页面变了,绕过了拦截。不过这个时候css和js也变了(因为基地址有问题),但并不影响sql语句和xss的执行,注入什么的还是能继续的。
 
我们再随便试一个不知什么版本的cmseasy,都没有拦截:


360webscan检测脚本可绕过 - ☆奋力拼搏☆ - 北方的…郎
修复方案:
如果考虑简便性与性能的话,可以选择不修复
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北方的刀郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值