私は最近、Aleph Oneが楽しみと利益のためにスタックを壊しているのを読み、「TheShellcoder'sHanbook」を見てきました。私は次のアセンブリコードをいじっていました:
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
ただし、これを実行すると、segfaultを実行せずにルートシェルをポップできます。
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)をオフにしています。何か案は?