ASPのRequestオブジェクトについて

このWebshellに関するツイートのASPのコマンドを見て、一瞬だけ混乱したので、まとめ。

<% eval request("cmd") %>

上記は一見すると、コマンドをrequest()が直接受け取っているかに思えるが、これは"cmd"という名前の引数に渡されたコマンドを受け取る。

例) GET /hoge/foo.asp?cmd=whoami

ASPのRequestオブジェクトにはQueryString、Form、Cookies、ClientCertificate、ServerVariablesという5つのコレクションがあり、通常は使いたいコレクション名を明示する。

例)Request.QueryString("hoge")

Request("hoge")のようにコレクション名を明示しなかった場合、以下のような処理が行われる。※ここから抜粋

ASPには次のような,コレクション名を書かず直接Requestオブジェクトに対して項目の値の取り出しを要求する方法が用意されている。

value=Request("price")

このようにして値を取り出す対象のコレクションを明示しなかった場合,Requestオブジェクトは次の順序で5つのコレクションを探索し,該当する名前をもつ項目が最初に見つかったところからその値を取り出してくる。

1. QueryString
2. Form
3. Cookies
4. ClientCertificate
5. ServerVariables

つまり、Request("hoge")とした場合はRequest.QueryString("hoge")と同等と見なされ、"hoge"という名前のURLパラメータに渡された値を実行する。

以上。

Leave a Reply

Your email address will not be published. Required fields are marked *