nnonkey k1n9的博客

当你为错过太阳而哭泣时,你也要再错过群星了——泰戈尔​

[HGAME 2023 week1]Guess Who I Am,最细的,没有更细的了

前言

一天一道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手到擒来
2024-01-21T06:52:04.png
得到flag,下班,寒假之一天一道ctf系列完成

本原创文章未经允许不得转载 | 当前页面:nnonkey k1n9的博客 » [HGAME 2023 week1]Guess Who I Am,最细的,没有更细的了

评论 2

  1. 555

    ljl 2024-01-22    回复
  2. https://www.aiwin.fun/师傅的博客

    ljl 2024-02-24    回复