靶機難易度:初級 +
ツール及び脆弱性情報#
- netdiscover
- nmap
- gobuster
- OpenNetAdmin コマンドインジェクション
- crunch 指定した文字から辞書を生成
- john 辞書攻撃によるハッシュ解読
0x01 情報収集#
靶機スキャン#
netdiscover
の-r
パラメータで192.168.1.0/16
をスキャンするか、ルーター管理画面で有線接続のデバイスを確認して靶機のip
を取得
nmap
でホスト及びポート情報をスキャン:
nmap -sS -A -n -T4 -p- 192.168.1.3
靶機は22
、80
、10000
の 3 つのポートが開いており、80
ポートを確認すると空白であることがわかり、curl
で確認:
確かに内容はありません。次に10000
ポートを確認:
Webmin
で、バージョンはMiniServ 1.920
ディレクトリスキャン#
gobuster
でウェブサイトのディレクトリをスキャン:
gobuster dir -u http://192.168.1.3 -s 200,301,302,307,401,403 -t 100 -q -x .php,.txt,.html,.zip,.bak,.tar.gz -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-large-directories.txt
robot.txt
と疑わしい401
ディレクトリ/reports
が見つかり、アクセスすると認証が必要であることがわかる:
robots.txt
の中に/ona
ディレクトリが見つかり、nmap
スキャンと一致し、アクセス;
openNetAdmin v18.1.1
(IP ネットワークシステムとホスト管理システム)
情報収集のまとめ#
現在収集した主な情報は以下の通り:
- ssh 22 ポートが開いており、ブルートフォースを検討する必要があるか
- Webmin MiniServ 1.920 10000 ポートに利用可能な脆弱性が存在するか
- openNetAdmin v18.1.1 /ona ディレクトリに利用可能な脆弱性が存在するか
0x02 OpenNetAdmin 脆弱性#
それではWebmin
とopenNetAdmin
に利用可能な脆弱性があるか見てみましょう:
searchsploit
:
OK
、それではmsf
を起動してモジュールを検索:
見ると、msf
には先ほど見つけたUnauthenticated RCE(Metasploit)
はなく、openNetAdmin
には一つもありませんでした
手動でexploit-db
からexploit
ファイルをダウンロードし、msf
のexploit
データベースに移動:
/usr/share/metasploit-framework/modules/exploits/
Metasploit を再起動すれば、2 つの exp を直接使用できるようになります。まずはWebmin
のを使ってみましょう:
なんとWebmin<= 1.910
バージョンのみサポートしているようです。それではopenNetAdmin
を試してみます:
meterpreter
セッションを成功裏に取得
0x03 一般ユーザーの特権昇格#
meterpreter
からshell
に入る場合は、Python
を使ってtty
を取得することを忘れないでください。さもないと、一部のコマンドは実行できません
python -c 'import pty; pty.spawn("/bin/bash")' # 一部の環境ではPython2がインストールされていないため、python3 -cに変更する必要があります
ここでは入らず、いつものように現在のディレクトリ、ウェブサイトディレクトリ、ホームディレクトリを確認:
現在のディレクトリには特に何もなく、ウェブサイトディレクトリを見てみます:
ウェブサイトディレクトリでは、先ほどアクセスできなかった/reports
サブディレクトリの.htaccess
ファイルにヒントが見つかります
/var/www/.htpasswd
の中に以下のヒントが見つかりました:
douglas:$apr1$9fgG/hiM$BtsL9qpNHUlylaLxk81qY1
# 物事を少しでも楽にするために(標準の辞書ではおそらく失敗するでしょう)、
# この10文字のパスワードには次の文字セットを使用してください:aefhrt
ユーザー名とパスワードのhash
値が与えられ、ブルートフォースが必要であることが示唆されています。パスワードの桁数は 10 桁で、aefhrt
の 6 文字を含みます
kali
に付属のツールcrunch
を使用してパスワード辞書を生成します。crunch
は指定した文字と最大最小の数に基づいて辞書を作成できます
Usage: crunch <min> <max> [options]
そこで、crunch 10 10 aefhrt -o passwd
を使用してパスワード辞書を生成:
次にjohn
を使用してhash
をブルートフォース:
echo '$apr1$9fgG/hiM$BtsL9qpNHUlylaLxk81qY1' > hash
john --wordlist=passwd hash
長い待機の後、パスワードfatherrrrr
が得られたので、douglas:
でssh
にログイン:
douglas:fatherrrrr
ssh douglas@192.168.1.3
sudo -l
で現在のユーザーの権限を確認
jen
の権限でcp
コマンドを実行できることがわかり、jen
アカウントに切り替える準備をします
0x04 root 権限の昇格#
ssh-keygen
で鍵を生成し、公開鍵を/home/jen/.ssh
ディレクトリにコピーし、その後jen
アカウントでログイン:
ssh-keygen -b 2048
cp /home/douglas/.ssh/id_rsa.pub /tmp/authorized_keys
この時、/tmp
(一時ディレクトリ)に移動し、authorized_keys
ファイルに実行権限を与えます
sudo
を使用してjen
ユーザー権限でcp
コマンドを実行し、先ほど生成したauthorized_keys
を/home/jen/.ssh/
に移動:
chmod 777 /tmp/authorized_keys
sudo -u jen /bin/cp /tmp/authorized_keys /home/jen/.ssh/
ssh jen@127.0.0.1
ここでjen
アカウントにログインすると、メールが届いていることが示され、/var/mail/
でjen
という名前のメールを見つけました:
メールからユーザーパスワードMoss:Fire!Fire!
を知り、SSH
でログインします:
moss:Fire!Fire!
ssh moss@192.168.1.3
moss
アカウントに切り替えた後、再び私が慣れ親しんだSUID
特権昇格に進み、find
で確認:
find / -perm -u=s -type f 2>/dev/null
/home/moss/.games/upyourgame
にSUID
権限が見つかり、ゲームのようです。遊んでみましょう:
何の理屈だ、ただあなたを困らせるだけで、そして直接root
権限を与え、最後にroot
ディレクトリでflag
を成功裏に取得:
本文完。
参考記事: