时效性
2025年8月8日
题目来源
题目描述
Write UP
此类的题目就是需要进行脚本的编写,使用脚本从响应包中获取内容进行处理
该题需要进行二次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("正则匹配未找到结果,请调整匹配规则。")