※これは テックタッチ Advent Calendar 2020 の記事です。昨日は zak による AWS MFAを一撃で認証するCLIコマンド作ってみた でした。
はじまり
少女はあるウェブサイトを見ていました。それが特に気になったわけではありませんでした。
少女が使っていたコンピューターは、カッコいい龍が印象的でした。このオペレーティングシステムが「Kali Linux」というらしいことがわかりました。
nmap
それは本当に単なる気まぐれだったのですが、少女は一つのコマンドを実行してみました。
通常、このコマンドは、対象コンピューターの管理者との合意のもと、限られた環境下でのみ実行が許されるもので、見知らぬ相手のコンピューターに向かって実行してはならないことを、少女はまだ知りませんでした。
sudo nmap -sS -A 10.0.2.15
どうやらこのコンピューターは 22 番ポート、80 番ポートでリッスンしているらしいことがわかりました。そして少し古いタイプの Linux ということも。
skipfish
引き続き、今度は別のコマンドを実行してみました。
skipfish -o log 10.0.2.15
skipfish は、実行が終わると、ウェブサイトに関する診断結果を出力しました。少女は、そこにあった index.html を開いてみました。
いくつかの画像ファイルがみつかったのと、ウェブサーバー(=Apache HTTP Server)のバージョンが確認できたこと以外に、特に気になったことはありませんでした。
dirb
さらに次のコマンドを実行してみました。
dirb http://10.0.2.15/
dirb はウェブサイト内のサブディレクトリを発掘するコマンドのようです。辞書ファイルを用いてウェブサイトを掘り下げるようです。 ここでは /cgi-bin/ と /admin/ というサブディレクトリの存在が判明しました。
nikto
このウェブサイトに特に興味を持ったわけではありませんでしたが、少女は次のコマンドを実行してみました。
nikto -h 10.0.2.15
nikto もウェブサイトに関する情報収集を行うコマンドのようです。/admin/ が interesting と言われています。“興味深い” という意味でしょうか。
【疑問】
Kali Linux 2019 だと、このとき、「OSVDB-112004: /cgi-bin/index.cgi: Site appears vulnerable to the 'shellshock' vulnerability (http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6271).」というメッセージが表示され、/cgi-bin/index.cgi が危険だということを教えてくれたのですが、Kali Linux 2020 のダウンロード版ではこれが表示されなくなっていました。従って、少女がこの後 /cgi-bin/index.cgi に着目することには無理がありますが、このまま話は続きます。
Metasploit
少女は引き続き、また違うコマンドを試してみました。
msfconsole
msfconsole は Metasploit というツールキットのようなものを使用する際の対話コンソールです。この牛さんのアスキーアートは、毎回違うものが表示されることに気付き、少女は楽しくなりました。
msfconsole を開くと、少女は search コマンドで何かを検索できることをみつけました。そこに表示されたのは exploit といって、攻撃コードやテストコードのようでした。少女は、試行錯誤の結果、Apache と Bash に関する exploit にたどり着きました。 そうです。それはまさに Shellshock の攻撃コードだったのです。
msfconsole では、use コマンドで exploit を簡単にロードできました。
use exploit/multi/http/apache_mod_cgi_bash_env_exec
exploit をロードした後は options コマンドで、この exploit のオプションを確認できました。 少女は RHOSTS に 10.0.2.15 を、TARGETURI に /cgi-bin/index.cgi を設定しました。
options
set RHOSTS 10.0.2.15 set TARGETURI /cgi-bin/index.cgi
ここまできたらあとは実行するのみです。
run
プロンプトは何かを待機しているようでした。少女はおもむろに cat /etc/passwd と入力してみました。
cat /etc/passwd
おお、なんということでしょう。表示されたのはまさしくサーバーの /etc/passwd でした。そこには、管理者のお宅の家族の名前らしきものが記述されているではありませんか。そして同級生の名前も...。
少女はようやく事の大きさに気付いてしまいました。他人のサーバーに侵入してしまったのです。早くこのコンソールから抜けなければ。
exploit モードから抜けるには back、そして msfconsole から抜けるには quit を入力します。
侵入の結末
このとき少女は、少し前の画面で気になったことを思い出していました。dirb の実行結果です。そこでは /m/ というサブディレクトリの存在が報告されていました。さらに詳しい結果を得たい場合は -w オプションを使用します。
dirb http://10.0.2.15/ -w
dirb はまるで何かを発掘するかのように、サブディレクトリを深く深く掘り下げていきます。
/m/e/r/r/...
merr...
なんでしょうこれは、dirb がみつけたサブディレクトリのパスをつなげていくと、/m/e/r/r/y/x/m/a/s/index.html というページの存在が明らかになりました。
少女はブラウザを開くと、URL を入力してみました。表示されたのは簡単な文字だけのページでした。
なんということでしょう。そこに書かれていたのは、クリスマスプレゼントの隠し場所でした。
観察されていたのは少女の方だったのです。彼女が今みつけたいもの、それはお父さんのタンスの中にあったのでした。
このあとすぐに、少女はお父さんに LINE をしました。
おわり
参考
これは msfconsole から run した瞬間の /var/log/httpd/access_log です。/tmp に置かれたバイナリが実行されているのがわかります。この瞬間に、exploit コードとの接続(tcp: 4444)が確立します。CentOS 側の iptables は INPUT tcp: 22、INPUT tcp: 80 が開いています。OUTPUT は制限なし。
msfconsole のアスキーアートはいくつも種類があり、これを見るだけでも楽しいです。
ひとこと
- とても古い話題で恐縮です。
- 今回は shebang が Bash の index.cgi が侵入を許す入口となってしまったシナリオでしたが、そのような穴がみつからなくとも、直接ファイルを送り込む攻撃コードや、Apache 以外の様々なミドルウェアを標的とした攻撃コードも存在します。
では引き続き、本 Advent Calendar をお楽しみください。明日は taka の「Amplify + Nx (React + Typescript) で爆速で monorepo 環境を構築する」です。テックタッチ Advent Calendar 2020 からどうぞ。
著者について
テックタッチ Windows チームの入澤です。少女ではなく、中年男性です。純米生原酒が好きです。