Challenge
Reverse the repeated Base64 cookie transformation.
逆向还原重复 Base64 编码的 Cookie。
https://webhacking.kr/challenge/web-06/Analysis
服务端先把 Cookie 中的数字替换为特殊字符,再连续 Base64 decode 20 次,只有还原出的 ID/PW 分别为 admin/nimda 时才调用 solve(6)。因此客户端要反向执行同一流程:对目标字符串各做 20 次 Base64 encode,再把 1 到 8 映射为服务端使用的特殊字符。
Solution
下面的脚本完整生成两个 Cookie,并通过 requests.Session 发送请求。没有写入 PHP session ID,服务器若需要会在首次请求时自动建立 session。
#!/usr/bin/env python3import base64import osimport sys
import requests
URL = os.environ.get( "OLD06_URL", "https://webhacking.kr/challenge/web-06/")DIGIT_REPLACEMENTS = str.maketrans({ "1": "!", "2": "@", "3": "$", "4": "^", "5": "&", "6": "*", "7": "(", "8": ")",})12 collapsed lines
def encode_cookie(value: str) -> str: encoded = value.encode("ascii") for _ in range(20): encoded = base64.b64encode(encoded) return encoded.decode("ascii").translate(DIGIT_REPLACEMENTS)
def main() -> int: cookies = { "user": encode_cookie("admin"), "password": encode_cookie("nimda"), } with requests.Session() as session: response = session.get(URL, cookies=cookies, timeout=10) response.raise_for_status() print(response.text) return 0
if __name__ == "__main__": sys.exit(main())Cookie 名称必须是 user 和 password,路径必须覆盖 /challenge/web-06/。脚本把数字替换放在最后,正好对应服务端先逆替换、再 decode 的顺序。