今天是四月十九,想在五月份之前把how2heap中的高版本(2.31)的例子过一遍。所以这个系列目前还是在更新中。如果比较简单就几句话带过了,遇到难一点的会写的详细一点。

fastbin_dup

源代码:

 1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <assert.h>
4
5 int main()
6 {
7 setbuf(stdout, NULL);
8
9 printf("This file demonstrates a simple double-free attack with fastbins.\n");
10
11 printf("Fill up tcache first.\n");
12 void *ptrs[8];
13 for (int i=0; i<8; i++) {
14 ptrs[i] = malloc(8);
15 }
16 for (int i=0; i<7; i++) {
17 free(ptrs[i]);
18 }
19
20 printf("Allocating 3 buffers.\n");
21 int *a = calloc(1, 8);
22 int *b = calloc(1, 8);
23 int *c = calloc(1, 8);
24
25 printf("1st calloc(1, 8): %p\n", a);
26 printf("2nd calloc(1, 8): %p\n", b);
27 printf("3rd calloc(1, 8): %p\n", c);
28
29 printf("Freeing the first one...\n");
30 free(a);
31
32 printf("If we free %p again, things will crash because %p is at the top of the free list.\n", a, a);
33 // free(a);
34
35 printf("So, instead, we'll free %p.\n", b);
36 free(b);
37
38 printf("Now, we can free %p again, since it's not the head of the free list.\n", a);
39 free(a);
40
41 printf("Now the free list has [ %p, %p, %p ]. If we malloc 3 times, we'll get %p twice!\n", a, b, a, a);
42 a = calloc(1, 8);
43 b = calloc(1, 8);
44 c = calloc(1, 8);
45 printf("1st calloc(1, 8): %p\n", a);
46 printf("2nd calloc(1, 8): %p\n", b);
47 printf("3rd calloc(1, 8): %p\n", c);
48
49 assert(a == c);
50 }

总结:

  1.使用calloc申请chunk,并不会从tcache中拿chunk。

  2.如果存在uaf漏洞,可以先将tcache填充满,再利用free(a),free(b),free(a)的操作实现double free,实现任意写。

how2heap libc2.31学习的更多相关文章

  1. C++学习准则

    C++学习准则  1.把C++当成一门新的语言学习(和C没啥关系!真的): 2.看<Thinking In C++>,不要看<C++变成死相>(C++编程思想,翻译的非常差): ...

  2. 警惕自己,不断学习c++【转】

    每天早上起床看一遍,时刻警惕自己,每天至少要浏览http://www.cplusplus.com 1.把C++当成一门新的语言学习(和C没啥关系!真的.):2.看<Thinking In C++ ...

  3. 高手C++学习忠告~~[转载]

    1.把C++当成一门新的语言学习(和C没啥关系!真的.): 2.看<Thinking In C++>,不要看<C++变成死相>: 3.看<The C++ Programm ...

  4. 【转载】学习C++和编程的几个要点

    1.把C++当成一门新的语言学习(和C没啥关系!真的.):2.看<ThinkingIn C++>,不要看<C++变成死相>:3.看<The C++ Programming ...

  5. C++学习 (转)

    1.把C++当成一门新的语言学习: 2.看<Thinking In C++>: 3.看<The C++ Programming Language>和<Inside The ...

  6. [转]C++学习心得

    1.把C++当成一门新的语言学习: 2.看<Thinking In C++>: 3.看<The C++ Programming Language>和<Inside The ...

  7. 学习C++语言的50条忠告

    50条忠告:(其中有几条觉得写的不够贴切,所以删了,发了余下的部分) 1.把C++当成一门新的语言学习: 2.看<Thinking In C++>,不要看<C++变成死相>: ...

  8. 学习c++语言应该牢记的50条准则,同样学习其他语言也一样

    1.把C++当成一门新的语言学习(和C没啥关系!真的.): 2.看<Thinking In C++>,不要看<C++变成死相>: 3.看<The C++ Programm ...

  9. 初学者学习C++的50条忠告

    1.把C++当成一门新的语言学习(和C没啥关系!真的.); 2.看<Thinking In C++>,不要看<C++变成死相>; 3.看<The C++ Programm ...

随机推荐

  1. kali 安装typora

    一.安装 官网下载文件解压,并移动到 /opt 文件夹下 二.赋权 在typora目录的bin文件夹下执行命令 ./typora 会报错[7442:0707/173355.682906:FATAL:s ...

  2. [cf1479D]Odd Mineral Resource

    先考虑判定是否有解,注意到无解即每一个数都出现偶数次,根据异或的性质,只需要随机$V_{i}$,假设$u$到$v$路径上所有节点构成集合$S$,若$\bigoplus_{x\in S,l\le a_{ ...

  3. [hiho1952]运算数

    可以发现如果将根的结果写成多项式,可以发现只需要预处理出f[i][j]表示以i为根的子树j次项有多少个,g[i]表示从n个数中选取i个数相乘的和,就可以通过\sum_{i=1}^{n}f[1][i]\ ...

  4. HouseRobber

    // // Created by Administrator on 2021/7/27. // #ifndef C__TEST01_HOUSEROBBER_HPP #define C__TEST01_ ...

  5. mybatis一对多查询resultMap只返回了一条记录

    问题描述:因为领导的一个需求,需要用到使用resultMap,很久没使用了,结果就除了点意外.就记录下这个问题 准备两个类:author(作者)和book(书),数据库创建对应的author-> ...

  6. Orika - 类复制工具

    Orika 前言 类复制工具有很多,比较常用的有 mapstruct.Spring BeanUtils.Apache BeanUtils.dozer 等,目前我所在的项目组中使用的是 mapstruc ...

  7. CF1264D2 Beautiful Bracket Sequence (hard version)

    考虑\(D1\)的\(O(n^2)\),我们直接进行组合处理. 考虑在\(p\)这个位置,左边有\(l\)个(,右边有\(r\)个),左边有\(l\)个问号,右边有\(r\)个问号. 这个位置的贡献为 ...

  8. plyr包使用

    #-------------------------------- # plyr包使用# 建议直接保存为R文件到Rstudio中运行 #-------------------------------- ...

  9. 利用vcftools比较两个vcf文件

    因为最近有一项工作是比较填充准确性的,中间有用到vcftools比较两个vcf文件. 使用命令也很简单: 1 vcftools --vcf file1.snp.vcf --diff file2.snp ...

  10. 出现NoClassDefFoundError,始终无法引入jar的解决

    在拉取代码后,项目的部分版本与本地存在的不一定一致,所以IDEA会自动下载并引入,但是在启动时可能存在java.lang.NoClassDefFoundError这个报错 比如引入marshallin ...