ターゲットマシンのアドレス
難易度:簡単
ツールと脆弱性情報#
- netdiscover
- nmap
- dirb
- dirsearch
- gobuster
- コマンド実行
- SUID 権限の find コマンドを使用した昇格
0x00 情報収集#
ターゲットマシンのスキャン#
netdiscover
を使用して現在のネットワーク範囲をスキャンし、ホスト名がPCS Systemtechnik GmbH
である場合は通常ターゲットマシンです:
nmap -sS -sV -n -T4 -p- 192.168.1.8
- -sS: TCP SYN スキャン、または半オープンスキャンとも呼ばれます
- -sV: サービス / バージョン情報を特定するために開いているポートを探索します
- -n: DNS 解決を行わずに時間を節約します
- -T4: タイミングテンプレートをレベル 4 に設定します
- -p-: すべてのポートをスキャンします
- -A: OS 検出、バージョン検出、スクリプトスキャン、トレースルートを有効にします。-A オプションには - sV オプションも含まれます
apache
サービスとssh
のみが開かれていることがわかります
パスのスキャン#
dirb は、ステータスコードが 200 のアドレスのみを表示するようにデフォルトで設定されています:
dirb http://192.168.1.8 -X .php,.txt,.zip,.html
一方、dirsearch は、すべてのステータスコードのパスをデフォルトで表示し、-x
オプションを使用して表示されないステータスコードを実行します:
python3 dirsearch.py -t 50 -e .php,.txt,.zip,.html -x 400,403,404,500,503,514,564 -u http://192.168.1.8
gobuster というスキャンツールもあります。辞書として 2 万以上のスターがついたセキュリティ辞書を使用できます。
kali
では、次のコマンドで辞書をインストールできます:apt install seclists -y
。インストール後、デフォルトの辞書の場所は次のとおりです。
/usr/share/seclists
次に、スキャンしてみましょう。
gobuster dir -u http://192.168.1.8 -s 200,301,302 -t 50 -w /usr/share/seclists/Discovery/Web-Content/big.txt -x .php,.txt,.html,.zip
このツールも便利です
0x01 シェルのリバース#
次に、robots.txt
にアクセスしてみると、base64
エンコードされた文字列が表示されます。デコードすると、ターゲットマシンの作者が冗談を言っていることがわかります。
ホームページにアクセスすると、ソースコードの最後にコメントがあります。
base64
を 3 回デコードしてみると、ファイル名がworkinginprogress.php
であることがわかります。
そのパスにアクセスします。
ping
コマンドを実行するように求められますが、複数回試してみると、cmd
コマンドインジェクションであることがわかります。
つまり、ここではshell
コマンドを実行できます。
kali
でnc
をリッスンします。
nc -lvp 4444
先ほどのコマンドインジェクションの場所でシェルをリバースします。
shell
を取得した後、python
のpty.spawn
から標準の pty を取得し、Python のプロンプトから対話型シェルに移動します。
python -c 'import pty;pty.spawn("/bin/bash")'
現在のコマンドインジェクションの身分であるwww-data
として、ウェブサイトのルートディレクトリにアクセスできることがわかります。
find コマンド自体がこの権限を持っています。これにより、作業が少し簡単になります。
SUID 権限の実行可能ファイルを検索するためにfind
コマンドを使用します。次のコマンドを使用します。
find / -perm -u=s -type f 2>/dev/null
- /: ルートディレクトリで検索します
- perm: 指定された権限のファイルを検索します。/u=s または - u=s オプションはシステム内のすべての
SUID
ファイルをリストアップします - type: 指定されたファイルタイプに一致するファイルを検索します。-type f: 指定されたディレクトリ内のすべての通常ファイルを検索します
- 2>/dev/null: 2 > の部分は「ファイルチャネル 2 をリダイレクトする」という意味で、標準エラーファイルチャネル stderr にマップされます。これはプログラムがエラーを書き込む場所です。/dev/null は特殊な文字デバイスであり、そこに書き込むことしか許可されていません。読み取り時には何も返さないため、2>/dev/null はシェルが実行中のプログラムの標準エラーを /dev/null にリダイレクトし、効果的に無視します。
- SUID: SUID (Set owner User ID up on execution) とは、所有者の実行ビットに設定されるものです。この権限を持つファイルは、実行時に呼び出し元に所有者の権限を一時的に与えます。したがって、root が所有者であり、実行ビットに s があるファイルを見つけると、通常のユーザーでそのファイルを実行しても、そのファイルの実行権限は root です。
- なぜ find コマンドを使用するのですか?理由:find の後にはコマンドを入力できるため、他のコマンドを実行する必要があります。つまり、find コマンドを呼び出すと、find コマンドには s 権限があるため、find が実行されるときの権限は root コマンドであり、find の後に入力されたコマンドも root 権限で実行されるコマンドです。
参考文献:
/usr/bin/find
が見つかりました。つまり、現在使用しているfind
コマンドにはSUID
権限があります。
0x02 find コマンドによる昇格#
find コマンドを使用して /bin/sh を呼び出してシェルを実行してみましょう。
find . -exec /bin/sh -p \; -quit
- exec: 各ファイルまたはディレクトリに対して特定のコマンドを実行します。終了は
;
で終了するため、このコマンドの後ろのセミコロンは欠かせません。各システムでセミコロンには異なる意味があるため、エスケープするためにバックスラッシュを前に付けます。 - quit: コマンドの実行が完了したら終了します
root
のシェルを成功裏に取得し、/root ディレクトリにある root.txt ファイルを確認して完了です!
本文終了。
参考文献: