查看: 11124|回复: 2

【转】360webscan防注入脚本全面绕过

[复制链接]
  • TA的每日心情
    擦汗
    7 小时前
  • 签到天数: 1572 天

    [LV.Master]伴坛终老

    发表于 2014-2-11 20:29:16 | 显示全部楼层 |阅读模式
    昨天几个朋友聊到了某个cms里用的360webscan脚本,问我怎么绕过。其实之前一直没有研究过正则的绕过,当然这次也不是正则的绕过,但最终目的是达到了,全面绕过了360webscan对于注入与xss的防护。
        当然360忽略了,于是我也就公开了呗。反正厂商都不重视安全,我们也没必要重视了。
        使用360webscan的一大cms就是cmseasy,我们就借用cmseasy中的360webscan来说明。
        其中有一个白名单函数:
    [AppleScript] 纯文本查看 复制代码
    <font style="color:rgb(51, 51, 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;
    }</font>

    这个函数在后面的过滤中起着至关重要的作用,因为过滤的时候判断如果webscan_white返回false就不执行过滤。
        也就是说,我们如果能让这个函数返回false,那么就能轻松绕过360webscan的过滤。
        那我们来看这个函数,这个函数第一个字段是白名单内容,我们在webscan_cache.php中可以找到:
    [AppleScript] 纯文本查看 复制代码
    <font style="color:rgb(51, 51, 51)">//后台白名单,后台操作将不会拦截,添加"|"隔开白名单目录下面默认是网址带 admin  /dede/ 放行
    $webscan_white_directory='admin|\/dede\/|\/install\/';</font>

    返回来看我们的这个函数:
    [AppleScript] 纯文本查看 复制代码
    <font style="color:rgb(51, 51, 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;
      }</font>

    当$_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也是可控变量,注意过滤。
        来测试一下看看,在本地搭建一个cmseasy,最新版20140118,提交一个含有敏感字符union select的查询,被360拦截了:
    01.jpg
    那我们修改一下path_info,其中带有白名单字段“/admin/”:
    02.jpg
    果断页面变了,绕过了拦截。不过这个时候css和js也变了(因为基地址有问题),但并不影响sql语句和xss的执行,注入什么的还是能继续的。
        我们再随便试一个不知什么版本的cmseasy,都没有拦截:
    03.jpg

    作者:下次绽放的花开

    评分

    参与人数 1i币 +10 收起 理由
    Diana + 10 感谢分享

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-8-21 09:22
  • 签到天数: 181 天

    [LV.7]常住居民III

    发表于 2014-2-11 22:46:06 | 显示全部楼层
    高手  学习了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2016-9-21 14:45
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2014-2-14 10:45:40 | 显示全部楼层
    学习了,莫非提交过wooyu?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-5-18 20:19 , Processed in 0.025805 second(s), 19 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部