QAS
回答对哈希 0x555 对应的值即可获得flag
exp
1 | #!/usr/bin/env python |
do re mi

题目功能
标准菜单题
add: malloc(128)
dele: 未清零指针导致 uaf
利用思路
题目使用 mimalloc
参考资料:https://bbs.kanxue.com/thread-278279.htm
mimalloc TLDR
mimalloc 从大到小的内存结构为 segment > page > block
第一个 page 的 page->free 会初始化为指向 有 0x20 个空闲 block 的单链表
释放内存时会把 block 插入 page->local_free 链表头部
分配内存时会优先从 page->free 中取,如果取尽则将 page->local_free 移到 page->free,然后从 page->free 中取,过程没有合法性检查
释放了的内存块的 +0 偏移为 next 指针,指向下一个释放的内存块
page 中存在指向 _mi_heap_main 的指针
流程
- 分配并释放一个block
- 读取 释放的 block,泄露 next 指针,从而获得 heap base
- uaf 篡改 next 指针为 _mi_heap_main 指针 - 0x8 处 (因为要让 fake block 的 next 指针为 0,方便后续继续利用)
- 耗尽
page->free,分配到 _mi_heap_main 指针 - 0x8,泄露出 mimalloc base 和与之相邻的 ld_base - uaf 篡改 next 指针到 musl ld 的 stdout,篡改
stdout->write为 system - puts 触发
system("/bin/sh")
exp
1 | #!/usr/bin/env python |
baby kernel
题目功能
标准菜单内核堆
add: 允许分配任意大小
dele: 未清零指针造成 uaf
利用思路
- 分配 0x2e0 并释放,创建 tty_struct 到 释放的堆块
- 打印堆块泄露 kernel base
- 篡改 tty_struct->ops 到 fake ops,构造 rop
- rop 链先
commit_creds(&init_cred)获得 root,然后swapgs iret返回到 用户态的函数 - 用户态函数调用 /bin/sh 获得 root shell
exp
1 |
|