一、问题描述
打开题目之后,要求3秒之内计算一个式子,我们过三秒再刷新发现式子就发生了变化,这道题手算是不太可能了,考虑别的方法。
二、解决问题
使用python解决问题的大概思路如下:
(1)先创建一个session对象。(因为计算出结果后需要再次发送数据,而session对象可以保留会话,第二次发送时带上第一次时的消息头)
s = requests.Session()
(2)使用session对象访问题目地址,并从中提取出需要计算的表达式。
r = s.get('http://1133-7a00e75b-63df-4125-b06c-11c2565dd11f.do-not-trust.hacking.run/')
content = r.text
soup= BeautifulSoup(content,'lxml')
pString = soup.find_all(name='p')
e = str(pString[0]).split('<br/>')[1].split('</p>')[0]
我们这里使用的是BeautifulSoup,直接提取p标签,然后做一些截取。
(3)使用eval函数计算表达式
r = eval(e)
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
(4)使用POST方式再次发送数据,并携带刚才计算出的结果
r2 = s.post('http://1133-7a00e75b-63df-4125-b06c-11c2565dd11f.do-not-trust.hacking.run'
,data = {'result':r})
print(r2.text)
(5)在返回的数据中找到flag
全部代码:
import requests
import re
from bs4 import BeautifulSoup
s = requests.Session()
r = s.get('http://1133-7a00e75b-63df-4125-b06c-11c2565dd11f.do-not-trust.hacking.run/')
content = r.text
soup= BeautifulSoup(content,'lxml')
pString = soup.find_all(name='p')
e = str(pString[0]).split('<br/>')[1].split('</p>')[0]
r = eval(e)
r2 = s.post('http://1133-7a00e75b-63df-4125-b06c-11c2565dd11f.do-not-trust.hacking.run'
,data = {'result':r})
print(r2.text)
来自ctf小菜鸡的日常分享,欢迎各位大佬留言。