NSS [HUBUCTF 2022 新生赛]Calculate
题目描述:python is a good tool in CTF
需要答对20题,每题回答时间(其实就是两次发包之前的间隔)要大于一秒小于三秒。
抓个包,我们的答案是POST发包。并且在这里看到了cookie,注意一下,我们的代码是要加上cookie的,要不然服务器无法判定我们的身份,给我们记录答对题目的数量。就像寄快递,不写发件人对方根本不知道是谁发过来的。
查看返回包,可以发现数学表达式的每一个字符都在<div style=什么什么>
和</div>
之间,但是<div style=什么什么>
和</div>
之间除了数学表达式的每个字符还有换行符。
脚本如下:
import requests
import time
url = 'http://node1.anna.nssctf.cn:28802/'
res = requests.session() #创建session对象,用来保存当前会话的持续有效性。不创建也可以调用对应的方法发送请求,但是没有cookie,那就无法记录答题数量。
for i in range(1, 99):
math = ""
response = res.get(url) #发get包,获取题目
time.sleep(1) # 睡一秒
resTest = response.text #获取返回包的内容
for j in range(0, len(resTest)): #遍历获取网页数学表达式,这里建议用正则表达式(re)
if resTest[j - 1] == ">" and resTest[j + 1] == "<" and resTest[j]!= "\n":
math = math + resTest[j]
math = math.strip('=') #strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
num = eval(math) #计算数学表达式的值
myData = { #构造的POST数据
'ans': num
}
response = res.post(url, data=myData) #发post包,提交答案
print(response.text) #打印当前返回包的内容
time.sleep(1) # 睡一秒
if "NSSCTF{" in response.text: #如果返回包里面有flag
print("Flaggggggggg: ", response.text)
exit() # 退出当前程序,也可以break