コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

ノート:ディレクトリトラバーサル

ページのコンテンツが他言語でサポートされていません。

質問(%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)[返信]