今天是四月十九,想在五月份之前把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. <C#任务导引教程>练习三

    /*Convert.ToInt("213165");int a=12345;string sn=a.ToString();//把a转换成字符串snint b=int.Parse(s ...

  2. [atAGC050E]Three Traffic Lights

    原题意可能略微有一些复杂,这里给出简述的题意-- 给定$g_{i}$和$r_{i}$(其中$1\le i\le 3$),求有多少个整数$t$满足: $0\le t< \prod_{i=1}^{3 ...

  3. [nowcoder5667K]Keyboard Free

    不妨设$r1\le r2\le r3$,令$f(\alpha)=E(S_{\Delta}ABC)$,其中AB坐标分别为$(r_{1},0)$和$(r_{2}\cos \alpha,r_{2}\sin ...

  4. vue 3 学习笔记 (六)——watch 、watchEffect 新用法

    选项式API与之前写法相同,本篇文章主要通过 Options API 和 Composition API 对比 watch 的使用方法,让您快速掌握 vue3 中 watch 新用法.建议收藏! 一. ...

  5. Python技法1:变长和定长序列拆分

    Python中的任何序列(可迭代的对象)都可以通过赋值操作进行拆分,包括但不限于元组.列表.字符串.文件.迭代器.生成器等. 元组拆分 元组拆分是最为常见的一种拆分,示例如下: p = (4, 5) ...

  6. Java开发最实用最好用的11个技术网站

    作为一个Java开发者,学习最新技术和关注行业内容是你不断提升自我的有效手段.因此,我会特别关注一些质量高口碑好的Java技术网站,在这里分享给大家. 1.Stackoverflow Stackove ...

  7. Python list的深拷贝和浅拷贝

    深拷贝和浅拷贝 列表存储数据,列表拷贝就是数据备份 浅拷贝 优点:占用内存较少 缺点:修改深层数据,会影响原数据 深拷贝 优点:修改数据,互不影响 缺点:占用内存较大 ""&quo ...

  8. 33. Implement strStr()

    http://blog.csdn.net/justdoithai/article/details/51287649 理解与分析 Implement strStr() My Submissions Qu ...

  9. 汇编LED实验

    汇编语言点亮LED 拿到一款全新的芯片,第一个要做的事情的就是驱动其 GPIO,控制其 GPIO 输出高低电平. GPIO口是IO口的一个功能之一. 一.接下来的步骤离不开芯片手册: 1.使能所有时钟 ...

  10. 使用Mybatis出现的问题+配置优化+ResultMap

    一.可能出现的问题 1.Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: ...