iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 15
0
Security

CTF30系列 第 15

CTF 10: 3NTERPRISE s0lution (Web, Teaser Dragon CTF 2018)

  • 分享至 

  • xImage
  •  

註解

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 框架寫的應用。這是一個可以註冊之後登入並寫筆記的應用。

登入時會發現登入有分兩段:

  1. 輸入帳號
  2. 輸入密碼 & Token

有趣的是,在 Token 輸入框旁邊會說,這功能尚未實作。
登入後可以新增筆記,會發現以下兩點。

  1. 讀取自己新增的筆記時,會有解密的動畫。這時瀏覽器背後用了非同步請求把解密 key 拿回來。這長度是 20byte。
  2. 會發現 筆記的 id 是有順序的 排列,因此可能可以試試讀取 ID 0 的筆記。

第二點提到的筆記,其實是 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


上一篇
CTF 9: Oh My Raddit v2 (Web/Crypto, HITCON CTF 2018)
下一篇
CTF 10: 3NTERPRISE s0lution (Web, Teaser Dragon CTF 2018)
系列文
CTF3030
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言