# [CH] Blank Site 2 ###### tags: `Writeup` `Web` `Chinese` > [name=Curious] ## 思路 承接上一題的 [Writeup](https://hackmd.io/@LoTuX-CTF/Blank_Site_1_CH),在下載 `app.py` 之後可以看到這樣一段程式碼 ```python= @app.get('/1d538e83d6f6b08f') def secret(): try: with open('/proc/sys/kernel/random/boot_id') as f: hint = f.readline().strip() except: hint = "" return {"FLAG1": "LoTuX{???}", "Hint": hint} ``` 也就是說我們可以透過訪問 `/1d538e83d6f6b08f` 來得到 `/proc/sys/kernel/random/boot_id` 的值 再分析其他部份的程式碼,可以發現 `app.py` 是有開啟 debug mode 的,所以可以嘗試看看可不可以利用 debug mode 做到 RCE 之類的操作 ## 解法 首先可以參考 [這篇 blog](https://curious-lucifer.github.io/post/note-flask_debug_mode/),從 blog 中知道我們可以透過知道我們需要 使用者名稱、server 的 Mac address、`/etc/machine-id` 或 `/proc/sys/kernel/random/boot_id`、`open("/proc/self/cgroup", "rb").readline().strip().rpartition(b"/")[2]` 來算出 PIN 或 cookie name/value 首先使用者名稱可以透過下載 `../../../../etc/passwd` 發現使用者叫 `blanksiteuser`。而因為通常 CTFd 架設環境會用 Docker,所以可以透過 Docker Container 的特性,知道 `/etc/machine-id` 和 `open("/proc/self/cgroup", "rb").readline().strip().rpartition(b"/")[2]` 沒有值,且 Mac address 會固定從 `02:42:ac:11:00:02` 然後最後一 bytes 開始遞增。 所以我們可以夠過已知的訊息,然後暴力窮舉 Mac address,計算出來的 cookie name/value,然後拿去測試看看是不是對的,如果是對的那就可以直接透過 python RCE。 {%hackmd M1bgOPoiQbmM0JRHWaYA1g %}
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up