Last update: Saturday, 04-Jun-2011 17:29:14 JST |
_ ShellExecute() APIの解説に、以下の記述がある。
フォルダを開くには、次のコードを記述します。 ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL);
_ このコードで、フォルダが開かないケースがひとつある。「フォルダと同じベース名の実行可能ファイルがあるとき」がそれ。
_ たとえば、フォルダ"C:\temp\test"を上のAPIで開くとき、「ShellExecute(handle, NULL, "C:\\temp\\test",〜)」とするわけだ。しかし、もしこのときに"C:\temp\test.exe"とか"C:\temp\test.bat"とかが存在していると、フォルダを開かずにそっちを実行してしまう。
_ これは、プログラムを書かなくても検証できる。コマンドラインから、以下のように実行してみるとよい。"start hoge"でフォルダを開かず、hoge.batを実行しているのがわかるはず。
mkdir hoge echo date>hoge.bat start hoge
_ これ単体では「困った仕様だな」程度だが、ちょっと前にあった「圧縮ファイル解凍の脆弱性」と組み合わせられると、危険な穴になる。
_ "test.lzh"という圧縮ファイルがあったとする。Windowsでこのファイルをダブルクリックすると解凍ツールが起動し、デスクトップなどに"test"というフォルダが作られて中身が解凍されたあと、このフォルダが開かれるようになっているのが一般的である。ところが、この圧縮ファイルに"../test.exe"というファイルが含まれていると、どうなるだろうか。
_ 脆弱性が修正されていない解凍ツールでこれを開いた場合、「フォルダ"test"を作る」「ファイル"test/../test.exe"を解凍する」「フォルダ"test"を開く」という動作をしようとして、最後の「フォルダ"test"を開く」ところが「ファイル"test/../test.exe"を実行する」になってしまう。
_ つまり、「圧縮ファイルを解凍しただけのはずが、中身を実行してしまう」という事態が発生してしまうわけだ。危険この上ない。
_ 幸い、「圧縮ファイル解凍の脆弱性」が公開されてからかなり時間が経っているため、穴はすでに塞がれており、こういうことはそう起こらないはず。環境のアップデートをちゃんと行っていればだが。
_
ただ、これと同種の「フォルダを作成し、その中にファイルを生成し、最後にそのフォルダを開く」という動作をするプログラムは、同種の罠にはまる可能性がある。また、フォルダやファイルの作成をしなくても、「どこかのデータフォルダなどを開く」プログラムは、そのフォルダと同名の実行可能ファイルを外部から配置されることで、「フォルダを開く」作業をしたつもりが「ファイルを実行させられてしまう」可能性がある。
_ てっとり早く、きょうの結果。色は「緑=起家、赤=飛び、青=飛ばし」。
|
東1-0:南家(G) |
東2-0:東家(G) |
東2-1:北家(めが) |
|||||||||
東3-0:東家(X) |
東3-1:流局 |
東4-2:東家(やあ) |
東4-3:流局 |
|||||||||
南1-4:北家(やあ) |
|
|
東1-0:南家(やあ) |
東1-1:南家(めが) |
東2-0:流局 |
|||||||||
東3-1:南家(G) |
東4-0:西家(やあ) |
南1-0:東家(X) |
南1-1:北家(G) |
|||||||||
南2-0:西家(G) |
南3-0:南家(G) |
南4-0:東家(G) |
|
|
東1-0:北家(G) |
東2-0:流局 |
東2-1:流局 |
|||||||||
東2-2:西家(G) |
東3-0:東家(やあ) |
東3-1:北家(X) |
|
|
東1-0:北家(X) |
東2-0:南家(めが) |
東3-0:流局 |
|||||||||
東3-1:東家(めが) |
東3-2:東家(めが) |
東3-3:東家(めが) やあ撮影 |
東3-4:西家(やあ) |
|||||||||
東4-0:北家(めが) |
南1-0:北家'(X) |
|
|
東1-0:南家(めが) |
東2-0:東家(めが) |
東2-1:西家(X) |
|||||||||
東3-0:東家(X) |
東3-1:流局 |
東4-2:南家(G) |
南1-0:西家(やあ) |
|||||||||
南2-0:北家(G) |
南3-0:北家(めが) |
南4-0:南家(G) |
|
|
東1-0:北家(やあ) |
東2-0:東家(G) |
東2-1:南家(めが) |
|||||||||
東3-0:西家(X) |
東4-0:西家(G) |
南1-0:東家(X) |
南1-1:北家(やあ) |
|||||||||
南2-0:南家(めが) |
南3-0:東家(めが) |
南3-1:西家(X) |
南4-0:東家(やあ) |
|||||||||
南4-1:南家(X) |
|
めが | G | ぐさ | やあ | ||
---|---|---|---|---|---|
1 | -50 | +41 | +7 | +2 | |
2 | -26 | +36 | -10 | +0 | |
3 | -52 | +51 | -5 | +6 | |
4 | +14 | -50 | +49 | -13 | |
5 | -19 | +3 | -25 | +41 | |
6 | +5 | -28 | +37 | -14 | |
合計 | -128 | +53 | +53 | +22 |
_ 昼過ぎ出発。川崎駅前の桜をちょっと撮ってから、九段下へ。
西口桜並木 |
満開の枝 |
桜とミューザ |
満開の枝2 |
_ 2時過ぎ到着。満開なのになんか冬っぽい天気。強い空っ風で砂埃が舞い上がるような状態の中、場所取り完了。
_ しばし後にぜろ到着、その後も「ちょっと寄るだけの人」も含めて日暮れくらいまでに7〜8人。
_ 仕事上がり組が到着して、最終的には十数人が輪を作る。夜になっても風は収まらず、気温はどんどん低くなる。
_ 2100解散。わし的「最も寒い花見」として記憶に残る気がする・・・(苦笑)。その後もちょっと千鳥が淵を撮ったり、暖まりにお茶したりしてから解散。
にぎわい |
水面の桜 |
千鳥が淵 |
桜と太陽 |
桜と太陽2 |
さくらまつり |
宴会会場 |
桜と鳩 |
燃料補給 |
灯がともる |
そろそろ宴会本番 |
夜桜 |
弥二郎と桜 |
夜の千鳥が淵 |
メールはこちらへ...[後藤浩昭 / Hiroaki GOTO / GORRY / gorry@hauN.org]