Skip to main content
vctf apples leak libc操作复现(高版本的overlapping)

vctf apples leak libc操作复现(高版本的overlapping)

题目中存在off_by_one libc版本2.34以上我们没办法使用常规的overlapping 泄露libc地址

所以我们要精心构造一个chunk head来绕过新版本的检查机制 实现leak libc的操作

文章中我们先讲原理 在最后会将Arahat0师傅的脚本给出来()

安全检查机制

  • 2.34下的合并检查机制

    • 检查size是否对得上
    image-20240325110240440
    image-20240325110240440
    • unlink检查

      image-20240325110339049
      image-20240325110339049

ElegyAbout 5 minpwnheap
House of lore学习

House of lore学习

主要是看着wiki 理解理解 然后自己看的glibc2.27的源码 抛开tcache部分

源码

这里是去除了不重要的tcache bin判断部分

if (in_smallbin_range (nb)){
      idx = smallbin_index (nb);
      bin = bin_at (av, idx);

      if ((victim = last (bin)) != bin)
      {
          bck = victim->bk;
          if (__glibc_unlikely (bck->fd != victim))
            malloc_printerr ("malloc(): smallbin double linked list corrupted");
          set_inuse_bit_at_offset (victim, nb);
          bin->bk = bck;
          bck->fd = bin;

          if (av != &main_arena)
	           set_non_main_arena (victim);
          check_malloced_chunk (av, victim, nb);
          void *p = chunk2mem (victim);
          alloc_perturb (p, bytes);
          return p;
      }
}

ElegyLess than 1 minutepwnheaphouse
记一次高版本glibc(2.34)下常规overlapping失败的原因(vctf 2024 apples)

记一次高版本glibc(2.34)下常规overlapping失败的原因(vctf 2024 apples)

昨天做vctf被打自闭了 由于对glibc高版本的保护不熟悉 第二题apples 连leak libc都没实现

这里记录一下为什么常规overlapping会失效

版本

  • glibc 2.34
  • off_by_one漏洞

读题

  • 首先是add user部分 存在off_by_one漏洞

    image-20240317100413787
    image-20240317100413787
  • delete部分无懈可击()

    img
    img

ElegyAbout 1 minpwnheap
large Bin Attack学习(_int_malloc源码细读 )

large Bin Attack学习(_int_malloc源码细读 )

参考文章:
wiki:Large Bin Attack - CTF Wiki (ctf-wiki.org)
源码级调试glibc:源码级调试glibc_glibc cannot be compiled without optimization-CSDN博客
源码分析:glibc 2.31 malloc与free 源码分析(持续更新) - PwnKi - 博客园 (cnblogs.com)+glibc malloc源码分析 - PwnKi - 博客园 (cnblogs.com)
详细拆分了_int_malloc的流程 并且按照功能分了标题 想要了解对应部分就直接点击标题跳转即可
第一次阅读glibc的源码然后进行分析 有错误的地方请大佬指正


ElegyAbout 15 minpwnheap
写一个计算chunk大小的程序

写一个计算chunk大小的程序

由于做题的时候老是脑子不够用 无法根据malloc(num)中的num获取chunk的size 所以我就决定自己写一个程序来完成这个工作并且好好理解一下怎么计算的

原理

  • 最小chunk为0x20

  • chunk一定是size_sz *2 的倍数(内存对齐)

  • chunk可以占用下一个chunkprev_size来存东西

  • 所以我们就是看是否malloc的大小 +size所占字节数 然后是否内存对齐 如果没有则加到对齐 然后 判断最后的size是否小于0x20 如果小于则直接等于0x20

    所以直接使用公式:(num + 8 +0xf)&~0xf; 其中num就是我们malloc传的参数


ElegyLess than 1 minutepwnheap
深入学习堆结构

深入学习堆结构

做hgame的时候 有点做不动heap的题 所以来学习一下基本功
学习文章:【pwn】学pwn日记(堆结构学习)(随缘更新)_pwn 堆特性-CSDN博客

堆管理器

  • 在linux中 堆管理器 由libc.so.6链接库实现

    • brk
    • mmap
  • brk函数

    • 申请小的内存空间 从heap下方的data段 向上申请内存
  • mmap函数

    • 一般申请较大的内存空间 从shared libraries里面开新的空间

    • 子线程只能用mmap函数


ElegyAbout 2 minpwnheap
NTUSTISC - Pwn 2学习笔记

NTUSTISC - Pwn 2学习笔记

查看glibc的源码网址:https://elixir.bootlin.com/glibc/glibc-2.23/source/malloc/malloc.c

TSL 了解

gdb 如何查 fs?

print (void)arch_prctl(option_num,addr)

ElegyAbout 3 minpwnheap
NTUSTISC-PWN3阅读笔记(1)

NTUSTISC-PWN3阅读笔记(1)

主要是看NTUSTISC

tcache dup

tcache在libc2.31里面引用了key检查 然后在malloc的时候没有检查size 其次tcache的fd指向的是chunk data

  • 会在free进入tcache后在bk位置写入随机数 用于检查
  • 当检查一样时候 会for循环迭代tcache查看是否有指针和这个即将free的chunk的指针一样
  • 如果一样提示double free

ElegyAbout 3 minpwnheap