题目描述

速度要快!

Solution

打开页面,观察 Response Header:

1.png

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

2.png

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

3.png

我们把刚才那个值作为 POST 的参数发送给服务器,应该就能得到 Flag 了。试着写一段 Python 脚本来帮我们完成这项工作:

  1. import requests
  2. import base64
  3. url = 'http://114.67.175.224:19684/'
  4. headers = requests.get(url).headers
  5. key = base64.b64decode(headers['flag']).decode().split(':')[1]
  6. key = base64.b64decode(key)
  7. post = {'margin':key}
  8. print(requests.post(url, data=post).text)

运行结果如下:

4.png

这里没得到我们想要的结果,我们修改一下 Python 脚本,把 Request Headers 和 Response Headers 的所有信息打印出来,看看有什么玄机:

  1. import requests
  2. import base64
  3. url = 'http://114.67.175.224:19684/'
  4. get_resp = requests.get(url)
  5. print('GET Request Headers:\n', get_resp.request.headers, '\n')
  6. print('GET Response Headers:\n', get_resp.headers, '\n')
  7. key = base64.b64decode(get_resp.headers['flag']).decode().split(':')[1]
  8. key = base64.b64decode(key)
  9. post = {'margin':key}
  10. post_resp = requests.post(url, data=post)
  11. print('POST Request Headers:\n', post_resp.request.headers, '\n')
  12. print('POST Response Headers:\n', post_resp.headers, '\n')

5.png

我们发现,请求发送到服务器后,服务器会重新设置 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)

6.png

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