题目描述
Solution
打开页面,观察 Response Header:

把这个 Flag 进行 base64 解码,得到一个结果:

这是什么玩意呢?我们查看 HTML 源码,发现一些有用的信息:

我们把刚才那个值作为 POST 的参数发送给服务器,应该就能得到 Flag 了。试着写一段 Python 脚本来帮我们完成这项工作:
import requestsimport base64url = 'http://114.67.175.224:19684/'headers = requests.get(url).headerskey = base64.b64decode(headers['flag']).decode().split(':')[1]key = base64.b64decode(key)post = {'margin':key}print(requests.post(url, data=post).text)
运行结果如下:

这里没得到我们想要的结果,我们修改一下 Python 脚本,把 Request Headers 和 Response Headers 的所有信息打印出来,看看有什么玄机:
import requestsimport base64url = 'http://114.67.175.224:19684/'get_resp = requests.get(url)print('GET Request Headers:\n', get_resp.request.headers, '\n')print('GET Response Headers:\n', get_resp.headers, '\n')key = base64.b64decode(get_resp.headers['flag']).decode().split(':')[1]key = base64.b64decode(key)post = {'margin':key}post_resp = requests.post(url, data=post)print('POST Request Headers:\n', post_resp.request.headers, '\n')print('POST Response Headers:\n', post_resp.headers, '\n')

我们发现,请求发送到服务器后,服务器会重新设置 Cookie,这样会导致 Flag 的值发生变化。
我们可以引入会话对象Session()来解决这个问题,修改 Python 脚本:
import requests
import base64
url = 'http://114.67.175.224:19684/'
session = requests.Session()
headers = session.get(url).headers
key = base64.b64decode(headers['flag']).decode().split(':')[1]
key = base64.b64decode(key)
post_data = {'margin':key}
print(session.post(url, data=post_data).text)

当然,如果不用会话对象,我们可以手动修改Set-Cookie的值,让服务器误以为你的请求还在同一个会话中。
