HackTheBox - Machine - Ransom

Recommand: Let’s Sign Up HTB Academy to get Higher level of knowledge :P

非常推薦: 想要變强嗎? 快來加入 HTB Academy 獲得更高級的知識吧 :P

Ransom

image

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PORT   STATE SERVICE REASON         VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 ea:84:21:a3:22:4a:7d:f9:b5:25:51:79:83:a4:f5:f2 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDZBURYGCLr4lZI1F55bUh/6vKCfmeGumtAhhNrg9lH4UNDB/wCjPbD+xovPp3UdbrOgNdqTCdZcOk5rQDyRK2YH6tq8NlP59myIQV/zXC9WQnhxn131jf/KlW78vzWaLfMU+m52e1k+YpomT5PuSMG8EhGwE5bL4o0Jb8Unafn13CJKZ1oj3awp31fRJDzYGhTjl910PROJAzlOQinxRYdUkc4ZT0qZRohNlecGVsKPpP+2Ql+gVuusUEQt7gPFPBNKw3aLtbLVTlgEW09RB9KZe6Fuh8JszZhlRpIXDf9b2O0rINAyek8etQyFFfxkDBVueZA50wjBjtgOtxLRkvfqlxWS8R75Urz8AR2Nr23AcAGheIfYPgG8HzBsUuSN5fI8jsBCekYf/ZjPA/YDM4aiyHbUWfCyjTqtAVTf3P4iqbEkw9DONGeohBlyTtEIN7pY3YM5X3UuEFIgCjlqyjLw6QTL4cGC5zBbrZml7eZQTcmgzfU6pu220wRo5GtQ3U=
| 256 b8:39:9e:f4:88:be:aa:01:73:2d:10:fb:44:7f:84:61 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJZPKXFj3JfSmJZFAHDyqUDFHLHBRBRvlesLRVAqq0WwRFbeYdKwVIVv0DBufhYXHHcUSsBRw3/on9QM24kymD0=
| 256 22:21:e9:f4:85:90:87:45:16:1f:73:36:41:ee:3b:32 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEDIBMvrXLaYc6DXKPZaypaAv4yZ3DNLe1YaBpbpB8aY
80/tcp open http syn-ack ttl 63 Apache httpd 2.4.41 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET HEAD OPTIONS
|_http-favicon: Unknown favicon MD5: D41D8CD98F00B204E9800998ECF8427E
| http-title: Admin - HTML5 Admin Template
|_Requested resource was http://10.129.227.93/login
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

瀏覽器打開該 IP 后得到:

image

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

image

結果什麽也沒有。

Play with login API

隨便輸入一些密碼密碼:這裏是 testing​,使用 Burp 截取看看:

image

當我把 testing​ 整行刪除的時候會得到:

image

嘗試把 GET​ 換成 OPTIONS​ 看一下他支持什麽類型的請求:

image

可以看到他只允許 GET​,嘗試換成 json 格式提交看看:

image

好像請求成功了。

Exploit PHP loose comparisons

這裏會有個問題:爲什麽要這樣做?

在PHP中常見的漏洞是弱比较(也就是 if​ 中使用 ==​),如果判斷的密碼大概是長這樣的:

1
if($password == "somepassword")

所以會出現兩種情況:

  • $userinput​ 是 "somepassword"​ 則是 true
  • $userinput​ 是 true​ 則是 true

一個示例大概是這樣的:

1
2
3
4
5
6
7
8
9
10
11
12
13
php > if( "mane" == "mane") {echo "OK";} else {echo "NO OK";}
OK

# 你可以看到 任何字符串 == true 都會返回 true
php > if( true == "mane") {echo "OK";} else {echo "NO OK";}
OK

# 但是 任何字符串 == 1 都會返回 false
php > if( 1 == "mane") {echo "OK";} else {echo "NO OK";}
NO OK

php > if( "true" == "mane") {echo "OK";} else {echo "NO OK";}
NO OK

各種類型的比較如下表

image

但如果是強比較(也就是 if​ 中使用 ===​)的話,那就沒有漏洞:

1
2
php > if( true === "mane") {echo "OK";} else {echo "NO OK";}
NO OK

所以在上面的例子中 $password​ 是 true​ (boolean 類型) 而不是 "true"​ (string 類型),如果要指定類型,就需要使用 json 傳遞,也就是儅 $password​ 是 true​ (boolean 類型) 的時候就可以繞過檢查登錄:

image

這裏可以參考:

既然驗證成功了,那就使用嘗試使用 burp 截取一下,修改完后,點擊 Forward​:

image

然後就到達了這個頁面:

image

裏面有兩個文件,把他下載下來,在用戶的目錄下一般都會有 .ssh​ 的密匙:

image

但是這個 zip 文件是加密的,這意味著需要嘗試破解 zip 的密碼。

Trying to crack zip password but failed

所以嘗試使用 zip2john 生成hash,然後放到 hashcat 去爆破看看:

1
$ zip2john uploaded-file-3422.zip

image

把上面的hash保存到文件中,運行了之後他會自動檢測到三個類別:

image

但是這三個都跑失敗了。

image

Crack zipCrypto with Plain Text Attack

使用 7z l -slt filename.zip​ 就可以看到他是使用什麽類型的加密算法:

image

可以看到這個 zip 包是使用 ZipCrypto Deflate​ 的加密算法,所以稍微搜索一下關於該算法的漏洞:

image

從網上的結果中得到, ZipCrypto​ 的算法被認爲是過時的,而且證明了已經不安全,破解該算法的方法是使用 Plain Text Attack​。

原理是我只需要知道壓縮包裏一個文件的内容,我就知道整個壓縮包的key,然後去除壓縮包的密碼。

Recover internal keys

以上操作都需要用到 bkcrack 這個工具,所以參考一下它的文檔

image.

首先使用下面的命令參考一下有多少加密内容:

1
$ ./bkcrack-1.7.1-Linux/bkcrack -L ~/Downloads/uploaded-file-3422.zip

image

由於上面的Plain Text Attack​ 需要知道壓縮包裏面的其中一個文件,安裝好系統自帶的.bash_logout​ 基本都不會變,可以看到默認是 220 個字節:

image

而壓縮文件裏的.bash_logout​ 也是 220 個字節,然後再參考文檔:

image

根據上面的圖片中得知 bkcrack​ 還會從另一個壓縮包提取沒有密碼的文件作爲參考,所以可以複製一份加密的壓縮包,然後壓縮一次,這樣就可以增加壓縮包裏面的文件:

1
2
$ cp ~/Downloads/uploaded-file-3422.zip plain.zip
$ zip plain.zip ~/.bash_logout

image

使用 bkcrack -L filename.zip​ 可以看到新增的一個條目:

1
$ ./bkcrack-1.7.1-Linux/bkcrack -L plain.zip

image

之後就可以進行破解了:

1
$ ./bkcrack-1.7.1-Linux/bkcrack -C ~/Downloads/uploaded-file-3422.zip -c '.bash_logout' -P plain.zip -p 'home/mane/.bash_logout'

image

等了一會成功的還原出了key: 7b549874 ebc25ec5 7e465e18

Remove password

成功還原出key了之後就可以嘗試刪除密碼:

image

根據文檔,命令如下:

1
$ ./bkcrack-1.7.1-Linux/bkcrack -C ~/Downloads/uploaded-file-3422.zip -k 7b549874 ebc25ec5 7e465e18 -D decrypted.zip

image

成功的去除了密碼,之後就可以解壓了:

image

但問題是,有了 ssh key 不知道用戶的名字怎麽辦?

可以看一下 id_rsa.pub​ 和 authorized_keys​ 的用戶,

image

看起來用戶名是 htb​,所以嘗試登錄看看:

image

結果成功了。

Shell as user to root

跑了一下 Linpeas 看到:

image

由於沒有密碼,即使在 sudo group 中也沒有任何作用,在一開始的頁面上由於需要登陸,所以嘗試找到登錄的密碼,看了一下 apache 的默認配置文件:

1
htb@ransom:~$ cat /etc/apache2/sites-enabled/000-default.conf

image

看到目錄是來自 /srv/prod/public​,由於這個目錄裏面存在大量的文件,儅隨便輸入了一個密碼之後,會得到 Invalid Passowrd​這兩個單詞:

image

所以嘗試找一下該關鍵字:

image

發現 ./app/Http/Controllers/AuthController.php​ 中存在這個單詞,嘗試打開:

image

打開後看到一個密碼:​UHC-March-Global-PW!

試了一下,這個就是 root 的密碼:

image

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)