如今的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 %>
成果以下: