题目描述
Solution
打开页面,观察 Response Header:
把这个 Flag 进行 base64 解码,得到一个结果:
这是什么玩意呢?我们查看 HTML 源码,发现一些有用的信息:
我们把刚才那个值作为 POST 的参数发送给服务器,应该就能得到 Flag 了。试着写一段 Python 脚本来帮我们完成这项工作:
import requests
import base64
url = 'http://114.67.175.224:19684/'
headers = requests.get(url).headers
key = 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 requests
import base64
url = '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
的值,让服务器误以为你的请求还在同一个会话中。