初級CGIクラックガイド(2)
我々に出来ることは「想定されていない入力を行う」ということだけですと書いたんですが、これの意味をもう少し。
例えば、以前僕は「User-Agentを使えば掲示板に対するタグ荒らしができるかもしれない」という話を書きました。
参考: User-Agentで掲示板荒らし
「掲示板の『本文』にタグを書き込む」という手口は一番初歩的な「掲示板荒らし」です。従って、多くの掲示板は以下のような処理を行っている。
$content =~ s/>/>/g;
ブラウザ上で「<」を表示させるにはソースに「<」、「>」を表示させるにはソースに「>」と記述します。「<」「>」は普通に書いたら「タグの始まり」「タグの終わり」と解釈されてしまいますからね。
参考:初心者のためのホームページ作り内「実体参照符号/HTML応用編」つまり。
この置換処理の結果、例えば本文に「<font size=7>氏ね」と書いたならば変数$contentの中身は「<font size=7>氏ね」から「<font size=7>氏ね」になります。よって、これをブラウザで表示したとしても「<font size=7>氏ね」になり、タグは無効化される訳です。
「掲示板の『本文』にタグを書き込む」という手口は一番初歩的な「掲示板荒らし」です。「掲示板荒らし」も(「タグをデータファイルに書き込ませる」という「想定されていない処理」をプログラムに行わせる・・・つまり「バグ」を起こさせる・・・という視点で)「クラック」の一種です。誰もが思いつくようなバグならば、塞がれているのが当たり前ですよね。
しかし「本文の内容」が書き込む人の制御下にあるのと同様に、「メールアドレス」「名前」といった項目もまた書き込む人の制御下にあります(当たり前ですけど)。だから「本文」中のタグが無効化されるならば、「メールアドレス」「名前」といった項目に目をつければ良い。ひょっとしたら「メールアドレス」や「名前」に関しては上記のような置換処理が行われていないかもしれない。そしてそれも駄目だった(=置換処理が行われていた)場合。同じように「書き込む人の制御下にある」User-Agentにも目をつければ良い。
「データファイルにタグを書き込ませる(=データファイルから書き込みデータを読み込み表示させた時タグが表示されるようにする)」が目的だとしても、「直接『データファイルに書き込ませる文字列』を制御する」なんて芸当は不可能です。だから「何が自分の制御下にあるのか」を考える。「掲示板の書き込み内容」と「環境変数User-Agent」は荒らす側から見れば並列な存在です。両者とも「自分の制御下にある入力である」という点で並列です。
「自分の制御下にある入力(=formからCGIに送信される標準入力・環境変数User-Agent・・・)」を「想定されていない値」にすることが「『データファイルに書き込ませる文字列』を制御する」に繋がるならば。それが「クラック」です。
「User-Agentで掲示板荒らし」の背景は以上です。次回からもう少し話を進めます。

TrackBack
この記事へのトラックバック