如何绕过呼叫指令暂停程序?

时间:2018-03-24 20:14:08

标签: assembly x86 stack-overflow

我几乎可以肯定它是暂停的,因为shellcode应该打印一个字符串。而不是程序挂起

我将自己应用程序中的返回地址覆盖为我自己的shellcode。 jmp 0x7fffffffdbc7是它遇到的第一条指令。 在它跳转到0x7fffffffdbc7后,它调用第一条指令正下方的地址,该指令应该递减堆栈,然后将位于0x7fffffffdbcc的字符串推到顶部,然后将控制流设置为0x7fffffffdbb2(而不是返回地址我按下了地址字符串)

(gdb) x/20i $rip
=> 0x7fffffffdbb0:  jmp    0x7fffffffdbc7
   0x7fffffffdbb2:  pop    rcx
   0x7fffffffdbb3:  xor    eax,eax
   0x7fffffffdbb5:  mov    al,0x4
   0x7fffffffdbb7:  xor    ebx,ebx
   0x7fffffffdbb9:  inc    ebx
   0x7fffffffdbbb:  xor    edx,edx
   0x7fffffffdbbd:  mov    dl,0xf
   0x7fffffffdbbf:  int    0x80
   0x7fffffffdbc1:  mov    al,0x1
   0x7fffffffdbc3:  dec    ebx
   0x7fffffffdbc5:  int    0x80
   0x7fffffffdbc7:  call   0x7fffffffdbb2
   0x7fffffffdbcc:  rex.W
   0x7fffffffdbcd:  gs ins BYTE PTR es:[rdi],dx
   0x7fffffffdbcf:  ins    BYTE PTR es:[rdi],dx
   0x7fffffffdbd0:  outs   dx,DWORD PTR ds:[rsi]
   0x7fffffffdbd1:  sub    al,0x1f
   0x7fffffffdbd3:  ja     0x7fffffffdc44
   0x7fffffffdbd5:  jb     0x7fffffffdc43

这是我实际运行漏洞利用时发生的事情

(gdb) nexti
0x00007fffffffdbc7 in ?? ()
(gdb) nexti
^C
Program received signal SIGINT, Interrupt.
0x00007fffffffdbc1 in ?? ()

程序挂起,我必须在将控制转移到完全随机的指令之前手动退出。

1 个答案:

答案 0 :(得分:1)

您需要使用64位系统调用。 32位系统调用不支持指向字符串的64位指针。