iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
0
Security

點錯遊戲的我也只好硬著頭皮上了 系列 第 25

[網頁漏洞] 資料庫漏洞 - 特殊口味的綿花糖

  • 分享至 

  • xImage
  •  

這個延伸題的 HINT 一模一樣沒用處,難度高的題目想投降都沒 Walkthrough 可點擊啊...


14. Empire2- Points: 450

Well done, Agent 513! Our sources say Evil Empire Co is passing secrets around when you log in: https://2019shell1.picoctf.com/problem/8675/ (link), can you help us find it? or http://2019shell1.picoctf.com:8675
探員513,幹得好! 根據我方消息指出,當你登入網站時邪惡帝國公司就會傳遞出秘密了,你能幫我們找出來嗎? 網址在 https://2019shell1.picoctf.com/problem/8675/ (link)或是 http://2019shell1.picoctf.com:8675

https://ithelp.ithome.com.tw/upload/images/20201009/20103688Ne7aq2j8Hm.png

HINT:

Pay attention to the feedback you get
There is very limited filtering in place - this to stop you from breaking the challenge for yourself, not for you to bypass.
The database gets reverted every 2 hours if you do break it, just come back later

WRITEUP:

按照上次 ##10. Empire1 題目的注入法輸入的話

' || (  SELECT tbl_name FROM sqlite_master WHERE type='table' and tbl_name NOT like 'sqlite_%' limit 1 offset 0 ) || '

直接被正確輸入到項目中...
一口氣全部輸入特殊符號 `~!@#$%^&*()_}{":?>< 也是照輸出,沒輒。

如果題目給的是提示的話,flag 應該藏在自己建立帳號中的secret 欄位?
那麼回頭來查看之前的題目,丟出 table 看看有沒有什麼頭緖
https://ithelp.ithome.com.tw/upload/images/20201110/20103688wZThKtuCuJ.png

依照這些欄位查詢欄位的實際資料,是否有使用者為 admin

'|| ( SELECT admin FROM user LIMIT 1 OFFSET 0 ) || '
Very Urgent: 0
Very Urgent: 0

失敗...

查詢密碼

'|| ( SELECT password_hash FROM user LIMIT 1 OFFSET 0 ) || '
Very Urgent: deadbeef
Very Urgent: deadbeef
Very Urgent: pbkdf2:sha256:150000$kPyJo4Iy$27978e30d768b45678f29f2ae3dc5dd385d062a94182fe9a21eee501a0721be8

預設的兩位使用者居然是奇怪的文字”deadbeef”,不過自行建立的使用者倒是正常,是加密過後的資料。看來過去的題目一點幫助都沒有...

p.s. deadbeef 代表的意思
p.s2. 這裡其實是有幫助的,加密的格式暗示了後端使用的程式語言及框架!

回到原來的題目再看看 token:
session 與前幾題一樣,在登入前很正常,而且可以使用jwt.io 解出來

{
  "csrf_token": "424d9e115aa1fe13740e3e0892d751824d99af2e"
}

但是呢,登入後就是個帶 “.” 無法解出來的 jwt

其他過程出現的 cookie 更是無法了解
csrftoken:

IjUyYTFmZmYyMjFmYmE5NTQ4YWE2YjZiYjEyMGU5NmIzNzhkNGFlN2Ui.X41DxQ.C7dkemh55Q2AJ-cU8VI2WW4PZnc

remember_token

3|28e887b730113245e9f7a67471bcdebe7f619ba7f1ed7bb57f3038e618d5fc064931338c15766e86711fe2f9802f5a081040426d24cfd9db3450f3d3c9ea0ddd


至此...放棄!偷看網路上的答案
一看到 python flask 的字眼有點遺憾,這是當初在查詢使用者密碼時,加密資料有透露出來的 flask 特殊加密啊!

知道關鍵字後馬上 google “python flask injectio”,得知 flask 這個模版有特殊的語法,使用”{{}}” 包覆資料,先嘗試輸入 {{ 7*7 }} 果然查詢出來是 49。
接著再查詢 flask 本身的一些預設參數,過程中如果有錯誤的話會顯示:
https://ithelp.ithome.com.tw/upload/images/20201110/20103688uOmh0KwhQn.png

這時候要記得重新註冊一個使用者,否則接下來的 {{}} 語法都會無法成功!

試到 {{config.items()}} 參數時可成功提取資訊:
https://ithelp.ithome.com.tw/upload/images/20201110/20103688tBuecfX2P0.png
可以看到其中的 secret key 提示 picoCTF{your_flag_is_in_another_castle12345678},可惜,還差一步!

改查詢別的關鍵字 google “python flask decode session”,發現原來以為”.” 開頭無法解碼的 session ,居然有線上 flask 解碼器
https://ithelp.ithome.com.tw/upload/images/20201110/20103688x4pOADGa0f.png
丟上去之後即可得到正確的答案。

後記: 網站上的解答有提到本題”正確”的解法更為複雜一點,應該是用一開始得到的錯誤 token 當做 secret key 再去解出 session。
另外本題更簡單的解題是直接輸入 {{session}} 就能直接解碼了!

ANSWER:

picoCTF{its_a_me_your_flag89d6ce82}


上一篇
[網頁漏洞] Javascript - 修正圖檔
下一篇
[網頁漏洞] - 資料庫漏洞 - 世界上最好的語言
系列文
點錯遊戲的我也只好硬著頭皮上了 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言