Note
  • Introduction
  • PWN
    • __libc_csu_init函数的通用gadget
    • _int_malloc源码分析
    • _IO_FILE利用思路总结
    • C++ 虚表分析
    • Fast_bin笔记
    • house_of_force
    • House_of_Roman
    • Linux_ShellCode
    • Return-to-dl-resolve原理及利用
    • Unlink利用原理
    • Unsorted_Bin_Attack
    • 获取libc方法
    • 利用main_arena泄露libc基址
    • 整数溢出
    • 重写.fini_array函数指针
    • Windows_SEH利用
  • Windows_Operating_System
    • Dll隐藏
    • Dll注入之远程线程注入
    • IAT_HOOK原理实现
    • Windows下通用ShellCode原理
    • 代码注入
    • inline_hook框架
    • 32位程序调用64位函数原理
    • 调试原理
    • Windows异常处理初探
    • Windows_SEH利用
  • Windows_Kernel
    • MSR_HOOK
    • SSDT_HOOK
  • Virus_Analysis
  • Program
    • Dll的生成与使用
  • Miscellaneous
    • ctf笔记
    • 常见算法特征总结
    • ELF文件笔记
  • Linux_Operating_System
    • 系统调用
    • 分页机制
    • 调试原理
    • linux无文件执行elf
    • egg hunter
    • 缺失的动态链接库
  • Linux_Kernel
    • KERNEL_PWN状态切换原理及KPTI绕过
  • IOT
    • IOT调试环境搭建
    • mips_arm汇编学习
    • Cisco RV160W系列路由器漏洞:从1day分析到0day挖掘
  • Symbolic_Execution
    • angr初探
    • angr_进阶
  • Fuzz
    • UAF_overflow_check
    • intel-pin
  • CVE
    • Cisco RV160W系列路由器漏洞:从1day分析到0day挖掘
  • Assembly
    • Junk_Code_Analysis
    • opcode
  • Andriod_Security
Powered by GitBook
On this page
  • aslr
  • 大致思路
  • 1 首先构造一个非fastbin chunk
  • 2 构造fastbin链,进行fastbin_attack
  • 3 进行UnsortedBin_attack
  • 4 编辑malloc_hook_chunk内容
  • 5 触发方式

Was this helpful?

  1. PWN

House_of_Roman

Previoushouse_of_forceNextLinux_ShellCode

Last updated 6 years ago

Was this helpful?

House of Roman 实现了开启PIE没有leak地址功能的程序的利用,这个技巧说简单点其实就是 fastbin attack 和 Unsortbin attachk 结合,还有严密的堆布局,我学习了一下,做个简单的分享与记录。

aslr

PIE和系统的aslr,对于一个32bit的binary,它的高20bit会被随机化的,而最后的12bit不会被随机化(64位同样),如果漏洞触发,我们能够恰好覆盖最后的12bit,实际上也能在一定的范围内劫持程序的控制流

大致思路

通过fastbin_attack控制malloc_hook地址空间,再通过Unsortedbin_attack将malloc_hook内容改写成main_arena+0x58,编辑malloc_hook地址空间内容的后几位,改成one_gadget,实现利用,但是这里通常有几bit需要爆破。

1 首先构造一个非fastbin chunk

暂且命名为chunk 0,释放掉它再重新分配它,这样就将它的mem空间填充了main_arena地址

再编辑该chunk,将fd指针的后8字节 覆盖成libc中 malloc_hook - 0x23偏移的后8字节,因为通常main_arean地址在__malloc_hook的下面不远处,算偏移一般都不会超过FF 无需进位。

所以这里编辑chunk 0的内容就为 \x1d覆盖后 chunk 0 的 fd 中的内容就刚刚好是malloc_hook - 0x23

还有必要利用Off-By-One将该chunk 0的size大小改成fastbin范围,最后的chunk 0如下:

2 构造fastbin链,进行fastbin_attack

构造如图:

连续三次分配0x70大小的chunk之后,我们就能分配得到malloc_hook_chunk,便可以随意往malloc_hook写东西 ( 注意:该操作结束之后要修复 fastbin链表 )

3 进行UnsortedBin_attack

修改malloc_hook为main_arena+0x58

4 编辑malloc_hook_chunk内容

将main_arena覆盖成one_gadget.这里由于onegadget在代码段,在libc中代码段的偏移量通常比数据段的malloc_hook少4bit,他们实际地址相差甚远,所以就给覆盖造成了困难,在我本地测试的环境中: 比如main_arena+0x58 的地址是 0x7fffffxxx123 ,one_gadget的偏移是 0xe9456 ,由于后12bit未被随机化,所以 main_arena+0x58 肯定是被覆盖为 0x7fffffxxx456,但xxx这三位在我本机环境就不一样了,需要爆破xxx这12bit,才能找到正确的one_gadget地址。

5 触发方式

根据调用execve时的rsp指向微调,直接malloc触发或者double free 抛出malloc_printerr触发

相关链接

House of Roman 实战-hac425
House of Roman-ctf-wiki