是否有可能在不编写代码的情况下构建一个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