2024解题领红包 Web题WP
# 2024解题领红包 Web题WP第一次发帖, 没啥经验, 还请多多包涵
# 静态flag
## flag1
在视频第二秒, 粒子从中央向外扩散, 会发现有阴影, 一帧一帧看就能得到flag1{52pj2024}
## flag2
请求https://2024challenge.52pojie.cn/
```bash
curl -v https://2024challenge.52pojie.cn/
```
可以发现响应头中有flag2
````
X-Flag2: flag2{xHOpRP}
````
## flag3
在视频开头雪花屏部分, 仔细看那一段就能得到flag3 (不过挺费眼睛的)
## flag4
访问站点, 发现页面请求了flag4_flag10.png
## flag5
发现页面中的提示
将文字改为黑色, position改为relative后得到
将这段文字中的字母, 数字和{}提取后得到
```
flag5{P3prqF}
```
## flag6
观察js, 发现在比较md5
```javascript
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, 得到
与flag6{}拼接得到flag6{20240217}
## flag7
在(https://github.com/ganlvtech/52pojie-2024-challenge/commit/6bbac038c4813fbc5d129a8d605471ea2e374786)中
## flag8
直接玩到10000金币
## flag9
没做出来
## flag10
使用StegSolve把flag4_flag10.png反色一下 (Color Inversion)
## flag11
这个图用gaps拼不好滴, 得看提示
提示里让我们给var1和var2在0-100范围内找到一个合适的值
写个脚本来找
```javascript
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
(对应的var1, var2):
```css
--var1: 71;
--var2: 20;
```
## flag12
分析一下wasm
```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里
```bash
# 使用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
```bash
# 使用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
```json
{
"boxes": [...],
"scores": [...],
"classes": // 物品的种类
}
```
```json
{
"hint": "物体太多了",
"labels": [
"car 种类错误",
"bus 种类正确 位置正确",
...
], // 长度等于classes的的长度
"colors": [...]
}
```
用python跑一下
```python
import requests
import tqdm
CLS =
Cookie = '' # 填充你的Cookie
for i in tqdm.tqdm(range(len(CLS))):
for a in range(81):
CLS = a
r = requests.post('https://2024challenge.52pojie.cn/flagC/verify', {
"boxes": ,
"scores": ,
"classes": CLS
}, json=True, headers={'Cookie': Cookie}).json()
if '错误' in r['labels']:
pass
else:
break
print(CLS)
print(r)
```
最后输出
```
{'hint': 'flagC{bc99ed00} 过期时间: 2024-02-24 10:50:00', 'labels': ['train 种类
正确 位置正确', 'bus 种类正确 位置正确', 'motorcycle 种类正确 位置正确', '', '',
'', '', '', '', '', 'boat 种类正确 位置正确', '', '', ''], 'colors': ['99ff99',
'99ff99', '99ff99', '', '', '', '', '', '', '', '99ff99', '', '', '']}
```
另一贴看到flag9了
https://attach.52pojie.cn/forum/202402/25/013155v8snnj787s47ids7.png {:1_919:}有点详细{:1_921:} 静态12个全部找出来 但是动态一个都不会 谢谢楼主,flagC的方法是目前看到最清楚的 今年的题目有趣有创意,楼主写的很详细,学习了
页:
[1]