第6話
「えっと……」
二海は言葉に詰まった。ほんとうにざっくりとしか聞いていないから、自分がクラブに入りたいのかどうかすらわからなかった。
「あ、じゃあさ、体験入部ってことで、今回の改ざんのやり方を教えるね。さっきの話じゃあんまCTFのことわからないと思うし」
桃は一旦黒板に書いた文字を全部消し、壁のスイッチを押してスクリーンを下ろした。そしてノートパソコンを持ってきてケーブルにつなぎ、画面をスクリーンに映し出した。教壇を昇り降りするたび、桃のボブの髪が揃って揺れた。
「あ、電気ついてると見えにくいか」
桃は教室の前だけ電気を消した。スクリーンに映っているのは、変えられてしまう前の『two-oceans.xyz』のページだった。それを見ると二海はひどく安堵して、「ああ……」と声を漏らしてしまった。よかった、無事だった、と思った。
「この……もうちょっと下か……このフォームがあるでしょう?」
桃はブラウザを下へスクロールし、ページ上に表示されている感想フォームを真ん中に映した。
「これが改ざんの原因になったやつ」
「これが?」
このフォームは、数日前に二海がつけたものだ。写真の並べ方とはまた違い、今までつけたことが無かった機能で、調べてはエラーを出し、また調べてはエラーを出し……と苦労して設置した。パーミッションだの実行権限だのと知らない言葉がぞろぞろ出てきたし、プログラムが存在しているかどうかをサーバーの管理画面で調べる必要もあった。フォームに文字を入力し、送信ボタンを押すと自分のメールアドレスにそれが届くようになったころには、夜中の一時をまわっていた。苦心の作であるこのフォームが、ページを作り変えられる原因になっていたとは、二海は信じたくない気持ちだった。
「そうそう。このフォームは、入力を受け付けてその内容をメールで送信するようになっているでしょう」
「そう……だけど」
何で知ってるんだろう、と二海は疑問に思った。
「その、入力を受け付けて内容をメールで送信する、ってところのプログラムに問題があるの。ちょっと待ってね」
桃はかたかたとフォームに何か入力すると、送信ボタンを押した。すると、ブラウザいっぱいにばあっと文字列が表示された。何か見覚えがある。
「これ、あの……」
「そう、入力内容の受付プログラムね。これ、ここで入力を受け付けて」
桃はブラウザをスクロールして、ある特定の行を選択した。『$comment = $_POST["comment"];』と書いてある。
「これを別にあるメール送信用プログラムに渡してるんだけど」
桃はまたブラウザをスクロールし、下のほうにあった別の行をハイライトした。
『exec("mailsender -t -to ${to} -from ${from} -s ${subject} -b ${comment}");』
「ここがいけないの。ユーザーの入力をそのまま実行しちゃってるから」
二海は、桃の言っていることを順を追って理解しようと努めていた。まず、フォームに『こんにちは』とかを入力する。送信ボタンを押すと、この表示されているプログラムが起動する。そして、さっきの『$comment =』というところで、その入力した『こんにちは』が受け取られる。そしてそれを、execというところで使う。ここが原因の箇所なのだろうが、二海にはまだうまく飲み込めていなかった。
「ごめん、あの……execっていうのは……」
「execっていうのは、任意のコマンドを実行できる命令」
「でも、ここではメール送信用のプログラムを実行してるんじゃなくって?」
「そう、そうなんだけど、でもそのオプションとしてユーザーの入力をそのまま渡してるでしょう。そのとき、例えば……」
と、桃はエディタを開いた。バックグラウンドが黒色になっている。
「ふつうに『Hello』って入れたときは、ここのコマンドはこう解釈されるのね」
『mailsender -t -to to@example.com -from from@example.com -s subject -b Hello』と、桃は書いた。キー入力が速い。
「でも、悪意のある入力があると……」
『mailsender -t -to to@example.com -from from@example.com -s subject -b Hello && rm -rf / -no preserve』
と、桃は先ほど書いたものの一行下に書いた。
「こういうふうに、execに渡す文字列に、コマンドを表す文字列も入れられちゃうの。execはそれを実行するから、結果として任意のコマンドを実行されちゃうわけ」
「あー……なるほど……」
二海は思わず身を乗り出していた。やっと桃の言っていることが飲み込めてきた。『Hello』を送るときは問題ないが、『Hello && rm -rf / -no preserve』と送ると、『Hello』の後がメール送信とは別のプログラムを実行するものとして扱われてしまうのだろう。たぶん『&&』で区切っているのだ。
「今、プログラムを表示させたのも原理は基本同じ。だから、一旦このフォームは取り外して、プログラムも削除したほうがいいよ。元ファイルはおんなじ階層の、oldってディレクトリに入ってるから」
「そうする」
「……ってかんじ。どう? 面白くない?」
「うん……面白い」
二海は同意した。理屈が理解できたときは、なかなか見つからなかった間違い探しの最後の一個がわかったときのようだった。その答えを聞いて、桃は手を打ちあわせた。
「面白い? いいねえ、才能ある! CTFってこういう感じよ。プログラムの盲点をついて、攻撃して。そうしたらねえ……あ、でももうこんな時間か」
桃の言葉に、二海も自分のスマートフォンを見た。そろそろ六時に近い。確か六時で部活動は終了のはずだ。
「じゃ、続きは明日かな。本とか色々持ってくるし、よろしくね! あ、自分のノートって持ってる?」
「の、ノート?」
「ノートパソコン。無かったら無いでいいけど」
「いちおう……」
「ある! ますますいいね! そしたら明日は、色々ツールとかも入れよう。いいね、三人だと『クラブ』ってかんじで」
喋っている桃に構わず、ゆあんは本をリュックサックにしまって席を立ち、教壇の前を横切った。
「あ、ゆあん! 明日ゆあんも来てね! 作戦会議しないと」
「はいはい」
ゆあんは振り向かずに答え、コンピューター室の扉を開けて出ていった。リュックサックの後ろで、何かのチャームが揺れているのが見えた。
「じゃ、えーと、今日は一旦終了ってことで」
二海はぱたぱたとスクリーンを上げ、黒板に書かれた文字を消した。
(手伝ったほうがいいかな……いいよな……)
二海はそう思ったのだが、声のかけ方がわからずまごまごしていた。そのうち片付けは終わってしまい、桃は二海を見て「電気消すよ?」と言った。二海は慌てて立ち上がり、桃と一緒にコンピューター室を出た。
「鍵、鍵」
桃は外から鍵をかけ、『コンピューター室』とシールの貼ってあるキーホルダーを手の中でもてあそんだ。
「私、職員室に鍵返してくるね」
「あ、うん……」
「じゃ、明日またね!」
桃はそう軽く言い、階段を足早にのぼっていった。二海は桃の姿が見えなくなってから、下駄箱までの廊下を歩き出した。
廊下は窓からの夕日がもろに差し込み、まともに外を見るとひどく眩しい。教室の前を通りがかると、体操着から制服に着替えている生徒で賑やかだった。それでも学校の中の空気は、いつものように高圧的ではなかった。
(帰ったらまず元に戻して、フォームを削除して……)
二海は帰り道、『two-oceans.xyz』復旧の手順を考えていた。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます