[資訊安全] VulnHub – Matrix: 2 Write-up

Photo by Eric TERRADE on Unsplash

這篇 Write-up 大概會是我在北上工作以前的最後一篇文章,原本想說能在北上以前將比較常被大家練習的 VulnHub 靶機解一解,結果時常北上,每當回到家就是當個懶人,距離上一篇 Matrix 1,已經差距了八天左右,練習的密集度遠遠不及 11 月,目前就想著,希望能在 12 月結束以前將 Matrix 系列結束,接著看要跳槽 Hack-The-Box 或是針對 OWASP TOP 10 進行細部學習。

目錄

環境設定

靶機下載: https://www.vulnhub.com/entry/matrix-2,279/
解壓縮之後是一個 ova 檔案,同樣直接餵給 VMWare 吃,就可以完成佈署了,並且網路環境採用 NAT。

尋找靶機

透過 nmap 192.168.147.1/24 把靶機找出來,抓到位置為 192.168.147.136,並且服務上面有 80 Ports。

Matrix Port scan

服務探勘

在 80 Port 的頁面上看不出什麼端倪,上頭的文字就大概是電影「駭客任務」的台詞,接著在 F12 底下發現 js/index.js 這個檔案,部分程式碼如下。

var app = {
    chars: ['PureHackers', 'Unleashed', '127.0.0.1', '1337', '0x523344', 'Localhost', 'Cr4sH CoD3', 'HACKED!', 'Security', 'Breached!', 'System'],
    init: function() {
        app.container = document.createElement('div');
        app.container.className = 'animation-container';
        document.body.appendChild(app.container);
        window.setInterval(app.add, 100);
    },
    add: function() {
        var element = document.createElement('span');
        app.container.appendChild(element);
        app.animate(element);
    },
    animate: function(element) {
        var character = app.chars[Math.floor(Math.random() * app.chars.length)];
        var duration = Math.floor(Math.random() * 15) + 1;
        var offset = Math.floor(Math.random() * (50 - duration * 2)) + 3;
        var size = 10 + (15 - duration);
        element.style.cssText = 'right:' + offset + 'vw; font-size:' + size + 'px;animation-duration:' + duration + 's';
        element.innerHTML = character;
        window.setTimeout(app.remove, duration * 1000, element);
    },
    remove: function(element) {
        element.parentNode.removeChild(element);
    },
};
document.addEventListener('DOMContentLoaded', app.init);

其中最令人關注的是 '127.0.0.1', '1337'

1337

Matrix Port 1337 Page

嘗試丟給瀏覽器跑跑看,得到以下登入窗口,不過這邊有點好奇,namp 怎麼沒有掃到 1337 Port…?

這邊就要自我反省反省了,原先使用工具都是會跑、有結果就心滿意足了,卻沒有好好了解預設的功能、各參數的實際作用是如何,經過 Google 之後,可以使用 -p- 針對所有的 Port 進行掃描。

Matrix Ports

掃描完成之後發現,除了提示給的 1337 以外,還包含了 123201232112322 Ports。

12320

似乎是個 Web 版本的 SSH 服務,但是不知道帳號、密碼。

Matrix Web shell

12321

不知道什麼作用,無法使用瀏覽器瀏覽。

12322

該頁面跟 80 Port 的頁面長的完全一樣,但在 robots.txt,發現。

User-agent: *
Disallow: file_view.php

透過瀏覽器檢視 file_view.php 頁面時僅有以下訊息。

<!-- Error file parameter missing..!!! -->

嘗試使用 GET 遞送 file 參數沒有結果,改用 POST 則發現一個 LFI。

既然已經發現一個 LFI ,就盡量蒐集情資,以下是針對特定路徑的檔案所獲得的訊息。

/proc/version

Linux version 4.9.0-8-amd64 ([email protected]) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.130-2 (2018-10-27)

/etc/issue

Debian GNU/Linux 9 \n \l

/etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

/etc/nginx/sites-enabled/default

server {
    listen 0.0.0.0:80;
    root /var/www/4cc3ss/;
    index index.html index.php;

    include /etc/nginx/include/php;
}

server {
    listen 1337 ssl;
    root /var/www/;
    index index.html index.php;

auth_basic "Welcome to Matrix 2";
auth_basic_user_file /var/www/p4ss/.htpasswd;

    fastcgi_param HTTPS on;
    include /etc/nginx/include/ssl;
    include /etc/nginx/include/php;
}

/var/www/p4ss/.htpasswd

Tr1n17y:$apr1$7tu4e5pd$hwluCxFYqn/IHVFcQ2wER0

稍微了解了一下 auth_basic_user_file 的配置作用
參考:nginx配置指令auth_basic、auth_basic_user_file及相关知识

得到結果:

name:password:comment

但密碼的部分是經過加密的,至於如何解密,透過 Google 找到工具 John the Ripper (JTR),參考自 John the Ripper (JTR) 密碼破解簡單使用教學,並且文中有一部分令我覺得眼熟。

什麼是MD5
它是另外一種加密方式,比DES更加複雜。AB網站就是使用的這種加密方式。從幫助檔案看JTR應該支援MD5解碼,網上還出現一個JTR的補丁,據說也可以讓JTR支援MD5解碼。不過,你看看下面的MD5碼,它是非常難以解開的。我是沒有成功過,想要解開MD5可能需要更多的技巧和時間。網上也有其它一些用來解MD5的程序,效果都差不多。

ab136602036:$1$PTR$b.Cnkm1MAIailRACGO0Kh/
ab139004832:$1$HSI$JU7Eztw.al2wQ0dtXp/hi.
ab137746765:$1$SMI$M7q7wJilGYYsGiicFnjFC0

雖然不確定 $apr1$7tu4e5pd$hwluCxFYqn/IHVFcQ2wER0
看不出是 MD5 雜奏,但好像是用 JTR 可以解解看,指令順序如下。

cat - > pwd.txt
$apr1$7tu4e5pd$hwluCxFYqn/IHVFcQ2wER0
john --wordlist=/usr/share/john/password.lst pwd.txt

由於第一次解出來時,沒截到圖片,現在發現同樣的指令都顯示以下訊息。

Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long"
Use the "--format=md5crypt-long" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt, crypt(3) $1$ (and variants) [MD5 128/128 AVX 4x3])
No password hashes left to crack (see FAQ)

經由 Google 得到答案,藉由指令 john pwd.txt --show 可以查看解出來的密文。

回過頭來看 1337 的登入頁面,並且嘗試登入看看 Tr1n17y/admin,並且得到一個與 80、12322 Port 雷同的頁面,查看 F12 發現線索 <!--img src="h1dd3n.jpg"-->,檢視該圖片。

根據 Matrix 1 的經驗,大概知道題型都是往 CTF 的方向出題,所以這張圖片就直接猜想是 Forensic 圖片鑑識,直接 binwalkstrings 都沒結果,隨後丟到 Stegsolve 也是一樣的結果。

最後回頭看看 1337 頁面上的文字,n30 的意思感覺上是某種提示,圖片經過了什麼處理了30次,或是 n30 是密鑰之類的。

隨後發現 Stegall 工具,在查看他 github 頁面上的 Demo 時,發現 -sh 參數有提供一個輸入密碼的功能。

但發現一直有以下錯誤訊息:

Traceback (most recent call last):
  File "./stegall.py", line 222, in <module>
    sh.sh(arg2)
  File "tools/steghide.py", line 94, in sh
    prog_install(prog)
NameError: global name 'prog_install' is not defined

最後的解決方法是查看 tootls/steghide.py 的程式碼,看看他實際上做了什麼,主要功能應該是判斷有沒有套件,沒有的話自行安裝,所以查看變數 progsteghide,所以下安裝指令 apt install steghide 後即可使用。

kali 安裝 steghide 參考 How To Install steghide on kali

接著就用 Stegall 來嘗試解解看,但是一直有錯誤訊息,經歷一段時間的嘗試,原本檔案並沒有與 Stegall 在同個路徑底下,所以一直引發錯誤(照理說應該不影響阿!),總之就是調整好路徑再次嘗試就可以了,解出密文 P4$$w0rd

接著回到 Port 12320 上嘗試登入 neo/P4$$w0rd,試了一兩次發現 neon30…,好像了解了什麼,然後登入成功。

取得 Root Shell

既然都取得 Shell 了,接著就是拿 Root,嘗試 sudo su 發現沒有 sudo 指令可以用,改查看 history,發現有一些奇怪的指令使用紀錄。

36  morpheus 
37  morpheus 'BEGIN {system("/bin/sh")}'
38  exit
39  ls
40  cat /root/flag.txt
41  morpheus 'BEGIN {system("/bin/sh")}'
42  exit 

指令複製貼上就拿到 root 了。

結論

Matrix 系列真的都還蠻偏向 CTF 的類型的,該題的收穫如下。

  1. n m a p 的熟練度提高
  2. 認識工具 John the Ripper、S t e g a l l
  3. 認識 m d 5 c r y p t

然後該題唯一沒用到的就是 P o r t 1 2 3 2 1,不知道是設計來做什麼的,W e b 連不上,N m a p 上的訊息是 W A R E H O U S E – S S S,也不是很清楚意思。

MksYi

透過網路分享知識的學習者。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料