how2heap-fastbin_dup.c

news/2024/6/18 21:34:49 标签: pwn

不同libc版本的fastbin_dup.c源码有点小区别:主要是有tcache的,需要先填充
以下为有tcache的源码示例:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int main()
{
	setbuf(stdout, NULL);

	printf("This file demonstrates a simple double-free attack with fastbins.\n");

	printf("Fill up tcache first.\n");
	void *ptrs[8];
	for (int i=0; i<8; i++) {
		ptrs[i] = malloc(8);
	}
	for (int i=0; i<7; i++) {
		free(ptrs[i]);
	}

	printf("Allocating 3 buffers.\n");
	int *a = calloc(1, 8);
	int *b = calloc(1, 8);
	int *c = calloc(1, 8);

	printf("1st calloc(1, 8): %p\n", a);
	printf("2nd calloc(1, 8): %p\n", b);
	printf("3rd calloc(1, 8): %p\n", c);

	printf("Freeing the first one...\n");
	free(a);

	printf("If we free %p again, things will crash because %p is at the top of the free list.\n", a, a);
	// free(a);

	printf("So, instead, we'll free %p.\n", b);
	free(b);

	printf("Now, we can free %p again, since it's not the head of the free list.\n", a);
	free(a);

	printf("Now the free list has [ %p, %p, %p ]. If we malloc 3 times, we'll get %p twice!\n", a, b, a, a);
	a = calloc(1, 8);
	b = calloc(1, 8);
	c = calloc(1, 8);
	printf("1st calloc(1, 8): %p\n", a);
	printf("2nd calloc(1, 8): %p\n", b);
	printf("3rd calloc(1, 8): %p\n", c);

	assert(a == c);
}

编译:
gcc -g fastbin_dup.c -o fastbin_dup

tcache[count]特点
count= 7
优先分配-用malloc(8)的大小即可free后占用

在这里插入图片描述7个tcache
在这里插入图片描述fastbin_dup注意事项:
头结点不能同时free两次。
在这里插入图片描述
释放b把头结点变成b,即可再次free(a):
在这里插入图片描述达成利用:
在这里插入图片描述执行结果:
在这里插入图片描述

fastbin_dup总结:
有tcache先malloc(8)*7,在free掉7个占满tcache;
double free的chunk不能是头结点,需要利用一个中间替换头结点;


http://www.niftyadmin.cn/n/319220.html

相关文章

双层优化入门(3)—基于智能优化算法的求解方法(附matlab代码)

前面两篇博客介绍了双层优化的基本原理和使用KKT条件求解双层优化的方法&#xff0c;以及使用yalmip工具箱求解双层优化的方法&#xff1a; 双层优化入门(1)—基本原理与求解方法 双层优化入门(2)—基于yalmip的双层优化求解(附matlab代码) 除了数学规划方法之外&#xff0c;…

无标签背景图(负样本)的拼图代码

训练目标检测模型有个很令人头疼的问题&#xff0c;就是有些特征与要训练的特征较为相似的背景区域也被误检出来&#xff08;作为本应不该检测出来的负样本却被误检出为正样本的FP&#xff09;。 根据这一问题的解决办法&#xff0c;除了可以对正样本特征较为模糊或者有歧义的样…

七天从零实现Web框架Gee - 3

之前&#xff0c;我们用了一个非常简单的map结构存储了路由表&#xff0c;使用map存储键值对&#xff0c;索引非常高效&#xff0c;但是有一个弊端&#xff0c;键值对的存储的方式&#xff0c;只能用来索引静态路由。那如果我们想支持类似于/hello/:name这样的动态路由怎么办呢…

Intel SGX学习笔记(2):用数组向Enclave传递5个数实现自增操作

写在前面 1、实现一个简单的Intel SGX的应用&#xff1a;非安全区定义初始化一个数组&#xff0c;数组里面存储5个数&#xff0c;然后向安全区&#xff08;enclave&#xff09;传入&#xff0c;在安全区中进行加减乘除&#xff0c;然后返回。 2、Intel SGX开发初学整体思路&a…

pyinstaller打包为.exe过程中的问题与解决方法

目录 问题一&#xff1a;.exe文件过大问题二&#xff1a;pyinstaller与opencv-python版本不兼容问题三&#xff1a;打开文件时提示***.pyd文件已存在问题四&#xff1a;pyinstaller打包时提示UPX is not available.另&#xff1a;查看CUDA成功配置的方法 pyinsatller -F -w mai…

这个抓包工具太强了,科来网络分析系统强烈推荐

一直以来抓包工具&#xff0c;都推荐和使用wireshark&#xff0c;简单好用。最近发现一款更强大好用的网络分析工具&#xff0c;科来网络分析系统。且技术交流版是完全免费的&#xff0c;无需注册激活。这里强烈推荐和分享给大家。这可是个网络报文分析和监控神器。有多强大&am…

使用Zookeeper对集群节点进行管理

1 相关概念 Zookeeper是Hadoop生态系统中分布式的服务管理框架&#xff0c;负责存储和管理集群中的公共数据如配置信息等&#xff0c;并且对节点进行注册和通知管理。它具有如下几个特点&#xff1a; 集群由一个领导者&#xff08;Leader&#xff09;&#xff0c;多个跟随者&a…

GitSVN区别及选型

1、结论先行 git更适用于纯代码仓库&#xff0c;优势在于分支管理svn则擅长于文件管理&#xff0c;优势在于目录级权限控制 2、版本管理发展历程 3、Git&SVN为何而生 Git出生于2005年&#xff0c;是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版…