【BUUCTF】[GXYCTF2019]StrongestMind

思考
这道题按着题目的提示做就可以了,计算一千次。
在写脚本之前,一定要完全理解页面的请求过程。第一次发送get请求,计算get请求的返回数据,post发送计算结果。
post请求后,系统会自动返回带有数字的数据,类似在post发送结果以后又执行了一次get请求。因此,我们在写代码的时候不要再次get请求。
知识点
  • 保持请求是同一个会话用session
  • re.encoding=“UTF-8”,解决返回的值为乱码
  • eval计算一个表达式
payload
import requests,time,re

url = "http://41b70e7c-b4ff-484d-9f46-63deff56ca39.node4.buuoj.cn:81/index.php"
req = requests.session()    #保持会话
getRe = req.get(url)    #get请求
getRe.encoding = "UTF-8"    #将返回的结果用UTF-8编码,不然会返回乱码
reContent = re.findall("[0-9]* [-+*/] [0-9]*",getRe.text)   #提取表达式。math和search正则只会匹配一次,findall会一直匹配
formula = ''.join(reContent).replace(" ", "")   #提取表达式
comResult = eval(formula)   #eval执行一个表达式
print(comResult)    
data = {"answer":comResult}
postRe = req.post(url,data)
postRe.encoding = "UTF-8"
print(postRe.text)

for i in range(1005):   #多运行几次,避免其中的请求失败
    reContent = re.findall("[0-9]* [-+*/] [0-9]*",postRe.text)
    formula = ''.join(reContent).replace(" ", "")
    comResult = eval(formula)
    print(comResult)
    data = {"answer":comResult}
    postRe = req.post(url,data)
    postRe.encoding = "UTF-8"
    time.sleep(0.1)		#请求太快会被禁掉
    print(postRe.text) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值