Dear all
Welcome to our new enterprise solution. You can leave your business notes here. Data is safe - cause we use strong encryption ! It is soooo safe, that even I am using this system. You even can audit the code here Plz DO NOT hax this - cause it is impossible !1111
Regards
Martin, the Webmaster
URL: http://solution.hackable.software:8080
這題若看了原碼(請看參考資料中的連結),會發現它是用 Flask 框架寫的應用。這是一個可以註冊之後登入並寫筆記的應用。
登入時會發現登入有分兩段:
有趣的是,在 Token 輸入框旁邊會說,這功能尚未實作。
登入後可以新增筆記,會發現以下兩點。
第二點提到的筆記,其實是 admin 新增的。但因為每個人用到的 key 不同,故我們解開會拿到一包垃圾。這個筆記有 105 bytes,然後我們的 key 是 20 bytes。
看源碼會發現:
def loginzone(func):
@functools.wraps(func)
def _wrapper(*a, **kw):
if flask.session.get(K_LOGGED_IN):
return func(*a, **kw)
else:
add_msg("Dude ! U R NOT logged in.")
do_logout()
return do_render()
return _wrapper
@app.route("/note/show/<idx>")
@loginzone
def do_note_show(idx):
note = sql_session.query(model.Notes).filter_by(id=idx).first()
# note = xor_note(note)
return do_render(view="noteshow.html", note=note)
因為 @logintask
只會檢查有沒有登入,所以可以讀別人的筆記。
故我們目前可以猜測目前的解題方向,是 用別人的賬號登入 或 讀別人的 key 其一。在下一篇中會提到我們要如何解下這題目。
CTFtime.org / Teaser Dragon CTF 2018 / 3NTERPRISE s0lution / Writeup
Teaser Dragon CTF 2018 – 3NTERPRISE – SIGINT