秋名山老司机
进来之后会发现让算一个非常复杂的算式,刷新几遍后会发现
让以post方式传一个值,查看源码以后也没有什么收获,所以百度了一下是叫快速反弹post请求
快速反弹post请求:在 HTTP 响应头获取了一段有效期很短的 key 值后,需要将经过处理后的 key 值快速 POST 给服务器,若 key 值还在有效期内,则服务器返回最终的 flag。
解决这类方法一般会写python脚本,先学一下requests:
GET和POST区别:请求参数的话,get和post是不同的,get是params,直接接在url后面,而post是传递data。
#发送post请求和get请求
r = requests.get("http://httpbin.org/get")
r = requests.post("http://httpbin.org/post")
#查看请求头
r = requests.get('http://httpbin.org/get')
print(r.request.headers)
{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.24.0'}
#查看响应头
r = requests.get('http://httpbin.org/get')
print(r.headers)
{'Content-Length': '305', 'Server': 'gunicorn/19.9.0', 'Connection': 'keep-alive', 'Access-Control-Allow-Credentials': 'true', 'Date': 'Mon, 22 Jun 2020 10:41:23 GMT', 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json'}
#查看响应内容
r = requests.get('http://httpbin.org/get')
print(r.text)
#传递GET请求参数
#GET 请求参数作为查询字符串附加在 URL 末尾,可以通过 requests.get() 方法中的 params 参数完成。
data = {"hello":"world"}
r = requests.get('http://httpbin.org/get',params=data)
print(r.url)
http://httpbin.org/get?hello=world
#传递POST请求参数
#POST 请求参数以表单数据的形式传递,可以通过 requests.post() 方法中的 data 参数完成,具体代码如下:
data = {"hello":"world"}
r = requests.post('http://httpbin.org/post',data=data)
print(r.text)
cookie和session
Session 是存储在服务器上的相关用户信息,用于在有效期内保持客户端与服务器之间的状态。Session 与 Cookie 配合使用,当 Session 或 Cookie 失效时,客户端与服务器之间的状态也随之失效。
#传递Cookie参数(post和get都可以)
data = {"userid":"123456"}
r = requests.post('http://httpbin.org/post',cookies = data)
print(r.request.headers)
#建立session对象
s = requests.session()
r = s.get("http://httpbin.org/get")
正则表达式:
search() 的第一个参数是匹配的正则表达式,第二个参数是要匹配的字符串。其中 \d+代表一个或多个数字;[+\-*] 匹配一个加号,或一个减号,或一个乘号,注意减号在中括号内是特殊字符,要用反斜杠转义;(\d+[+\-*])+代表一个或多个由数字与运算符组成的匹配组;最后再加上剩下的一个数字 (\d+)。
正则表达式中,group()用来提出分组截获的字符串**,()用来分组**
写脚本如下为:
import requests
import re
url = 'http://123.206.87.240:8002/qiumingshan/'
s = requests.Session()
source = s.get(url)
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()
result = eval(expression)
data = {'value': result}
r = s.post(url, data=data)
print(r.text)
得到flag。