是否有可能在不編寫代碼的情況下構建一個shellcode?構造一個shellcode而不會搞亂程序集
我試圖編譯下面的簡單應用:
#include <stdlib.h>
int main(int argc, char** argv)
{
char* args[] = { "/bin/bash", NULL };
execve("bin/bash", &args, NULL);
return 0;
}
然後我編譯它,並用gdb得到如下:
(gdb) x/15i main
0x400506 <main>: push %rbp
0x400507 <main+1>: mov %rsp,%rbp
=> 0x40050a <main+4>: sub $0x20,%rsp
0x40050e <main+8>: mov %edi,-0x14(%rbp)
0x400511 <main+11>: mov %rsi,-0x20(%rbp)
0x400515 <main+15>: movq $0x4005d4,-0x10(%rbp)
0x40051d <main+23>: movq $0x0,-0x8(%rbp)
0x400525 <main+31>: lea -0x10(%rbp),%rax
0x400529 <main+35>: mov $0x0,%edx
0x40052e <main+40>: mov %rax,%rsi
0x400531 <main+43>: mov $0x4005de,%edi
0x400536 <main+48>: callq 0x4003f0 <[email protected]>
0x40053b <main+53>: mov $0x0,%eax
0x400540 <main+58>: leaveq
0x400541 <main+59>: retq
可惜我不能用它來生成的shellcode,因爲有一個使用全局偏移表[main + 48]。
我該如何修復這種方法來生成shellcode而不用返回程序集。
我不認爲你可以讓編譯器產生的代碼可以直接用作shell代碼。 – fuz