Я пробовал простой код C для тестирования атак переполнения буфера в Ubuntu
#include <stdio.h>
#include <string.h>
int main (int argc, char **argv)
{
char buffer[500];
strcpy(buffer, argv[1]);
return 0;
}
Итак, когда я пытаюсь передать адрес памяти в буфер, чтобы при его переполнении мой программа должна привести меня к этому месту, поскольку это адрес возврата (поскольку он был перезаписан из-за переполнения стека)
Когда мы пытаемся передать нулевые значения «\ x00» в return, затем он выходит с простым SIGSEGV (как и ожидалось)
(gdb) r $(python -c 'print "\x00" * 508')
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/harshit/Downloads/Hacking/Buffer Overflow Attacks/vuln $(python -c 'print "\x00" * 508')
/bin/bash: warning: command substitution: ignored null byte in input
Program received signal SIGSEGV, Segmentation fault.
__strcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:298
298 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S: No such file or directory.
(gdb)
Но когда мы редактируем возвращаемое значение с другим адресом памяти, кроме "\ x00", например "\ x90", система обнаруживает эксплойты буфера и возвращает SIGABRT
(gdb) r $(python -c 'print "\x90" * 508')
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/harshit/Downloads/Hacking/Buffer Overflow Attacks/vuln $(python -c 'print "\x90" * 508')
*** stack smashing detected ***: <unknown> terminated
Program received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
Вот ссылка на видео, за которой я следил: YouTube
У меня вопрос, каковы возможные обходные пути обхода этого SIGABRT, убедитесь, что наша попытка эксплойта / взлома работает;)