前言
一天一道ctf题目,不多做,也不少做,nm爽玩了两天,今天还得做两道,昨天的还没有做,本题考的主要是对python脚本的编写。
本文章适合python小白学习
开始解题
进入题目不多说,就是猜名字,然后对100次就得到flag,然后还有提示,我们找到了人员的信息,这里不贴出来了。然后,然后就是看wp
因为自己的脚本能力自己还是心知肚明的,看别人脚本都要理解半天,首先明确脚本的功能,根据给出的intro,找到对应的id,怎么获取每次的intro,怎么获取每次的id又是问题
思考1:intro怎么获取
很好发现回显页面就有每次的intro,那我们是不是只需要抓取回显的信息就好了
import requests
getscore = "http://node5.anna.nssctf.cn:28612/api/getScore"
getquestion = 'http://node5.anna.nssctf.cn:28612/api/getQuestion'
verifyanswer = "http://node5.anna.nssctf.cn:28612/api/verifyAnswer"
r2 = requests.get(getquestion)
r2 = requests.get(getquestion)
print(r2.text)
回显为:{"message":"16 级 / 立志学术的统计er / R / 为楼上的脱单事业做出了贡献"}
当然上面那个api接口抓包是可以获取的,但是这里有个问题就是这个数据格式很明显是json格式,我们需要获取message的值得转化为python字典形式
学习一下python的一些转json格式的方法
json()方法用于解析JSON格式的数据,通过调用json()方法,可以将其转换为Python中的对应数据类型,如字典或列表,以便进行进一步的处理和访问。
或者json.loads一样的,但是需要引入json
所以我们获得新脚本
import requests
getscore = "http://node5.anna.nssctf.cn:28612/api/getScore"
getquestion = 'http://node5.anna.nssctf.cn:28612/api/getQuestion'
verifyanswer = "http://node5.anna.nssctf.cn:28612/api/verifyAnswer"
r2 = requests.get(getquestion)
data=r2.json()
print(data['message'])//单引号不能丢,这是字典调用的方法
or question = json.loads(r2.text)
print(question['message'])
这样就可以去获取message的值了,解决了第一个问题
问题二:怎么才能做到一个算法使intro和id相互匹配呢
我们不是获取了很多信息吗,那我们是不是只需要用获取信息的intro和这里的message比较,如果比较成功,则返回id,下面来实现一下这个功能
我们首先处理我们获得的信息,处理方式还是要解析一下
shuju=json.loads(j_data)
然后要怎么获得字典里的具体数据呢
print(shuju[i]["intro"])
完美,剩下的就是循环匹配
for i in range(100):
if shuju[i]["intro"]==data['message']:
id=shuju[i]['id']
print(id)
就可以获取id了
问题3:怎么将我们获取的id写入呢
这个问题应该不难,去你妹的不难,tm调试了半天,结果是题目环境过期了,怪不得一直报错,然后重开题目,又是调半天,下面就是成果
在这里要将一个重要的东西,就是这个session
s = requests.session(),必须有,不可或缺,因为这个score是需要记录的
s = requests.session()
for i in range(len(shuju)):
r1 = s.get(getquestion)
data = r1.json()
if shuju[i]["intro"]==data['message']:
id=shuju[i]['id']
print(id)
break
data2 = {"id": id}
r2 = s.post(url=verifyanswer, data=data2)
print(r2.text)
第四个问题:怎么才能重复100次,让分数达到100获取flag
那就需要获取score的值,和100比较,所以啊,写脚本就是要知道自己的需求
我们先看一下score回显页面是什么样的
{"message":1}
正确一次回显这个样子,那其实我们都不需要那么麻烦了。直接搞100次flag手到擒来
得到flag,下班,寒假之一天一道ctf系列完成
555
https://www.aiwin.fun/师傅的博客