トップページに戻る

Category

AllArchives

Checker

Credit

初級CGIクラックガイド(2)

前回、初級CGIクラックガイド(1)
我々に出来ることは「想定されていない入力を行う」ということだけです
と書いたんですが、これの意味をもう少し。

例えば、以前僕は「User-Agentを使えば掲示板に対するタグ荒らしができるかもしれない」という話を書きました。
参考: User-Agentで掲示板荒らし

CGIで参照できる環境変数User-Agentは閲覧者の制御下にある「入力」の一つです。想定されていない入力・・・つまり、想定されていないUser-Agent・・・によって掲示板を荒らす。「User-Agentで掲示板荒らし」という話を既に読んでくれているならば、是非もう一度そうした視点で読み直してみて下さい。

「掲示板の『本文』にタグを書き込む」という手口は一番初歩的な「掲示板荒らし」です。従って、多くの掲示板は以下のような処理を行っている。
$content =~ s/</&lt;/g;
$content =~ s/>/&gt;/g;
変数$content(本文)の中に「<」があったら「&lt;」に、「>」があったら「&gt;」に置換する。こうすれば本文中のタグは無効化される(※)。

ブラウザ上で「<」を表示させるにはソースに「&lt;」、「>」を表示させるにはソースに「&gt;」と記述します。「<」「>」は普通に書いたら「タグの始まり」「タグの終わり」と解釈されてしまいますからね。
参考:初心者のためのホームページ作り内「実体参照符号/HTML応用編」
つまり。
この置換処理の結果、例えば本文に「<font size=7>氏ね」と書いたならば変数$contentの中身は「<font size=7>氏ね」から「&lt;font size=7&gt;氏ね」になります。よって、これをブラウザで表示したとしても「<font size=7>氏ね」になり、タグは無効化される訳です。
「本文中にタグがあったら無効化すべく置換処理を行う」というのは「掲示板を作るならば常識」とも言えるコトです。理由は既に書いてますね。
「掲示板の『本文』にタグを書き込む」という手口は一番初歩的な「掲示板荒らし」です。
「掲示板荒らし」も(「タグをデータファイルに書き込ませる」という「想定されていない処理」をプログラムに行わせる・・・つまり「バグ」を起こさせる・・・という視点で)「クラック」の一種です。誰もが思いつくようなバグならば、塞がれているのが当たり前ですよね。

しかし「本文の内容」が書き込む人の制御下にあるのと同様に、「メールアドレス」「名前」といった項目もまた書き込む人の制御下にあります(当たり前ですけど)。だから「本文」中のタグが無効化されるならば、「メールアドレス」「名前」といった項目に目をつければ良い。ひょっとしたら「メールアドレス」や「名前」に関しては上記のような置換処理が行われていないかもしれない。そしてそれも駄目だった(=置換処理が行われていた)場合。同じように「書き込む人の制御下にある」User-Agentにも目をつければ良い。

「データファイルにタグを書き込ませる(=データファイルから書き込みデータを読み込み表示させた時タグが表示されるようにする)」が目的だとしても、「直接『データファイルに書き込ませる文字列』を制御する」なんて芸当は不可能です。だから「何が自分の制御下にあるのか」を考える。「掲示板の書き込み内容」と「環境変数User-Agent」は荒らす側から見れば並列な存在です。両者とも「自分の制御下にある入力である」という点で並列です。
「自分の制御下にある入力(=formからCGIに送信される標準入力・環境変数User-Agent・・・)」を「想定されていない値」にすることが「『データファイルに書き込ませる文字列』を制御する」に繋がるならば。それが「クラック」です。

User-Agentで掲示板荒らし」の背景は以上です。次回からもう少し話を進めます。

SeeAlso

SameSubCategory

Footprint

Navigation

TrackBack

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

Comment

お願いします。初心者をも想定して「」の実体参照化について述べるならば、必ず「"」「'」「&」の実体参照化が必要であると付記して下さい。某有名巨大webメールサービスでも所によっては忘れられていて変な風になっていますしセキュ系?あるいはUG系のサイトでも忘れているところがあります。「」「"」「'」「&」を実体参照化しても出力されるHTMLにINSERTIONが可能であるケースもあります。対策として「 」を「 」に替えて出力せよとの意見もありますが間違いです。属性の値は必ず「"」「'」で括るようにプログラミングすべきであると教えるべきです。IPAの資料にはそのへんしっかり書いてありますけれど知らないSEやプログラマーは山ほどいます。残念でなりません。せめて世の啓蒙家にお願いしている次第でございます。

プルーア人 2005/05/07 09:09:04

はじめまして。これは「プログラムを組む」というよりは「組まれているプログラムを崩す」という側の話なので「どうプログラムすべきか」というのはちと「別の話」なんですが、「&」や「"」はどちらの視点からも重要ですよね(実は「初級〜」の二つほど後の連載でそこらへんを掘り下げる予定だったので「しまった先を読まれた」感が多少あったり(ぇー))。「参考」という形で紹介させて頂きますね。ご指摘ありがとうございます。
ところで、「某巨大ウェブメール」って何処の話でしょう?ちょっと興味が・・・。

tokix 2005/05/07 22:47:12

&の実体参照化は不要であり何の意味もありません。
念のためやっといたほうがいいと反論するかもしれませんが、
無意味な作業をしたらメンテナンスの手間が増えるだけっです。
実際問題として大手で配布されているCGIでも&の実体参照化は行われていません。

[匿名] 2005/05/09 11:15:01

あれ、すみません、プルーア人の意図は分かりませんが、僕が思ってた話は勘違いだったかもですorz。今晩か明日の晩くらいに実験してみます。

tokix 2005/05/09 12:29:24

>&の実体参照化は不要であり何の意味もありません。

あの、セキュリティ上はそうなのかもしれませんが、HTMLの文法上は必要です。属性値の中でも、要素の内容としても、&は&に変換して出力する必要があります。

text/htmlな人はそれほどHTMLの文法エラーに気を払いませんけど、"無意味な作業"と教えるのは嘘ではないでしょうか。XHTMLだとパースエラーでソース表示になってしまいますし……

かんな 2005/05/12 23:16:50

あ、文法上必要なのは間違いないですよね。なので、「無意味だ」という表現は僕は行うつもりはないです(と言いつつちと時間が無くて色々実験をしていないのですが・・・)
んー、ただ、何というか、いや、「この話題が長引くと割と困るな」と思いつつ以下を書くのですが、あれなんですよね・・・。「文法を守る(ことに意味があるか)」という話自体が当サイト及びこの記事が関わる点ではないのですよね・・・(ただ最初の書き方だと「実体参照化という話が出てくるのはタグだけ」という「誤解」を与える表現になっていて「興味がある人は入り口紹介するので後は自分でどうぞ」という書き方にすらなってなかったので「参考」を追加したんですが)。「プログラムを組む場合に気をつけるべきことは」という記事ですらなかったりしますんで・・・。

tokix 2005/05/13 01:43:01

>&は&に変換して出力する必要があります。

言いたかったのは"&は&amp;に変換する必要があります"ってことで。MTは全然サニタイズしてないのね……。こういうことになるからサニタイズは必要なんだってば!

>「プログラムを組む場合に気をつけるべきことは」という記事ですらなかったりしますんで・・・。

御意。というか私は記事自体に突っ込んだのではなくて、匿名さん(誰)に言いたかったんで。上の例で十分"無意味な作業"でないことが証明されました(意図せず)。

かんな 2005/05/13 15:04:28

うわ、返信遅れてしまってすみません(やはり「掲載許可」制にするとコメント入ってることに気付きにくいのでダメですねorz)
MTのコメントは色々微妙ですねぇ・・・。そして「あー面倒なのでpreタグ使えばいいのか」と思って組むと昔の携帯と同じ問題が起こる訳ですね(preの終了タグを使うと以後の部分でタグが普通に使える)。

tokix 2005/05/20 14:12:17

う〜ん。掲載許可制は別にかまわないのですが、そう書いといてもらわないとJavaScript有効じゃないと駄目なのかとか、問題発言と見なされたんじゃないかとか、いろいろと考えてしまうのですよね。掲載されない場合というのが、あらかじめわかっていれば不安にはならないのですけど。

ところでまたまた突っ込みで、preだからサニタイズしなくていいというのは誤解なんですよね(http://bakera.jp/hatomaru.aspx/ref/html/element/pre)。HTMLの文法は油断できないです。

かんな 2005/05/20 20:21:02

すみません。何というか、その、MTをバージョン上げたらコメントのデフォ仕様が変わってて(承認が必要に)何かTypeKeyがどうたらだけどそんなシステムは使う気がしないので問答無用で掲載させる設定はどう変更すればいいのかなぁと思ったのが数週間前でその後凄い勢いで見ない振りをしていました。早急に調べますorz

http://bakera.jp/hatomaru.aspx/ref/html/element/pre
Preタグってこういう仕様だったのか・・・。素で知りませんでした。ご指摘ありがとうございます。そしてMTのURL判定は頭が悪いというか全角を考慮してませんね!コメント周り暇なとき弄ろうかな・・・。

tokix 2005/05/20 20:36:04

PostForm

情報を登録  
コメントは本文以外省略可能で、当方の承認後掲載されます