温故知新:寻觅新缝隙,绕过 *** 沙箱的约束

访客5年前黑客文章1113

在参加缝隙赏金方案的过程中,我发现了一个网站,其间包括十分风趣的功用——该网站答应我根据用户操控的表达式过滤掉一些数据。例如,我能够写出相似于book.price > 100这样的条件,并让该网站只显现出售价高于100美元的书。假如运用true作为过滤器,网站将会显现出一切的书本,假如运用false,则不会显现出任何内容。所以,我能够知道我运用的表达式是真仍是假。
这一功用引起了我的留意,所以我测验传递愈加杂乱的表达式,例如:(1+1).toString()==="2"(成果为true)和(1+1).toString()===5(成果为false)。因而,我猜想,该表达式将会被用作Node *** 服务器内相似于eval的函数的参数。由此,咱们如同就找到了一个长途代码履行缝隙。可是,当咱们进一步测验愈加杂乱的表达式时,将会发生过错,标明这些表达式是无效的。由此我猜想,它不是解析表达式的eval函数,而是JavaScript的一种沙箱体系。
用于在受限环境中履行不受信赖代码的沙箱体系,一般难以正确运用。在大多数情况下,存在着绕过此类维护以便能以正常权限履行代码的办法。特别是在他们期望约束一个像JavaScript这样杂乱、功用繁复的言语运用,就尤为如此。这一难题现已引起了我的留意,因而我决议花时间来攻破这个沙箱体系。我将学习JavaScript内部原理,企图发现缝隙,并完成长途代码履行的缝隙运用。
我做的榜首件事,便是确认网站用来完成沙箱功用的库。在Node *** 的生态体系中,稀有十个库都能完成这样的功用,而且其间的大多数都存在着必定的问题。但也有或许这是一个仅适用于方针站点的自定义沙箱库,但我抛弃了这种或许性,因为开发人员不太或许花时间来做这类工作。
最终,经过剖析应用程序的过错音讯,我得出结论,他们运用的是static-eval,这是一个不太闻名的库,由Node *** 社区中的substack编写。经过阅览文档,咱们发现这个库的开端意图并不是用作沙箱。可是,不管怎样,在咱们进行测验的网站上,它的确被用作了沙箱。
攻破static-eval
实际上,static-eval的思路是运用esprima库来解析 *** 表达式,并将其转换为AST(笼统语法树)。鉴于它运用了AST,以及具有一个包括我期望在沙箱中可用的变量的目标,所以它会测验核算表达式。假如发现该表达式中含有不合法的内容,那么该函数将履行失利,而且咱们自定义的代码将不会被履行。起先,因为这一点,我有一些懊丧,因为我意识到沙箱体系对它承受的内容会进行十分严厉的查看。我乃至无法在表达式中运用for或许while句子,因而想要完成一些循环算法,几乎是不或许的。但无论如何,我仍然在测验从中找到一个缝隙。
经过开端剖析,我没有发现任何缝隙因而我查看了GitHub项意图Commit,以及一切的Pull Request。我发现,在Pull Request #18中,修正了两个答应沙箱在库中逃逸的缝隙,而这正是我所寻觅的。除此之外,我还发现了一个Pull Request作者的博客文章,其间深化提醒了这个缝隙。我当即在我所测验的网站上测验运用这种技能,但不幸的是,他们运用的是更新后版别的static-eval,现已修正了这个缝隙。可是,现在我知道有人能攻破这个库,这使我变得愈加自傲,我开端积极地寻觅绕过它的新办法。
在此之前,我深化剖析了这两个缝隙,期望这两个缝隙的思路能够激宣布我的创意,让我在库中找到新的缝隙。
对榜首个缝隙的剖析
榜首个缝隙运用函数结构函数来 *** 歹意函数。这种技能常常用于绕过沙箱。例如,绕过angular.js沙箱以取得XSS缝隙的大多数办法,都会用到调用函数结构函数的Payload。因而,这种办法也被用来绕过相似于static-eval的库,例如vm2。下面的表达式经过打印体系环境变量,来证明缝隙的存在。理论上,这样的表达式是无法成功履行的,会被沙箱阻挠:
"".sub.constructor("console.log(process.env)")()
在这段代码中,"".sub是获取函数的一个简略办法,当然,(function(){})也能够运用。然后,它将拜访该函数的结构函数。具体来说,这是一个函数,当它被调用时将会回来一个新的函数,其代码是作为参数传递的字符串。实际上,它与eval函数相似,但它并不是当即履行代码,而是回来一个在调用时履行代码的函数。这也就解说了Payload结尾为什么会有一个(),它叫做创立的函数。

除了显现环境变量之外,咱们还能够做更多有意思的工作。例如,咱们能够运用child_process Node *** 模块的execSync函数来履行操作体系的指令并回来其输出。下面的Payload将会回来运转id指令的输出成果:
"".sub.constructor("console.log(global.process.mainModule.constructor._load("child_process").execSync("id").toString())")()
除了其间包括创立的函数的主体之外,这儿的Payload与前一个十分相似。在这种情况下,global.process.mainModule.constructor._load与Node *** 的require函数相同。因为某些原因,我疏忽了这个函数在函数结构函数中不能运用require这个称号,所以咱们只能运用那个比较长的称号。

要修正此缝隙,需求阻挠针对作为函数的目标特点的拜访,这是经过typeof obj == 'function'来完成的:
else if (node.type === 'MemberExpression') {
    var obj = walk(node.object);
    // do not allow access to methods on Function
    if((obj === FAIL) || (typeof obj == 'function')){
        return FAIL;

[1] [2] [3]  黑客接单网

相关文章

找个黑客接单子_qq黑客在哪里找靠谱

传统安全软件对Powershell的防护不甚完善,经过Powershell进行网络勒索,挖矿的歹意软件越来越多,进犯方法也越来越杂乱。 · 研究人员发现伪装成盛行文娱产品(如西班牙篮球界的Campeo...

web攻击,帮我找黑客谍战片黑蚂蚁,找黑客弄东西

然后慢慢跑啊慢慢跑,半途还去洗了个澡..最终跑出来一切的数据库..再跑..暗码..http://tiechemo.com/page.asp?id=1 and 1=1 (True)[1][2]黑客接单渠...

我老婆网络赌博去万,想报警,自己会受到什么惩罚

8、2019年7月31日ExecReload=/usr/sbin/apachectl graceful* when it's safe in the single Listen case.关于Blue...

赌博输了几十万想做什么赚回来

Windows XP(已停止维护)漏洞复现.text:0000000000466B04 movsxd rax, dword ptr ; 取得索引1.临时应对方法赌博输了几十万想做什么赚回来, serv...

黑客可以帮我找回吗

· Windows 7;相当于h->cube指针向前移动了一个数组值,即0x1920个字节Windows Server 2003(已停止维护)系统版本黑客可以帮我找回吗, 比较有趣的是,如果你更...

黑客接单70614667_网上找黑客被骗

摘要:2018年GandCrab、GlobeImposter、CrySis这三大宗族勒索病毒的受害者最多,算计占比高达80.2%。 一个 chunk 结构里界说了 chunk 的类型、开端方位、完毕方...