Recommand: Let’s Sign Up HTB Academy to get Higher level of knowledge :P
非常推薦: 想要變强嗎? 快來加入 HTB Academy 獲得更高級的知識吧 :P
Ransom
https://www.hackthebox.com/achievement/machine/463126/457
首先使用 Nmap 工具對目標進行掃描,通過瀏覽器訪問該 IP 地址後,發現需輸入密碼進入,但嘗試多個常用密碼均失敗。隨後,使用 quickhits.txt 文件進行快速信息收集,但結果仍然沒有收穫。為了探究更多可能性,隨便輸入一個測試密碼 “testing”,並利用 Burp Suite 截取請求,當刪除這一行時,發現請求回應有改變。接著,將 GET 請求改為 OPTIONS,檢查支持的請求類型,結果顯示僅支持 GET 請求。接著嘗試以 JSON 格式提交請求,意外地發現請求成功,這使得可以利用 PHP 的弱比較漏洞繞過密碼檢查。通過進一步的操作,截取修改後的請求,成功登陸並訪問到包含兩個文件的頁面,並下載這些文件。在用戶目錄中,通常會存在 .ssh 文件夾及其密鑰,但下載的 zip 文件是加密的,需要破解該 zip 密碼。使用 zip2john 生成 hash,再利用 hashcat 嘗試破解,但初次嘗試失敗。經過分析,發現該 zip 文件使用的 ZipCrypto Deflate 加密算法已被認為不安全,因此決定使用 Plain Text Attack 破解。首先確認了 zip 包內部某文件的內容,利用 bkcrack 工具進行破解,經過一段時間,成功恢復出加密密碼,隨後進行了去除密碼的操作,最終成功解壓縮文件。獲得 ssh 密鑰後,為了找出用戶名,檢查了 id_rsa.pub 和 authorized_keys 文件,發現用戶名為 htb,隨即嘗試登錄,結果成功進入。隨後運行 Linpeas 工具進行安全檢查,雖然沒有密碼,但發現 sudo 組無法使用。通過檢查 apache 的配置文件,找到目錄來自 /srv/prod/public,並在隨機輸入密碼後得到 “Invalid Password” 的信息,進一步搜索後,在 ./app/Http/Controllers/AuthController.php 文件中發現了一個密碼 “UHC-March-Global-PW!”,這被確認為 root 的密碼,最終成功登錄到 root 權限。
Recon
首先使用 Nmap 進行掃描:
1 | PORT STATE SERVICE REASON VERSION |
瀏覽器打開該 IP 后得到:
Directory scan
由於目前什麽也沒有,一上來就給一個密碼,隨便輸入幾個常用的密碼卻顯示失敗了,所以使用 quickhits.txt
快速掃描一下有沒有其他的信息:
1 | $ feroxbuster -u "http://10.129.227.93/" -w /Tools/Wordlists/SecLists/Discovery/Web-Content/quickhits.txt -C 301 -d 1 |
結果什麽也沒有。
Play with login API
隨便輸入一些密碼密碼:這裏是 testing
,使用 Burp 截取看看:
當我把 testing
整行刪除的時候會得到:
嘗試把 GET
換成 OPTIONS
看一下他支持什麽類型的請求:
可以看到他只允許 GET
,嘗試換成 json 格式提交看看:
好像請求成功了。
Exploit PHP loose comparisons
這裏會有個問題:爲什麽要這樣做?
在PHP中常見的漏洞是弱比较(也就是 if
中使用 ==
),如果判斷的密碼大概是長這樣的:
1 | if($password == "somepassword") |
所以會出現兩種情況:
- 儅
$userinput
是"somepassword"
則是true
- 儅
$userinput
是true
則是true
一個示例大概是這樣的:
1 | php > if( "mane" == "mane") {echo "OK";} else {echo "NO OK";} |
各種類型的比較如下表:
但如果是強比較(也就是 if
中使用 ===
)的話,那就沒有漏洞:
1 | php > if( true === "mane") {echo "OK";} else {echo "NO OK";} |
所以在上面的例子中 $password
是 true
(boolean 類型) 而不是 "true"
(string 類型),如果要指定類型,就需要使用 json 傳遞,也就是儅 $password
是 true
(boolean 類型) 的時候就可以繞過檢查登錄:
這裏可以參考:
- https://www.php.net/manual/en/types.comparisons.php
- https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/php-tricks-esp#loose-comparisons-type-juggling
既然驗證成功了,那就使用嘗試使用 burp 截取一下,修改完后,點擊 Forward
:
然後就到達了這個頁面:
裏面有兩個文件,把他下載下來,在用戶的目錄下一般都會有 .ssh
的密匙:
但是這個 zip 文件是加密的,這意味著需要嘗試破解 zip 的密碼。
Trying to crack zip password but failed
所以嘗試使用 zip2john 生成hash,然後放到 hashcat 去爆破看看:
1 | $ zip2john uploaded-file-3422.zip |
把上面的hash保存到文件中,運行了之後他會自動檢測到三個類別:
但是這三個都跑失敗了。
Crack zipCrypto with Plain Text Attack
使用 7z l -slt filename.zip
就可以看到他是使用什麽類型的加密算法:
可以看到這個 zip 包是使用 ZipCrypto Deflate
的加密算法,所以稍微搜索一下關於該算法的漏洞:
從網上的結果中得到, ZipCrypto
的算法被認爲是過時的,而且證明了已經不安全,破解該算法的方法是使用 Plain Text Attack
。
原理是我只需要知道壓縮包裏一個文件的内容,我就知道整個壓縮包的key,然後去除壓縮包的密碼。
Recover internal keys
以上操作都需要用到 bkcrack 這個工具,所以參考一下它的文檔:
.
首先使用下面的命令參考一下有多少加密内容:
1 | $ ./bkcrack-1.7.1-Linux/bkcrack -L ~/Downloads/uploaded-file-3422.zip |
由於上面的Plain Text Attack
需要知道壓縮包裏面的其中一個文件,安裝好系統自帶的.bash_logout
基本都不會變,可以看到默認是 220 個字節:
而壓縮文件裏的.bash_logout
也是 220 個字節,然後再參考文檔:
根據上面的圖片中得知 bkcrack
還會從另一個壓縮包提取沒有密碼的文件作爲參考,所以可以複製一份加密的壓縮包,然後壓縮一次,這樣就可以增加壓縮包裏面的文件:
1 | $ cp ~/Downloads/uploaded-file-3422.zip plain.zip |
使用 bkcrack -L filename.zip
可以看到新增的一個條目:
1 | $ ./bkcrack-1.7.1-Linux/bkcrack -L plain.zip |
之後就可以進行破解了:
1 | $ ./bkcrack-1.7.1-Linux/bkcrack -C ~/Downloads/uploaded-file-3422.zip -c '.bash_logout' -P plain.zip -p 'home/mane/.bash_logout' |
等了一會成功的還原出了key: 7b549874 ebc25ec5 7e465e18
Remove password
成功還原出key了之後就可以嘗試刪除密碼:
根據文檔,命令如下:
1 | $ ./bkcrack-1.7.1-Linux/bkcrack -C ~/Downloads/uploaded-file-3422.zip -k 7b549874 ebc25ec5 7e465e18 -D decrypted.zip |
成功的去除了密碼,之後就可以解壓了:
但問題是,有了 ssh key 不知道用戶的名字怎麽辦?
可以看一下 id_rsa.pub
和 authorized_keys
的用戶,
看起來用戶名是 htb
,所以嘗試登錄看看:
結果成功了。
Shell as user to root
跑了一下 Linpeas 看到:
由於沒有密碼,即使在 sudo group 中也沒有任何作用,在一開始的頁面上由於需要登陸,所以嘗試找到登錄的密碼,看了一下 apache 的默認配置文件:
1 | htb@ransom:~$ cat /etc/apache2/sites-enabled/000-default.conf |
看到目錄是來自 /srv/prod/public
,由於這個目錄裏面存在大量的文件,儅隨便輸入了一個密碼之後,會得到 Invalid Passowrd
這兩個單詞:
所以嘗試找一下該關鍵字:
發現 ./app/Http/Controllers/AuthController.php
中存在這個單詞,嘗試打開:
打開後看到一個密碼:UHC-March-Global-PW!
試了一下,這個就是 root 的密碼:
Thanks
Respect: If my writeup really helps you, Give me a respect to let me know, Thankssssss!
感謝: 製作不易,如果我的writeup真的幫到你了, 給我一個respect,這樣我就會知道,感謝你!
Found Mistakes: If you find something wrong in the page, please feel free email to mane@manesec.com thanksss !!!
發現一些錯誤: 如果你在文章中發現一些錯誤,請發郵件到 mane@manesec.com ,麻煩了!!
Beginner Recommand: If you are a beginner, please use this link to sign up for an HTB Academy to get more Higher level of knowledge.
新手非常推薦: 如果你是初學者,可以用此鏈接來嘗試注冊 HTB Academy 賬號。
使用上面的鏈接加入 HTB 的 academy 完成 INTRODUCTION TO ACADEMY
這個模塊后可以解鎖更多的功能!
Join HTB’s academy with this link to get free access to all the tutorials for Tire 0. This is very beginner friendly. (It is recommended to complete INTRODUCTION TO ACADEMY first)