吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 553|回复: 5
收起左侧

[CTF] 2024解题领红包 Web题WP

[复制链接]
Command 发表于 2024-2-25 08:37

2024解题领红包 Web题WP

第一次发帖, 没啥经验, 还请多多包涵

静态flag

flag1

在视频第二秒, 粒子从中央向外扩散, 会发现有阴影, 一帧一帧看就能得到flag1{52pj2024}

flag2

请求https://2024challenge.52pojie.cn/

curl -v https://2024challenge.52pojie.cn/

可以发现响应头中有flag2

X-Flag2: flag2{xHOpRP}

flag3

在视频开头雪花屏部分, 仔细看那一段就能得到flag3 (不过挺费眼睛的)

flag4

访问站点, 发现页面请求了flag4_flag10.png
1.png
2.png

flag5

发现页面中的提示

3.png

将文字改为黑色, position改为relative后得到

4.png

将这段文字中的字母, 数字和{}提取后得到

flag5{P3prqF} 

flag6

观察js, 发现在比较md5

const t0 = Date.now();
for (let i = 0; i < 1e8; i++) {
    if ((i & 0x1ffff) === 0x1ffff) {
        const progress = i / 1e8;
        const t = Date.now() - t0;
        console.log(`${(progress * 100).toFixed(2)}% ${Math.floor(t / 1000)}s ETA:${Math.floor(t / progress / 1000)}s`);
    }
    if (MD5(String(i)) === '1c450bbafad15ad87c32831fa1a616fc') {
        document.querySelector('#result').textContent = `flag6{${i}}`;
        break;
    }
}

查询md5, 得到

5.png

与flag6{}拼接得到flag6{20240217}

flag7

Github仓库

6.png

flag8

直接玩到10000金币

flag9

没做出来

flag10

使用StegSolve把flag4_flag10.png反色一下 (Color Inversion)

7.png

flag11

这个图用gaps拼不好滴, 得看提示

8.png

提示里让我们给var1和var2在0-100范围内找到一个合适的值
写个脚本来找

let El = document.documentElement
function Find(v1, v2) {
    if (v1 === 100) {
        return    
    }
    if (v2 === 100) {
        v1++
        v2 = 0
    }
        v2++
    El.style = '--var1: ' + v1 + '; --var2: ' + v2    

    setTimeout(Find, 100, v1, v2) // 间隔0.1s方便观察拼的情况
}
Find(0, 0)

得到还原好的flag11

9.png

(对应的var1, var2):

--var1: 71;
--var2: 20;

flag12

分析一下wasm

i32.const 1213159497
i32.const 0
local.get $var0
i32.const 1103515245
i32.mul
i32.const 1
i32.eq
select

判断了$var0是不是1103515245的倒数, 如果是就返回1213159497

直接把函数get_flag12中的num替换成1213159497即可

最后得到flag12{HOXI}

动态flag

flagA

在页面上登录后会将uid, flagA存到Cookie里

# 使用CURL
curl -v -d "uid=你的UID" https://2024challenge.52pojie.cn/auth/login
< Set-Cookie: uid=Zc0EAIdE+35lTUCZkVxqlGEeZrWyzHrJHAiT4M9J3abVr7Q=; path=/; SameSite=Lax
< Set-Cookie: flagA=M1It0z/FXQNBFWnjCM9J/JWOjPImaFIrm/ZYSjlUQRaBKk1KlYbOyMObzQ==; expires=Sat, 24 Feb 2024 02:30:00 GMT; path=/; SameSite=Lax

发现每次打开页面都会请求https://2024challenge.52pojie.cn/auth/uid从Cookie解密uid, 于是将flagA的内容替换到uid里, 再刷新页面即可得到flagA

# 使用CURL
curl -b "uid=M1It0z/FXQNBFWnjCM9J/JWOjPImaFIrm/ZYSjlUQRaBKk1KlYbOyMObzQ==" https://2024challenge.52pojie.cn/auth/uid

flagB

v他50(建议v我50), 得到提示:

 竟然真的有人v我50,真的太感动了。作为奖励呢,我就提示你一下吧,关键词是“溢出”。

考虑int64整数溢出, 一般买东西算总价都是单价 x 数量, 所以只要买8446744073709551615(也就是2 ** 64 - 1) / 999063388个flagB就OK了 (但还是会扣除大概28金币, 我也不知道为啥)

flagC

分析一下可以发现, 在前端用yolov5n识别完物品后会在服务端对物品的种类进行比较, 只有全部正确才会返回flagC

{
  "boxes": [...],
  "scores": [...],
  "classes": [2, 5, ...]  // 物品的种类
}
{
  "hint": "物体太多了",
  "labels": [
    "car 种类错误",
    "bus 种类正确 位置正确",
     ...
  ], // 长度等于classes的的长度
  "colors": [...]
}

用python跑一下

import requests
import tqdm

CLS = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Cookie = '' # 填充你的Cookie

for i in tqdm.tqdm(range(len(CLS))):
    for a in range(81):
        CLS[i] = a
        r = requests.post('https://2024challenge.52pojie.cn/flagC/verify', {
            "boxes": [0.0071830302476882935, 0.5186262726783752, 0.4009798765182495, 0.6479262709617615, 0.40771162509918213, 0.5121312737464905, 0.7820707559585571, 0.7769460082054138, 0.3125038146972656, 0.2294374704360962, 0.728165864944458, 0.4627001881599426, 0.002122625708580017, 0.8341933488845825, 0.3802390694618225, 0.9994925260543823, 0.8375666737556458, 0.6610859632492065, 0.9833332896232605, 0.9978412389755249, 0.46407967805862427, 0.7901233434677124, 0.7629221081733704, 0.9946882724761963, 0.5860870480537415, 0.01528950035572052, 0.6056223511695862, 0.05522865056991577, 0.49284374713897705, 0.019939638674259186, 0.5142461061477661, 0.06407386064529419, 0.7947754859924316, 0.45499294996261597, 0.9924987554550171, 0.6384640336036682, 0.7654308080673218, 0.03613254427909851, 0.9887223243713379, 0.2596513032913208, 0.043191954493522644, 0.025760412216186523, 0.27349424362182617, 0.48559069633483887, 0.7787967324256897, 0.2953518033027649, 0.9544115662574768, 0.45228803157806396, 0.41201093792915344, 0.03150711953639984, 0.42948994040489197, 0.07240761071443558, 0.01391458511352539, 0.6711101531982422, 0.41128668189048767, 0.8037518262863159],
            "scores": [0.8933814167976379, 0.8905048370361328, 0.8846318125724792, 0.8726909756660461, 0.8570783138275146, 0.8548367619514465, 0.8514701724052429, 0.8206562399864197, 0.8038725256919861, 0.7646903991699219, 0.723249614238739, 0.6844016909599304, 0.6817190051078796, 0.4212005138397217],
            "classes": CLS
            }, json=True, headers={'Cookie': Cookie}).json()
        if '错误' in r['labels'][i]:
            pass
        else:
            break
print(CLS)
print(r)

最后输出

[6, 5, 3, 80, 80, 80, 80, 80, 80, 80, 8, 80, 80, 80]
{'hint': 'flagC{bc99ed00} 过期时间: 2024-02-24 10:50:00', 'labels': ['train 种类
正确 位置正确', 'bus 种类正确 位置正确', 'motorcycle 种类正确 位置正确', '', '',
 '', '', '', '', '', 'boat 种类正确 位置正确', '', '', ''], 'colors': ['99ff99',
 '99ff99', '99ff99', '', '', '', '', '', '', '', '99ff99', '', '', '']}

免费评分

参与人数 3威望 +2 吾爱币 +102 热心值 +3 收起 理由
lihuann + 1 + 1 我很赞同!
Hmily + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
月落乌伤 + 1 + 1 学习了

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

51Crack 发表于 2024-2-25 10:17
另一贴看到flag9了
yanghaohuid 发表于 2024-2-25 10:30
iamafailor 发表于 2024-2-25 10:33
wqstudyy 发表于 2024-2-25 11:54
谢谢楼主,flagC的方法是目前看到最清楚的
月落乌伤 发表于 2024-2-25 12:08
今年的题目有趣有创意,楼主写的很详细,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 17:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表