HackTheBox Jeeves Writeup

Howard Chang
10 min readMay 19, 2018

--

最近在找資安學習資源時發現了 hackthebox 這個平台,沒想到試了一下之後完全無法自拔。HTB 提供了許多有漏洞的主機讓使用者試圖去發現並破解,搭配升級系統簡直就像網路遊戲一樣讓人沈迷。雖然說類似的平台很多,但 HTB 裡面的主機是相對比較貼近真實狀況而不是像 CTF 那種腦筋急轉彎的類型。今天這篇文章就是其中一台主機 Jeeves 的攻略。由於 HTB 的規則有提到所有主機的攻略必須等到該主機退役 (retired) 後才能刊登,所以各位看到這篇時,Jeeves 應該只能付費才能玩到了。

P.S 免費玩家與付費玩家的差別在於付費玩家可以玩到過去所有被退役的主機

偵查 (Reconnaissance)

首先來看一下我們的目標主機 IP 與難度:

Jeeves on HTB

可以看出 Jeeves 的 IP 是 10.10.10.63,難度大約是中等偏簡單,作業系統是 Windows。確認目標後第一件要做的事當然就是用 nmap 掃一輪囉。個人習慣的基本掃 port 指令如下:

nmap -sV -sC -oA jeeves 10.10.10.63

-sV: 查看 port 的服務與版本號

-sC: 使用 nmap 預設的 nse 腳本掃描,可以掃出更多服務細節

-oA: 輸出三種不同格式 (.nmap, .gnmap, .xml) 的結果並以 jeeves 當主檔名

掃完的結果如下:

port 80: HTTP,背後用的是 Microsoft IIS 10.0,版本看起來頗新,應該沒什麼漏洞可鑽

port 135: RPC 的服務

port 445: SMB 用於共享文件的服務。網路上也有許多已知漏洞,但版本看起來很新,不確定能不能直接拿來用

port 50000: 也是 HTTP,服務是 Jetty 9.4.z-SNAPSHOT 🤔

這四個服務裡面有兩個 HTTP 是直接可以用瀏覽器開起來玩的,就先從這兩個服務下手吧。在造訪這兩個網站之前,由於兩個都是 HTTP 服務,我們可以先在背景跑 dirbdirb 是一個用來暴力測試 url 的工具,透過組合的方式把字典裡的單字與目標網址結合並回傳給使用者哪些網址有回應。這工具可以幫助我們找出一些隱藏的 url 例如:/admin, /wordpress 等等。使用方法很簡單,只要提供目標網址與字典檔即可。不提供字典檔的話 dirb 會使用預設的字典,範例如下:

dirb http://10.10.10.63 /user/share/wordlists/directory-list.txt

接下來就直接去 10.10.10.63 的 80 port 看看吧:

10.10.10.63:80

試著隨便輸入一些字後得到了下圖的錯誤頁面:

Error.html on 10.10.10.63:80

這個頁面看似有在背後使用 Microsoft SQL Server 2005,這麼舊的版本一定有公開漏洞可以使用,但如果把開發者工具打開看的話 (身為前端工程師的職業病 😆) 會發現這根本只是一張圖片而已,不是真的從後端產生出來的錯誤,很顯然是要誤導玩家的。再研究了一下表單後也沒有發現其他異常。既然這樣的話只好先把目標轉到另一個 50000 port 上了。

10.10.10.63:50000

來到了 50000 port,看到的是 404 錯誤。但錯誤訊息顯示的是無法前往 /.,那代表我們可以用相對路徑來訪問特定的目錄囉?但在一番 Directory Traversal 測試後發現它會自動把多餘的點從網址中刪除。既然這方法沒用那只好從這個沒看過的 Jetty 9.4.z-SNAPSHOT 服務另闢蹊徑了。

searchsploit Jetty output

上圖使用了 searchsploit 命令,它主要是用來搜尋關鍵字的相關公開漏洞,使用方法也很直覺,使用 searchsplot 加關鍵字就可以了。很遺憾的是 searchsploit 和 Google 都沒找到符合 9.4 版本的公開漏洞。就在我心灰意冷之際,dirb 給了我一線曙光 🔦 :

dirb output

Dirb 發現 http://10.10.10.63:50000/askjeeves/login 給了 200 的回應,這代表該網址有內容。在發現這個新大陸後當然迫不及待地直接把網址給丟到瀏覽器中,結果印入眼簾的是開發者都熟悉的 Jenkins 😲

熟悉的 Jenkins

漏洞利用 (Exploit)

到這邊就正式進入了鑽漏洞階段。在上網搜尋有關 Jenkins 的漏洞之前,看到要輸入帳號密碼的地方一定要先試一下各種 SQL Injection 才行。把 SQL Injection Cheat Sheet 裡的範例都試一輪過後發現沒搞頭只好乖乖的再去找 Google大神了。在把關鍵字 “Jenkins”, “Hack”, “Privilege Escalation” 餵狗後找到兩個有趣的切入點:

  1. Hacking Jenkins
  2. Script Execution and Privilege Escalation on Jenkins Server

快速地總結一下就是如果 Jenkins 沒有把權限設定好的話,未登入的使用者可以在 JenkinsURL/script 這個路徑下寫 Groovy 的腳本並執行。另一個則是當登入的使用者有權限去更改建置的步驟時,可以在步驟中加入任意的 shell script 或 batch command 並執行它。這兩種方法都可以讓惡意的使用者植入後門,接下來就嘿嘿嘿…雖然我們不是惡意的使用者,但該植的還是要植,不然是要怎麼繼續 😑。簡單搜尋一下 “Jenkins Groovy Reverse Shell”,找到了這份 gist。先把 ip 改成我們攻擊機的 ip,再用 netcat 準備接收即將到來的 reverse shell,最後把 script 丟給 Jenkins 執行,喔耶,進到主機啦!

Jenkins Groovy Reverse Shell
User Shell

進入之後就按照 HTB 的規則到使用者的桌面去找 user.txt 並把內容貼到 HTB 的網站上就可以得分囉 💯!

權限提升 (Privilege Escalation)

每台在 HTB 上的機器都有兩個得分點,一個是取得使用者權限而另一個就是取得 root 的權限完全控制該主機。所以拿到使用者權限只過了一半,接下來又是另一個挑戰。由於 Jeeves 是 Windows,沒辦法使用一些 linux 現有的權限提升偵查工具,只好慢慢一步一步來。從最簡單的開始,就是翻翻目前使用者的資料夾看看有沒有什麼奇怪的檔案,結果 😲:

CEH.kdbx

有個奇怪的 CEH.kdbx 檔案!嘗試用 type 看檔案內容發現是一堆亂碼,Google 後才發現原來這是 keepass 的資料庫。簡單來說 keepass 就是類似於 1password 或 lastpass 那種服務,使用者只需要記得一組密碼就可以在各個網站間使用不同密碼登入。這線索實在太明顯了,只要能破解這檔案應該就可以拿到 Root 的密碼。在讀完 How to Hack KeePass Passwords using Hashcat 後大致了解了作法。懶人包:用 keepass2john 讀出主要密碼的 hash,再用 hashcat 加字典找出主要密碼的明文。但問題是要如何把這檔案運回我們的主機呢?在試了很多方法後發現 Powercat 可以成功幫我運回檔案,在 Jeeves 上使用的命令是:

Powercat

同時需要在我們的本機開放 8000 port 提供 powercat.ps1 給 Jeeves 下載,還有開另一個 port (上圖是 34335) 負責接收 CEH.kdbx 。拿到檔案後照著上面文章的做法很順利的拿到了主要密碼 moonshine1

有了主要密碼就可以來看看 CEH.kdbx 裡藏了哪些東西 🔑。

拿到了各種密碼各種試後居然沒一個是有效的 😞。又經歷過一波 Google 後總算發現了 NTLM 認證 與 PassTheHash 攻擊。簡單來說就是我們不需要密碼的明文,直接拿加密過後的 hash 給 Windows 驗證就可以登入該使用者的帳號了。而上圖中最後一行的密碼正好是 NTLM 的格式。接下來要做的就簡單了,使用 Kali-linux 內建的 pth-winexe 工具就可以輕鬆登入:

Got Root!!

上圖中輸入密碼部分需要把那串 NTLM hash 給貼上。終於取得最高權限了!!直接到桌面找 root.txt 打完收工吧!

root.txt 呢?

咦?說好的 root.txt 呢 😠?好不容易得到 root 權限,沒想到居然還有最後一關。基於 HTB 的規則,root.txt 是一定會放在 Administrator 的桌面底下的,hm.txt 也給了像是提示的內容:The flag is else where, look deeper 。看來檔案被用特別的方法藏了起來,在上圖中就算用了 /A 也沒發現目標。好在 Google 大神永遠是我們的好夥伴,又花了一段時間搜尋 Windows 如何隱藏檔案後發現了這個:

How to Hide Data in a Secret Text File Compartment

這篇雖然實質上沒什麼用,但強烈建議一定要讀一下,因為實在是太酷了啊啊啊!原來 Windows 可以用這麼特殊的方法隱藏檔案,在了解方法之後讀出 root.txt 也就不是什麼大問題了。

root.txt 原來在這

結語

其實 Jeeves 不是我第一台過關的 HTB 機器,但這台機器總共花了我五天多的時間解,整個聖誕假期都宅在家玩這個了,不來記錄一下實在對不起自己。雖然在這過程中碰了許多壁,不過也學到了很多東西,尤其是解完後的成就感實在難以言喻啊。希望之後還有時間與動力再寫其他主機的攻略囉。

對資安有興趣的朋友們強烈推薦來試試這個平台。順帶一提,你需要通過一個小關卡才能成功註冊帳號。通過這個小關卡大概需要有一些基本的前端與加密知識即可!

--

--