初級CGIクラックガイド(1)
関数。
「CGI」とは・・・一般化して言うならば「プログラム」とは・・・関数です。入力から出力を生成する関数。入力・出力が複数であったり内部処理が(単純な一次関数と比較すれば)複雑怪奇なだけで。
CGIに関して言うならば、「入力」と「出力」は例えばこんな感じです。
単純なアクセスカウンターだったら。
超初級CGIクラックガイドを読んでくれた方ならば分かっていると思いますが、CGIクラックとは即ち「CGIのバグ探し」です。そして「バグ」とは簡単に言うと「想定されていない入力に対してプログラムが想定されていない処理を行ってしまう」ということです。
我々に出来ることは「想定されていない入力を行う」ということだけです。「想定されていない入力を行う」ことで「想定されていない処理を行わせる」ことが可能ならば、それは「裏技」であり「クラック」にもなりうる。ある言い方をすれば、上記のような思考を辿り「もしかしたらこんな裏技があるのでは?」と「試してみる」ことが、「ハッキング」なのです。
y=f(x)=3x+5
xという入力をfという関数に通すとyが出てくる。「f」の実体は「入力を3倍して5を足して出力する」関数。「CGI」とは・・・一般化して言うならば「プログラム」とは・・・関数です。入力から出力を生成する関数。入力・出力が複数であったり内部処理が(単純な一次関数と比較すれば)複雑怪奇なだけで。
CGIに関して言うならば、「入力」と「出力」は例えばこんな感じです。
| 入力 | 出力 |
|
環境変数query_string 標準入力 サーバー内データファイル 現在時刻 その他環境変数群 etc... |
html表示 |
| 入力 | 処理 | 出力 |
|
サーバー内データファイル(現在のアクセス数) |
データファイルから取得した数字に1を加える サーバー内データファイルにその数字を書き込む |
「1加えた結果(=アクセス数)」をhtml出力 |
FC版ドラクエ4でコイン買う時に極端に多い枚数を指定すると値段が安くなるって裏技があったの覚えてますか?あの原理は単純ですよね。超初級CGIクラックガイドの冒頭で触れたこの裏技。もう少し分析してみます。
「買い物でいくら払うか」という変数が0-16777215の領域までしか用意されていない。だから20000000Gの買い物ならば値段は20000000-16777215Gになる。
- 変数には「領域」があり、その領域を超えた値を代入することはできない
- 領域以上の値を代入させようとしたら、値がリセットされるのでは?「領域以上の値を代入しようとしたらエラーメッセージを出す」みたいな例外処理が組み込まれていない可能性はある
- 「買い物でいくら払うか」という変数は(普通の買い物では一回で払う金額なんて大したことはない訳だし)「領域」が比較的小さいのでは?
- 「買い物でいくら払うか」という変数に巨大な値を代入させようとすれば良い
- 「コイン」ならば枚数を自由に決められるから「巨大な値を代入させる」ということが可能だ
我々に出来ることは「想定されていない入力を行う」ということだけです。「想定されていない入力を行う」ことで「想定されていない処理を行わせる」ことが可能ならば、それは「裏技」であり「クラック」にもなりうる。ある言い方をすれば、上記のような思考を辿り「もしかしたらこんな裏技があるのでは?」と「試してみる」ことが、「ハッキング」なのです。

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