题目描述

秋名山车神

Solution

打开页面,按右键 View Page Source 查看源代码:

1.png

题目要求在 2 秒内计算一个复杂的表达式。我们多次刷新,观察到表达式会变化,突然:

2.png

我们按照题目要求用 POST 请求,发送value参数给服务器。我们先编写一个简单 Python 代码来观察 Response Headers:

  1. import requests
  2. url = 'http://114.67.175.224:15421/'
  3. resp = requests.get(url)
  4. print(resp.headers)

3.png

可以发现每次响应服务器都会重新设置 Cookie,所以我们后续编写脚本要用session()对象把请求控制在同一个会话中。

我们开始编写正式的解题脚本:

  1. import requests
  2. import re
  3. url = 'http://114.67.175.224:15421/'
  4. session = requests.session()
  5. resp = session.get(url)
  6. expression = re.search(r'(\d+[+\-*])+(\d+)', resp.text).group()
  7. value = eval(expression)
  8. print(value)
  9. post_data = {'value':value}
  10. print(session.post(url, data=post_data).text)

我们引用了正则表达式的search()方法来匹配算术表达式,如果匹配成功它返回一个Match对象,否则是 NULL 对象。正则表达式如果不熟悉,可查阅Python RegEx Cheatsheet

多次执行脚本,有概率获得 Flag:

4.png