ノート:ディレクトリトラバーサル
表示
質問(%9v)
[編集]「%c0%9v」って何ですか?
UTF-8のところにある例ですが、パーセントエンコードなら「v」ってことはないと思いましたが英語版でも「%c0%9v」になっています。「%c1%1c」⇒0x05C (\) と「%c0%af」⇒0x02F (/) は分かりますが%9vが分かりません。どなたか解説をお願いします。--Sembei 2009年7月24日 (金) 08:57 (UTC)
回答
[編集]私も気になったので、調べてみました。たぶん下記のような仕組みだろうと思います。
'v'は16進数では使用しない文字ですが、プログラム上で16進文字列を解析するコードがもし下記のようにコーディングされていたとすると、'v'は10進数で(31)10の値になります。
int value;
char c;
value = c - 'a' + 10;
0x90は、(144)10なので、%9v=144+31=(175)10。
(175)10は、16進で0xafとなります。実際、IISにこのようなバグが入っていた模様です。以上。--bcxfu75k 2010年2月3日 (水) 03:47 (UTC)
回答ありがとうございます。よく分かりました。--Sembei 2010年3月24日 (水) 05:53 (UTC)