吾爱破解 2024 年春节解题红包活动-Web题解
本帖最后由 s1mh0 于 2024-2-25 21:06 编辑## Web 初级题
### flag1:
在视频第三秒开始的波纹中
flag1{52pj2024}
### flag2:
在flag4中得到的网址抓包,在响应体中得到flag2
### flag3:
视频开头的雪花水印中,反复播放几遍就能看清楚(截图看不出来就不截了)
flag3{GRsgk2}
### flag4:
将视频中的四个二维码图片拼接得到网址
```text
https://2024challenge.52pojie.cn/
```
登录后看到flag4图片藏在了背景图片中
flag4{YvJZNS}
### flagA:
登录时,请求包会在Set-Cookie中设置flagA变量,看视频评论区得知要找接口解
在页面源代码看到
```html
<script>
fetch('/auth/uid').then(res => res.text()).then(res => {
if (res) {
document.querySelector('#uid').textContent = res;
document.querySelector('#logout-form').style.display = '';
document.querySelector('#login-form').style.display = 'none';
}
});
</script>
```
访问`/auth/uid`接口,发现会将请求体中uid变量值解密成对应数字,抓包修改uid值为flagA变量值,得到flagA
## Web 中级题
### flag5:
主页面抓包的时候看到了源码中flag5跟9的提示
将`<wbr>`全部替换为空,调整一下视角得到flag5
flag5{P3prqF}
### flag6:
跳转flag6页面点击计算即可
flag6{20240217}
### flag7:
在视频出现的github仓库的README文件中
flag7{Djl9NQ}
### flag8:
玩2048小游戏
flag8{OaOjIK}
### flagB:
通过买`v我50`道具得到`“溢出”`的关键词,手工尝试得到了几个临界值,还是没什么头绪,不知道后端溢出逻辑,然后写了个脚本爆破临界值,从左到右通过`钱不够`和`钱变多`状态变化确定每一位上的数字
```python
import requests
session = requests.Session()
headers = {"xxx":"xxx"}
cookies = {"xxx":"xxx"}
count = '91'
new_count = ''
weishu = 10 # 位数
while 1:
num = count.ljust(weishu, "0")
print(num)
paramsPost = {"shop_item_id": "5", "buy_count": "" + num + ""}
response = session.post("https://2024challenge.52pojie.cn/flagB/buy_item", data=paramsPost, headers=headers,
cookies=cookies)
if "钱不够" not in response.content.decode():
new_count = str(int(count)-1)
count=new_count + '0'
print(new_count)
if len(new_count)>weishu:
break
else:
count = str(int(count)+1)
```
通过控制weishu变量和count变量,得到最小临界值为10位,并且前几个临界值依次为
```text
9232018856
27696056569
46160094282
64624131995
83088169708
```
得到临界值公式
```
9232018856 + (18464037713的倍数)
```
继续写脚本将倍数从1开始每次加1,提交每个临界值,发现还是不行,尝试将倍数改为每次加0.5,发现凡是乘上x.5倍的都能购买成功
```python
import requests
session = requests.Session()
flag = 1
while 1:
num = 9232018856 + 18464037713 * flag
num = round(num+0.1) # 发现xx.5四舍五入的时候变成舍了,得加0.1
print(num)
headers = {"xxx":"xxx"}
cookies = {"xxx":"xxx"}
paramsPost = {"shop_item_id": "5", "buy_count": "" + str(num) + ""}
response = session.post("https://2024challenge.52pojie.cn/flagB/buy_item", data=paramsPost, headers=headers,
cookies=cookies)
if ("钱不够" or "暂时先拦一下") in response.content.decode():
flag = flag + 0.5
else:
print(response.content.decode())
break
```
###
## Web 高级题
### flag9:
同flag5一起在源码出现,观察flag5的位置,尝试将flag5的每个字符转成换行符,得到flag9
flag9{KHTALK}
### flag10:
跟flag4藏在一个图片中,Stegsolve查看发现RGB三个通道都有flag10
flag10{6BxMkW}
### flag11:
点击flag11页面,查看源代码提示要将var1和var2两个变量改为合适的值,尝试后发现分别改为71和20时得到完整图片
flag11{HPQfVF}
### flag12:
非预期解,预期解法应该是要根据flag12页面这串逻辑解密(并且是通过点击获取参数,也不能通过bp抓包爆破)
```html
<script>
WebAssembly.instantiateStreaming(fetch('flag12.wasm'))
.then(({instance}) => {
const get_flag12 = (secret) => {
let num = instance.exports.get_flag12(secret);
let str = '';
while (num > 0) {
str = String.fromCodePoint(num & 0xff) + str;
num >>= 8;
}
return `flag12{${str}}`;
}
document.querySelector('button').addEventListener('click', (e) => {
e.preventDefault();
document.querySelector('#result').textContent = get_flag12(parseInt(document.querySelector('input').value));
});
});
</script>
```
直接查看flag12.wasm内容,尝试将1048576、1213159497、1103515245转为bytes类型
```python
from Crypto.Util.number import long_to_bytes
print(long_to_bytes(1103515245))
```
发现`1103515245`可以转成字符串`HOXI`,flag即为flag12{HOXI}
### flagC:
首先根据测试图片,查看需要哪些种类,再用ps将其抠出来,提交测试修改它们的位置即可,感觉不如flagA难
gunxsword 发表于 2024-3-6 10:08
FLAG6,你是直接点的计算???...这计算MD5...你这是跑了多久?
当时点完以为是网卡了就去找其他flag没管,过了一会儿点回来看到直接出了,所以就没去看源码。。。 受教了,谢谢 高手,真的很厉害 FLAG6,你是直接点的计算???...这计算MD5...你这是跑了多久?
页:
[1]