考察内容:http协议,Session会话控制
解题思路:
进入题目发现要你在2s内计算老司机的车速是多少 ,查看源码也没发现什么
于是多刷新几下,发现每次的计算的算式都不一样,于是又刷新了几下,果然出现了提示,应该是让我们用post方法,参数为value
想到这里,让我用两秒钟计算如此大的数据,手工应该是不可能,且又提示让用post方法,这里只能写Python脚本来完成。
# 导入 requests 包
import requests
url = "http://114.67.175.224:15943/" # 指定自己的URL
x = requests.get(url)
# print(x.content.decode())
value = eval( x.content.decode().split("<div>")[1].split("=")[0])
data = {value:"value"}
flag = requests.post(url,data=data)
print(flag.content.decode())
代码第6行解释:
value = eval( x.content.decode().split("<div>")[1].split("=")[0])
因为有中文所以用x.content.decode(),防止乱码
第一步先以<div>为分隔符进行切片,取出第2行
第二步以“=”为分隔符进行切片,取出第1行
第三步用eval函数即可得出结果
错误原因分析:
但是还是没有得出flag来,于是想到可能是会话控制的原因,因为发送了两次请求,HTTP是无状态的协议,无状态是指一次HTTP请求结束之后,连接断开,下次服务器再收到请求,它就不知道这个请求是哪个用户发过来的,所以HTTP协议没有记忆功能。
如果需要向网站连续发送多次数据,并且这些数据之间还具有关联性,那么就要设法将这些连接都归为同一个会话,这就要用到Session()类。
编写脚本:
import requests
s = requests.Session()
url = "http://114.67.175.224:15943/" # 指定自己的URL
x = s.get(url)
value = eval(x.content.decode().split("<div>")[1].split("=")[0])
data = {value:"value"}
flag = s.post(url,data=data)
print(flag.content.decode())
注:如果得不出flag多刷新几次