WP021——CTF赛题解析-脚本2

65 阅读2分钟

时效性

2025年8月8日

题目来源

速度要快 - Bugku CTF平台

题目描述

image.png

image.png

Write UP

此类的题目就是需要进行脚本的编写,使用脚本从响应包中获取内容进行处理

image.png 该题需要进行二次Base64解码

import requests
import base64
import re
 
s = requests.session()
url = "http://117.72.52.127:12762/"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'
}
 
try:
    # 发送 GET 请求并获取响应头部
    response = s.get(url, headers=headers)
    response.raise_for_status()  # 检查请求是否成功
    head = response.headers
    print("响应头部信息:", head)
 
    # 检查头部是否包含 flag 字段
    if 'flag' not in head:
        print("响应头部中未找到 flag 字段。")
    else:
        result = head['flag']
        print("初始获取的 flag 内容:", result)
 
        # 第一次 Base64 解码
        try:
            if isinstance(result, str):
                result = result.encode('utf-8')
            result = base64.b64decode(result).decode('utf-8')
            print("第一次 Base64 解码后的结果:", result)
        except base64.binascii.Error:
            print("第一次 Base64 解码失败,请检查编码内容。")
            raise
 
        # 正则表达式匹配
        match = re.search(r"给你flag吧: (\w+)", result)
        if not match:
            print("正则表达式匹配失败,请检查匹配规则。")
        else:
            result = match.group(1)
            print("正则匹配后的结果:", result)
 
            # 第二次 Base64 解码(这里不确定是否需要第二次解码,先保留逻辑)
            try:
                if isinstance(result, str):
                    result = result.encode('utf-8')
                result = base64.b64decode(result).decode('utf-8')
                print("第二次 Base64 解码后的结果:", result)
            except base64.binascii.Error:
                print("第二次 Base64 解码失败,请检查编码内容。")
                raise
 
            # 发送 POST 请求
            payload = {'margin': result}
            post_response = s.post(url, data=payload, headers=headers)
            post_response.raise_for_status()  # 检查 POST 请求是否成功
            print("POST 请求响应内容:", post_response.text)
 
except requests.exceptions.RequestException as e:
    print(f"请求过程中出现网络异常: {e}")
except KeyError:
    print("响应头部解析出现问题,请检查头部字段。")
except base64.binascii.Error:
    print("Base64 解码出现问题,请检查编码内容。")
except re.error:
    print("正则表达式出现错误,请检查匹配规则。")
except AttributeError:
    print("正则匹配未找到结果,请调整匹配规则。")