VCTF apple 复现(apple的通用模板)

VCTF apple 复现(apple的通用模板)

ElegyYuan0x1 看雪学苑 2024-05-28 17:59

本文参考的是Arahat0师傅(https://passport.kanxue.com/user-center-964693.htm)的脚本,这里主要介绍一下vctf apple的house of apple部分的思路。与常规的house of apple不同,这里将_wide_data指向劫持的FILE结构体加减偏移,来让脚本更加可以移植,最后实现栈迁移打ROP链的操作。

前情提要:要结合上一篇文章:vctf apples leak libc操作复现(https://bbs.kanxue.com/thread-281083.htm)来观看。在上一篇文章中我们通过较为复杂的overlapping实现了heap和libc的泄露,接下来我们通过劫持结构体来实现一次House of apple2的变形。

条件

◆泄露libc地址和堆地址

◆能劫持stdout
结构体实现对stdout
结构体的覆写

◆能触发puts函数

属性的偏移

各大结构体

建议和上面的偏移结合起来看 还是比较详细的

exp中伪造

先这里给出exp中伪造的stdout
结构体 方便我们后面分析

动调

目的:通过puts函数触发_IO_wfile_overflow
函数来调用_IO_wdoallocbuf
函数。

正常的调用链

为了搞清楚劫持原理 这里我们分析puts函数的源码

◆puts中调用_IO_file_xsputn
(stdout->vatble(0xd8)->_IO_file_xsputn(0x38))


– r14此时为 也就是_IO_file_jumps+0x38的位置

  • 而r14是通过mov r14, [rdi+0D8h]取出来的 rdi为_IO_2_1_stdout_ 根据0xd8偏移可以知道是vatble属性

◆然后调用_IO_file_overflow

◆然后走向_IO_do_write

_IO_wfile_jumps结构体

所以要调用_IO_wfile_overflow
则需要vatble+0x38位置为_IO_wfile_jumps
+24 所以这里控制vtable为_IO_wfile_jumps
-0x20

_IO_wfile_overflow函数

我们最终是想要调用_IO_wdoallocbuf
函数

◆所以我们需要满足条件:
– f->_flags & _IO_NO_WRITES为0

  • (f->_flags & _IO_CURRENTLY_PUTTING) == 0

  • 也就是_flags位置为0

  • f->_wide_data(0xa0)->_IO_write_base(0x20) == 0

_IO_wdoallocbuf函数

◆这里我们要执行_IO_WDOALLOCATE
从而调用我们伪造的函数 所以我们这里需要过掉保护fp->_wide_data->_IO_buf_base
和!(fp->_flags & _IO_UNBUFFERED)

也就是_wide_data(0xa0)的_IO_buf_base(0x38)偏移位置要为0。

触发_IO_WDOALLOCATE(fp)

这里等效为: *(fp->_wide_data(0xa0)->_wide_vtable(0xe0) + 0x68)(fp)

◆所以最终就成功调用leave retn指令

栈迁移

◆我们先看汇编代码:

◆可以看见这里把rdi
赋值给了rbx
而根据前面代码可以知道rdi是_io_wdoallocbuf
的参数 也就是fp也就是_IO_2_1_stdout_。

◆那么回顾我们前面的payload:

FILE.flags = 0
FILE._IO_read_ptr = pop_rbp
FILE._IO_read_end = heap_addr + 0x470 - 8
FILE._IO_read_base = leave_ret

◆然后我们pop_rbp
让rbp
变成我们存放payload的chunk内容然后再通过leave ret让rsp也移动到我们的chunk上 实现栈迁移 然后我们就可以愉快打rop链了

看雪ID:ElegyYuan0x1

https://bbs.kanxue.com/user-home-994584.htm

*本文为看雪论坛优秀文章,由 ElegyYuan0x1 原创,转载请注明来自看雪社区

# 往期推荐

1、unidbg入门笔记

2、Frida 过检测通用思路之一

3、CVE-2017-11882分析和白象样本分析

4、记录一次鹅厂反作弊绕过之利用回调完成异常派遣的提前接收

5、H&NCTF RE 部分题解

球分享

球点赞

球在看

点击阅读原文查看更多