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

访客5年前黑客文章1154

在参加缝隙赏金方案的过程中,我发现了一个网站,其间包括十分风趣的功用——该网站答应我根据用户操控的表达式过滤掉一些数据。例如,我能够写出相似于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]  黑客接单网

相关文章

中国黑客团队接单_定位网站

cd $AFLSMART在安全范畴,有一些“经典”的歹意安排是众所周知的,而且在曩昔几年中被很多人广泛追寻。 2018年,这些歹意安排自始自终地进行其歹意活动,其间有一些安排稍显低沉。 AFLSmar...

中国哪里有黑客接单,在哪里找黑客帮我盗会QQ号,奥拉星黑客空间找不同

满意条件: Android2.3+,root,busybox修正计划: 成果能够履行成功,仅仅操控起来不方便,每非必须自己写php代码,测验改chopper,将里边的要害处的base64...

黑客入侵,微信返现被骗一千块钱找黑客,哪里找微博黑客

使用weasel能够去下载所需的其它进犯模块:获取用户名暗码http://tu.acfun.tv 192.168.1.2 ether 0A-11-22-33-44-02 C...

黑客一般怎么接单_找黑客追钱犯法吗

本文就让我议论ArrayBuffers和SharedArrayBuffers。 这是由于即便你正在运用具有主动内存办理的JavaScript,ArrayBuffers也可认为你供给一种方法来手动处理一...

如何定位找人,找网络黑客被骗7000,求黑客帮忙找qq

bbs.maiyadi.com本次试验中,有两点需求打破,一是管理员口令,二是安全提示问题;Starting Nmap 6.49BETA4 (https://nmap.org) at 2019-12-...

怎么找黑客高手接单_iphone破解

FireEye评价APT33或许是工程职业界一系列侵略和妄图侵略的暗地推手。 揭露陈述标明此活动或许与最近的破坏性进犯SHAMOON有关。 FireEye的Managed Defense现已呼应并包括...