打靶記錄16——Momentum

Fab1an發表於2024-09-07

靶機:

https://download.vulnhub.com/momentum/Momentum.ova

下載後使用 VirtualBox 開啟

難度:中

目標:取得 root 許可權 + 2 Flag

攻擊方法:

  • 主機發現
  • 埠掃描
  • 資訊收集
  • Web 路徑爆破
  • XSS 漏洞
  • JS 指令碼分析
  • AES 解密
  • Redis 認證漏洞

主機發現

sudo arp-scan -l

埠掃描和服務發現

nmap -p- 192.168.0.104掃描全埠

nmap -p22,80 -sV -sC 192.168.0.104

發現 SSH 的版本是 OpenSSH 7.9

HTTP 是 Apache httpd 2.4.38

訪問 80 埠的 Web 服務

發現 id 引數,測試SQL隱碼攻擊只是把值原原本本的返回到頁面中

那麼可能存在 XSS 漏洞,嘗試輸入 payload

獲得 cookie

cookie=U2FsdGVkX193yTOKOucUbHeDp1Wxd5r7YkoM8daRtj0rjABqGuQ6Mx28N1VbBSZt解碼Base64,發現Salted,意思是加鹽了,應該是使用了某種加密演算法

目錄掃描

dirsearch -u "http://192.168.0.102/"

main.js 裡的檔案,重點關注裡面的註釋,是一段加密解密的程式碼

function viewDetails(str) {

  window.location.href = "opus-details.php?id="+str;
}

/*
var CryptoJS = require("crypto-js");
var decrypted = CryptoJS.AES.decrypt(encrypted, "SecretPassphraseMomentum");
console.log(decrypted.toString(CryptoJS.enc.Utf8));
*/


讓我們逐行解釋一下程式碼:

var CryptoJS = require("crypto-js");
  • 功能:這行程式碼將 crypto-js 庫引入到當前的 JavaScript 檔案中。
  • 解釋:require 是 Node.js 中用於引入模組的函式,crypto-js 是一個常用的加密解密庫,支援多種加密演算法,包括 AES、SHA、MD5 等。
var decrypted = CryptoJS.AES.decrypt(encrypted, "SecretPassphraseMomentum");
  • 功能:這行程式碼解密一個加密的訊息。
  • 解釋:
    • CryptoJS.AES.decryptcrypto-js 庫中用於 AES 解密的函式。
    • encrypted 是要解密的加密文字(假設它已定義,並且是一個有效的加密字串)。
    • "SecretPassphraseMomentum" 是用於解密的金鑰(passphrase)。這個金鑰必須與加密時使用的金鑰完全相同。
    • 解密函式返回的是一個 CryptoJS.lib.CipherParams 物件,它包含解密後的資料,但還未轉換成可讀的字串。
console.log(decrypted.toString(CryptoJS.enc.Utf8));
  • 功能:這行程式碼將解密後的資料轉換為 UTF-8 編碼的字串,並輸出到控制檯。
  • 解釋:
    • .toString(CryptoJS.enc.Utf8) 方法將 CryptoJS.lib.CipherParams 物件轉換為一個 UTF-8 編碼的字串。
    • CryptoJS.enc.Utf8crypto-js 庫中用於處理 UTF-8 編碼的編碼器。

總結

這段程式碼的總體功能是:

  1. 引入 crypto-js 庫。
  2. 使用 AES 演算法解密一個加密的訊息,使用指定的金鑰。
  3. 將解密後的資料轉換為 UTF-8 字串,並輸出結果。

那麼我們得到如下資訊:

密文:U2FsdGVkX193yTOKOucUbHeDp1Wxd5r7YkoM8daRtj0rjABqGuQ6Mx28N1VbBSZt
金鑰:SecretPassphraseMomentum
加密演算法:AES

百度搜尋:cryptojs線上解密,獲得一個網址:https://www.sojson.com/encrypt.html#google_vignette

填入密文和金鑰即可解密成功,獲得明文:auxerre-alienum##

前面又看到目標靶機開放了 22 埠,那麼這個明文是不是就是登入的賬號密碼呢?

賬號:auxerre

密碼:auxerre-alienum##

成功登入目標靶機

獲得第一個 flag

資訊收集

uname -a 檢視核心版本

searchsploit 4.19 查詢有沒有已知的核心漏洞的提權程式碼

這些都是失敗的,沒有一個可以成功提權的

lsb_release -a 檢視作業系統

繼續資訊收集,發現了一個 redis 賬號

redis 是一個非關係型資料庫,它的安全性不好,有非授權的漏洞,它會預設監聽 0.0.0.0 的 6379 埠,並且不需要進行認證

Redis 認證漏洞

ss -pantu 檢視開放的所有埠,發現 6379 確實是開啟的,但是靶機的管理員把監聽地址設定成了 127.0.0.1 ,導致我們沒有辦法從外網直接來連線這個埠,但是我們已經透過 SSH 登入進來了,可以直接連 redis 資料庫了

redis-cli 執行命令連進去,info 可以看見很多資訊,說明不需要身份認證

發現 db0 這個庫,然後還有一個 key

redis 這個非關係型的資料庫是透過鍵值對的形式來儲存資料的,不像 Mysql 這種關係型資料庫是透過表來存放結構化的資料

keys * 命令查詢所有鍵。

Get rootpass 獲取鍵 rootpass 的值。

獲得 m0mentum-al1enum##

結合 rootpass 這個鍵名,嘗試登入 root 賬號,我直接 su 成 root 賬號,然後輸入密碼,成功登入!

cat root.txt 獲取第2個 flag

學習筆記

  • 利用 redis 這種非授權的身份認證的漏洞,其實我們可以在目標靶機上做很多攻擊的手段
  • 比如可以透過讀取關鍵檔案,從而幫助自己去實現提權
  • 或者也可以透過 redis 向目標靶機裡面去直接寫入一個 Webshell,從而拿到一個許可權
  • 又或者呼叫一些第三方的外部的模組,透過模組的載入,利用 redis 程序許可權比較鬆散的這種配置漏洞,也可以透過載入模組的方式,實現作業系統指令的直接執行

相關文章