作者descent (返無)
看板C_and_CPP
標題Re: [問題] shellcode
時間Mon Nov 19 11:51:26 2012
#include <stdio.h>
#if 0
0: b8 01 00 00 00 mov $0x1,%eax
5: bb 00 00 00 00 mov $0x0,%ebx
a: cd 80 int $0x80
#endif
char __attribute__ ((section (".text"))) shellcode[] =
"\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80";
typedef void (*FUNCPTR)();
int main() {
printf("<< Shellcode begin >>\n");
FUNCPTR fp = (FUNCPTR)shellcode;
fp();
}
我稍微改了一下, 你測試一下看看能不能執行。
我的環境: ubuntu 10.04 64bit
gcc -c -g -m32 s.c
/tmp/ccSVr2p2.s: Assembler messages:
/tmp/ccSVr2p2.s:12: Warning: ignoring changed section attributes for .text
gcc -o s -g -m32 s.o
執行結果
descent@w-linux:shellcode$ ./s
<< Shellcode begin >>
descent@w-linux:shellcode$
我猜測原因是
shellcode[] 落在 .rodata, 無執行權限, 所以收到 signal,
得到 segment fault。
把 shellcode[] 改到 .text 即可。
另外你的 shellcode 好像有點問題, 我稍微改了一下。
編譯 -m32 是因為我看不懂反組譯的 64 bit code, 所以改用 32bit,
沒有加上 -m32 也是可以正常執行。
※ 引述《a613204 (胖胖)》之銘言:
: #include <stdio.h>
: char shellcode[] =
: "\xb0\x01\x31\xdb\xcd\x80";
: typedef void (*FUNCPTR)();
: int main() {
: printf("<< Shellcode 開始執行 >>\n");
: FUNCPTR fp = (FUNCPTR)shellcode;
: fp();
: }
: 運作環境是Ubuntu 12.10
: 想說先弄一個最簡單的範例 , 只有exit的功能
: 但執行時一直出現記憶體區段錯誤 不知道是什麼原因
: 上網查了一下 利用gcc編譯時也加上了-z execstack
: 還是一樣 請問有人知道原因嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.125.239.46
※ 編輯: descent 來自: 59.125.239.46 (11/19 11:54)
推 cobrasgo:這樣改就沒意義啦XDD 11/19 18:23
→ descent:為什麼呢? 11/19 20:58
推 cobrasgo:拍謝我看錯了XD 11/20 00:29
推 a613204:感恩 好像是code有問題 11/20 09:47