NSS [HUBUCTF 2022 新生赛]Calculate

NSS [HUBUCTF 2022 新生赛]Calculate

题目描述:python is a good tool in CTF

image-20230712142110483

需要答对20题,每题回答时间(其实就是两次发包之前的间隔)要大于一秒小于三秒。

抓个包,我们的答案是POST发包。并且在这里看到了cookie,注意一下,我们的代码是要加上cookie的,要不然服务器无法判定我们的身份,给我们记录答对题目的数量。就像寄快递,不写发件人对方根本不知道是谁发过来的。

image-20230712142210471

查看返回包,可以发现数学表达式的每一个字符都在<div style=什么什么></div>之间,但是<div style=什么什么></div>之间除了数学表达式的每个字符还有换行符。image-20230712165203374

脚本如下:

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

image-20230712165508191

猜你喜欢

转载自blog.csdn.net/Jayjay___/article/details/134805314
今日推荐