首页
社区
课程
招聘
[讨论]看雪换的衣服到了~以及最近一个很火的cve
发表于: 2021-1-28 19:47 3666

[讨论]看雪换的衣服到了~以及最近一个很火的cve

2021-1-28 19:47
3666

前几天换了个衣服,今天就到了,还蛮快的。
图片描述
不错不错,好看。

关于CVE-2021-3156

其实昨天就看到这个洞的预警了。不过想的是等调完了手上afl再回来看这个。

 

我找到的比较详细的利用在:
https://blog.qualys.com/vulnerabilities-research/2...
https://github.com/reverse-ex/CVE-2021-3156/blob/m...
稍微看了一下,来简单总结一下文章中提到了三种可以利用成功的手段。

覆写struct sudo_hook_entry。

这是一个被分配到heap上的结构体,可以通过堆溢出覆写其中的函数指针getenv_fn(他指向的函数存在于sudo.so中,并且在sudo.so的开头有对execv的调用),而对于其的调用又和execve其one_gadgets的参数很像。

 

所以思路如下:

 

通过堆溢出,劫持函数指针getenv_fn,在存在aslr的情况下进行部分覆写(低两字节为 0x8a00),然后爆破execv函数的地址,最后通过execv以root来执行我们自己的文件。(比如我们的文件叫:"SYSTEMD_BYPASS_USERDB",这是正常执行getenv_fn中的第一个参数)

覆写struct service_user。

(也是视频中演示的方法)

 

我们可以通过堆溢出,劫持堆上的struct service_user结构体中的library指针。在nss_load_library (service_user *ni)中会基于此结构体进行一些操作。 我们的思路如下: 首先劫持service_user中的library为NULL以通过一些检查。 接着覆写serviceuser中的name变量。以视频中为例,他将name覆写为"X/X",这样做的目的在于,当函数正常执行时,会做如下的文件路径拼接:"libnss" + name + ".so.2",正常情况下是:libnss_systemd.so.2,而当我们劫持了name后就变成了:"libnss_X/X.so.2",也就是说,此时加载了恶意的lib文件。 通过观看poc视频我们可以看到在lib中的_init函数是constructor,那么他会作为初始的构造函数在main前执行,通过执行恶意的lib中的_init来root。

覆写def_timestampdir。

第三种是比较玄学的一种利用,简单提一下:

 

sudo有这样一种行为,大致就是会在我们的工作目录下创建一些属于root用户的目录。每个这样的目录下都有且仅有一个文件:Sudo's timestamp file。 如果我们尝试将def_timestampdir覆盖为一个不存在的目录。然后我们可以与sudo的ts_mkdirs()竞争,创建一个指向任意文件的符号链接。并且尝试打开这个文件,向其中写入一个struct timestamp_entry。我们可以符号链接将其指向/etc/passwd,然后以root打开他,然后实现任意用户的注入从而root。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (3)
雪    币: 15191
活跃值: (16857)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
2
等一手你的分析文章
2021-1-28 19:51
0
雪    币: 97697
活跃值: (200834)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
support!
2021-1-28 20:03
0
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
4
666 赞!
2021-1-29 09:31
0
游客
登录 | 注册 方可回帖
返回
//