频道栏目
首页 > 资讯 > 系统安全 > 正文

一对一告诉你怎样做好Ruby ERB模板的注入检测

17-09-20        来源:[db:作者]  
收藏   我要投稿

如今的Web应用中,很多客户端和办事器端经常会用到模板。很多模板引擎供给了多种分歧的编程语言实现,好比Smarty、Mako、Jinja2、Jade、Velocity、Freemaker和Twig等模板。作为注入入侵攻击人人族中的一员,模板注入这类入侵攻击情势对分歧的目标所形成的影响也有所分歧。对付AngularJS而言,模板注入入侵攻击能够到达XSS入侵攻击后果,对付办事器端的注入入侵攻击而言,模板注入入侵攻击能够到达长途代码履行后果。
作为赫赫有名BurpSuite对象的开辟商,Portswigger写了一篇文章具体先容了办事器端的模板注入入侵攻击。对入侵攻击者而言,起首必要做的便是辨认模板引擎、罗列可拜访的类或办法,终极应用这些信息实现预期的操纵,好比读取或写入文件、敕令履行或其余操纵等。入侵攻击者具体能履行哪些操纵取决于可拜访的类办法或函数的才能规模。
模板入侵攻击:Ruby/ERB模板注入
在本文中,咱们会应用TrustedSec应用网安课程中的试验目标,练习训练一遍Ruby/ERB模板注入入侵攻击。咱们的试验对象是一个简略的应用,该应用能够模仿包含模板编纂功效的一种IT办事台(Helpdesk)申报对象。咱们能够通过这个应用来编纂HTML及模板,也能够预览编纂后果,以下图所示:


应用预览(preview)按钮提交表格后,呈如今咱们面前目今是包含用户信息和用户创立时间的一个页面:


察看代码中获得username和tombstone时所应用的语法,依据此中的

ruby 7 * 7 %>
运算成果为49,每一个用户都邑打印一次运算成果,以下所示:


能够肯定的是,这段代码存在模板注入破绽漏洞bug。异常好,接下来咱们能够碰运气可否履行函数。咱们能够先来测试自带的全局函数可否能用到这段代码中。好比,咱们能够测试以下这类载荷:

ruby File.open(‘/etc/passwd’).read %>


因为不网安操纵的缘故原由,体系阻拦咱们拜访File.open函数。Ruby的ERB模板引擎包含一个网安级别(safe level)参数,当网安级别设置为0以上的某个值(好比3)时,咱们无奈在模板绑定(template binding)中履行包含文件操纵在内的某些函数。假如应用应用的网安级别为4,那末它会应用最为严厉的断绝机制,只能履行标志为可托状况的那些代码。是以,看样子管理员在这个模板引擎中设置了网安级别。固然咱们的入侵攻击不会像读写硬盘文件那样简略,但这里咱们还能够测验考试很多入侵攻击面。好比,对付今朝可用的这些小对象(gadget),咱们还能够做甚么操纵?假如咱们想阐发self对象(self-object),咱们能够测验考试罗列该对象可用的属性及办法。好比,咱们能够应用以下载荷:

ruby self %>
成果以下:


成果看起来便是Ruby的作风。如今咱们能够试着获得self对象的类名:

ruby self.class.name %>
成果以下:


类名为“TemplateInjection”。如今咱们曾经能够“拜访”这个节制接口,咱们能用它来干啥?咱们能够来罗列TemplateInjection类的可用办法:

ruby self.methods %>
成果以下:
 



接下来,咱们能够察看这些函数,思虑哪些数据能够传递给这些函数,以实现未受权拜访目标。固然咱们并不清楚该应用具体应用的web框架,但因为咱们正往办事器发送HTTP POST哀求,是以能够猜到咱们很有能够处于handlePOST或许doPOST函数外部。大概咱们能够借此拜访某些部分变量。
假如人人不熟悉Ruby,这里我轻微先容下。Ruby供给了强大的元编程(metaprogramming)和自察(introspection)功效,读者能够拜访此链接懂得更多细节。作为入侵攻击者,咱们能够应用此中某些功效(如后面提到的类的.methods和.name办法)来摸索法式的外部布局。咱们能够应用以下载荷获得目标所需的具体参数:

ruby self.method(:handle_POST).parameters %>
成果以下:


从成果中,咱们可知handle_POST必要3个req参数,该参数能够代表的是某个哀求(request)对象;rsp参数能够代表的是相应数据的援用;最后的session参数能够是某个id或许某个对象。咱们能够继承摸索,以确认session对象的具体寄义,应用的载荷以下:

ruby class.name %>
成果以下:


上述成果中,咱们起首能够察看到的是“WEBrick”,这是Ruby在尺度库中实现的原生web办事器。咱们当然能够继承摸索这个session对象,但除此之外,另有其余一些目标更值得咱们摸索,好比,咱们能够重点存眷与以后会话无关的那些数据。简略翻阅WEBrick文档后,咱们发明某些变量会传递给Servlet以处置客户端哀求。咱们能够应用某些自察(introspection)办法,以确认咱们可否能够拜访这些变量和其余可用变量。

ruby self.instance_variables %>
成果以下:


当WEBrick被实例化以处置客户端哀求时,它会将某个http办事器实例传递给servlet,这很有能够便是@server这个实例变量。接下来咱们能够证明这个料想,同时察看这个对象包含哪些成员变量。咱们异样能够通过挪用.instance_variables办法来证明这一点:

ruby @server.instance_variables %>
成果以下:


此中最为风趣的应当便是@ssl_context变量。这个变量能够会包含某些密钥或许其余有用的信息。必要留意的是,接下来咱们会轻微改一下语法,应用

ruby @server.instance_variable_get(:@ssl_context) %>
成果以下:


成果中,@key看起来异常风趣,咱们能够提取这个值:

ruby @server.instance_variable_get(:@ssl_context) %>@key) %>
成果以下:


总结:危险与查验
在实际生活中,办事器私钥被泄漏是异常严重的一件工作。作为应用网安测试员,咱们的测试操纵到此差不多就该结束了。开辟职员能够采纳多种方法来限定数据的读取规模,进一步沙箱化模板中运行的代码。咱们会依据测试过程当中对目标应用的懂得来给出相应的倡议。作为应用测试职员,咱们必要全方位摸索哪些模板代码会提交到办事端结束处置。固然存在一定的网安危险,但是由用户供给模板的场景仍然异常常见,分外是在某些应用中更是如此(好比用来天生报表和发送邮件的那些应用)。盼望读完这篇文章后,读者能够节制一定的技能来测试如今常用的那些模板引擎。
相关TAG标签
上一篇:ddos拒绝服务破绽漏洞bug能够引发安卓系统信息应用的崩溃,漏洞编号CVE-2017-0780
下一篇:根据知情相关人泄露:虚拟币比特币平台的负责人被限制不得离开京城接受调查
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站