flag1
视频BV1ap421R7VS 2s~4s 后面的波点图 仔细瞅
flag1{52pj2024}
flag2
视频BV1ap421R7VS 5s~9s二维码拼凑一下,扫不出来用微信扫。
解码之后为一个url地址:https://2024challenge.52pojie.cn/
浏览器打开,在控制台-网络下看响应标头,有一个x-Flag2:
flag2{xHOpRP}
flag3
视频BV1ap421R7VS开头0~1s 瞅就完事了
flag3{GRsgk2}
flag4
还是前面提到的控制台,下面有一个flag4_flag10.png,保存图像
直接瞅
flag4{YvJZNS}
flag5
查看https://2024challenge.52pojie.cn/index.html的源代码,可以看到有flag5与flag9的提示
将红框处的color改为其他颜色便于观察!
拖动控制台侧边栏,可以展示出flag5与flag9
flag5{P3prqF}
flag6
从之前解码的网页中进入flag6页面,有一个计算flag6的button,看源代码,一眼爆破md5明文,直接cmd5查出结果
flag6{20240217}
flag7
视频后面给了个github地址https://github.com/ganlvtech/52pojie-2024-challenge
点进去有个删除不小心提交的flag内容,修改记录里面有flag7
flag7{Djl9NQ}
flag8
打游戏买一个吧
flag8{OaOjIK}
flag9
flag5后续
flag9{KHTALK}
flag10
前面提到的flag4后续步骤操作图片,使用stegSolve Xor 得到flag10
flag10{6BxMkW}
flag11
一眼拼图,找到flag11.png保存到本地使用gaps拼图
因为图片对比度不咋地,可以进行简单调整一下
我调整成这样
gaps命令
gaps run flag122.png solution.png --generations=40 --population=320 --size=30 --debug
测试了几遍都无法拼出可读的结果,但是开着debug可以看一些中间过程猜出flag
flag11{HPQfVF}
flag12
检查输入条件是否满足:secret * 1103515245 % 2**32 == 1
配合gpt做出来的,放出解题脚本
# 定义模数
modulus = 2**32
# 定义乘数
multiplier = 1103515245
# 寻找满足条件的var0,使得 (var0 * multiplier) % modulus == 1
# 使用扩展欧几里得算法
def extended_gcd(a, b):
if a == 0:
return (b, 0, 1)
else:
g, y, x = extended_gcd(b % a, a)
return (g, x - (b // a) * y, y)
# 计算1103515245模2^32的乘法逆元
g, x, y = extended_gcd(multiplier, modulus)
if g != 1:
print("逆元不存在")
else:
mod_inverse_var0 = x % modulus
print(mod_inverse_var0)
结果为 4005161829,提交该值,获取flag
flag12{HOXI}
flagA
这题比较抽象,在网页2024challenge.52pojie.cn/index.html 中在cookie中会生成flagA,但是是加密的
注意看有一个UID的api
返回的结果是你的uid,这里就猜一猜有没有可能这个cookie里面的uid的加密方式与flagA加密方式相同,且解密方式也相同
复制这个包的curl丢到postman里面
将cookie的uid值改为flagA的值,发送成功获取flagA
flagB
买一次v我50可以知道这题提示是溢出
然后可以看得出来这个flagB购买价格很抽象
我们可以尝试以2的指数倍进行购买,写一个python脚本
import requests
url = "https://2024challenge.52pojie.cn/flagB/buy_item"
for i in range(999):
payload = f'shop_item_id=5&buy_count={2**i}'
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Connection': 'keep-alive',
'Content-Type': 'application/x-www-form-urlencoded',
'Cookie': *your cookie*,
'Origin': 'https://2024challenge.52pojie.cn',
'Referer': 'https://2024challenge.52pojie.cn/flagB/index.html',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
这时候可以返回网页获取flagB了
flagC
看着一脑袋包,其实很简单,
这个题目每个人不一样,就看一下显示的种类正确有几个,比如我这个图卡车和轮船正确
位置就用这两个种类的来判断即可
我们就用这两个来p图,应该是4个就可以,我的图如下,也可以正常获得flagC