Bugku-Web-秋名山老司机

考察内容: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多刷新几次

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Acorns01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值