このペイロードはコマンドライン上に「hello world!」と出力するペイロードである。アセンブリ言語にはGASを利用しており、実験は成功した。
.globl main
main:
jmp ONE
TWO:
popl %ecx
xorl %eax, %eax
xorl %ebx, %ebx
xorl %edx, %edx
mov $0x4, %al
mov $0x1, %bl
mov $0xd, %dl
int $0x80
xorl %eax, %eax
movl %eax, %ebx
xorl %ebx, %ebx
inc %eax
int $0x80
ONE:
call TWO
.string "Hello world!\n"
はじめに、ソースコードをコンパイルする必要がある。次のように「gcc」コンパイラを利用する。
defolos@glazheim:~$ gcc hello.s
次に、この実行可能なプログラムをバイトコードに変換する。そのために次のように「objdump」と呼ばれる16進数エディタを使用した。
defolos@glazheim:~$ objdump -d a.out|grep \<main\> -A 30
次に、16進数で表示された機械語をC言語のexploit( [SC] exploit.c)に次のように埋め込む。
char shellcode[]=
"\xeb\x18\x59\x31\xc0\x31\xdb\x31"
"\xd2\xb0\x04\xb3\x01\xb2\x0d\xcd"
"\x80\x31\xc0\x89\xc3\x31\xdb\x40"
"\xcd\x80\xe8\xe3\xff\xff\xff"
"\x48\x65\x6c\x6c\x6f\x20\x77\x6f\x72\x6c\x64\x21\x0a"
;
最後に、このexploitプログラムをコンパイルして実行する。正常に動作することが確認できた。
defolos@glazheim:~$ ./exploit.exe -------exploit--------------- Hello world!
ペイロードに利用価値が無い。