当前位置:首页 > 黑客业务 > 正文内容

服务端模板注入进犯 (SSTI)之浅析

访客4年前 (2021-04-15)黑客业务1064

在本年的黑帽大会上 James Kettle 讲解了《Server-Side Template Injection: RCE for the modern webapp》,从服务端模板注入的构成到检测,再到验证和运用都进行了具体的介绍。本文在了解原文内容的基础上,结合更为具体的示例对服务端模板注入的原理和扫描检测办法做一个浅析。
一、模板注入与常见Web注入
就注入类型的缝隙来说,常见 Web 注入有:SQL 注入,XSS 注入,XPATH 注入,XML 注入,代码注入,指令注入等等。注入缝隙的本质是服务端接受了用户的输入,未过滤或过滤不谨慎履行了拼接了用户输入的代码,因而构成了各类注入。下面这段代码足以阐明这一点:
// SQL 注入
$query = "select * from sometable where id=".$_GET['id'];
mysql_query($query);
------------- 富丽的分割线 -------------
// 模版注入
$temp->render("Hello ".$_GET['username']);
而服务端模板注入和常见Web注入的成因相同,也是服务端接收了用户的输入,将其作为 Web 运用模板内容的一部分,在进行方针编译烘托的进程中,履行了用户刺进的歹意内容,因而或许导致了灵敏信息走漏、代码履行、GetShell 等问题。其影响规模首要取决于模版引擎的复杂性。
二、模板注入原理
模板注入触及的是服务端Web运用运用模板引擎烘托用户恳求的进程,这儿咱们运用 PHP 模版引擎 Twig 作为比如来阐明模板注入发生的原理。考虑下面这段代码:
php
require_once dirname(__FILE__).'/../lib/Twig/Autoloader.php';
Twig_Autoloader::register(true);
$twig = new Twig_Environment(new Twig_Loader_String());
$output = $twig->render("Hello {{name}}", array("name" => $_GET["name"]));  // 将用户输入作为模版变量的值
echo $output;
运用 Twig 模版引擎烘托页面,其间模版含有 {{name}}  变量,其模版变量值来自于 GET 恳求参数 $_GET["name"] 。明显这段代码并没有什么问题,即便你想经过 name  参数传递一段 JavaScript 代码给服务端进行烘托,或许你会以为这儿能够进行 XSS,可是因为模版引擎一般都默许对烘托的变量值进行编码和转义,所以并不会构成跨站脚本进犯:

可是,假如烘托的模版内容遭到用户的操控,状况就不相同了。修正代码为:
php
require_once dirname(__FILE__).'/../lib/Twig/Autoloader.php';
Twig_Autoloader::register(true);
$twig = new Twig_Environment(new Twig_Loader_String());
$output = $twig->render("Hello {$_GET['name']}");  // 将用户输入作为模版内容的一部分
echo $output;
上面这段代码在构建模版时,拼接了用户输入作为模板的内容,现在假如再向服务端直接传递 JavaScript 代码,用户输入会原样输出,测验成果清楚明晰:

比照上面两种状况,简略的说服务端模板注入的构成毕竟仍是因为服务端信任了用户的输出而构成的(Web安全真理:永久不要信任用户的输入!)。当然了,第二种状况下,进犯者不只仅能刺进 JavaScript 脚本,还能针对模板结构进行进一步的进犯,此部分只阐明原理,在后面会对进犯运用进行具体阐明和演示。
三、模板注入检测
上面现已讲明晰模板注入的构成本来,现在就来谈谈对其进行检测和扫描的办法。假如服务端将用户的输入作为了模板的一部分,那么在页面烘托时也必定会将用户输入的内容进行模版编译和解析最终输出。
借用本文第二部分所用到的代码:
php
require_once dirname(__FILE__).'/../lib/Twig/Autoloader.php';
Twig_Autoloader::register(true);
$twig = new Twig_Environment(new Twig_Loader_String());
$output = $twig->render("Hello {$_GET['name']}");  // 将用户输入作为模版内容的一部分
echo $output;
在 Twig 模板引擎里,{{ var }}  除了能够输出传递的变量以外,还能履行一些根本的表达式然后将其成果作为该模板变量的值,例如这儿用户输入 name={{2*10}} ,则在服务端拼接的模版内容为:
Hello {{2*10}}
Twig 模板引擎在编译模板的进程中会核算 {{2*10}}  中的表达式 2*10 ,会将其回来值 20  作为模板变量的值输出,如下图:

现在把测验的数据改动一下,刺进一些正常字符和 Twig 模板引擎默许的注释符,结构 Payload 为:
IsVuln{# comment #}{{2*8}}OK
实践服务端要进行编译的模板就被结构为:
Hello IsVuln{# comment #}{{2*8}}OK
这儿简略剖析一下,因为 {# comment #}  作为 Twig 模板引擎的默许注释方式,所以在前端输出的时分并不会显现,而 {{2*8}}  作为模板变量最终会回来 16  作为其值进行显现,因而前端最终会回来内容 Hello IsVuln16OK ,如下图:

经过上面两个简略的示例,就能得到 SSTI 扫描检测的大致流程(这儿以 Twig 为例):

[1] [2]  黑客接单网

扫描二维码推送至手机访问。

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:https://therlest.com/106806.html

分享给朋友:

“服务端模板注入进犯 (SSTI)之浅析” 的相关文章

什么时候立秋

很快就要到大暑了,之后的节气就是立秋,可能很多人会觉得立秋应该就会进入秋天,天气清爽舒服了,但事实不是这样的,秋天来了还有一个很让人害怕的秋老虎,那大家知道什么时候立秋以及几号立秋吗,接下来大家就随百思特小编一起了解看看~   2020立秋是几月几日 2020年...

字节承认商业化团队撤城裁员

据晋江新闻网2021年10月19日21:00:43的最新发布,微博网友@ 爆料。 平安夜来临之际,事件,在网上炒得沸沸扬扬,引发全网热议! 据悉,黑客追款后来被报道了几次。猜测第六百八十八章逃港者第六百八十九章调侃第六百。相对这个账号是他的。 1.专业网赌追回律师 首先确保整个真正的黑客追款方案是最...

猪肉怎么选?颜色有区别吗?今天做饭的时候发现上次买的猪肉颜色跟这

猪肉怎么选?颜色有区别吗?今天做饭的时候发现上次买的猪肉颜色跟这 买猪肉时,根据肉的颜色、外观、气味等可以判断出肉的质量是好还是坏。优质的猪肉,脂肪白而硬,且带有香味。肉的外面往往有一层稍带干燥的膜,肉质紧密,富有弹性,手指压后凹陷处立即复原。 次鲜肉肉色较鲜肉暗,缺乏光泽,脂肪呈灰白色;表面带...

宜家自助餐多少钱一位 「天津宜家自助餐多少钱」

食材的流转等息息相关的,白堤路店,就不用付钱了。吃完了,不像别的自助沙拉酱都兑了N多的水!其他」的也是10多块20块一份。鞍山西道,你绝对吃不腻。 举荐菜:当然是面啦!海鲜、你去尝尝吧。 举荐蔡:特色鸡串,金汉斯南美多少烤肉,腌好的肉和没腌的肉都有,200元一位,宜家家居,宜家2楼那个不是自助餐厅,...

中铁快运寄件电话 - 中铁快运官方网站

尽快前去领取吧,查询可以来我们,包裹已经到石家庄了,告诉对方所寄何物。广木头箱子费用在及时上百不等。 .网站“中铁快运单号查询系统”留言查询,开始不知道。 中铁快运的,且电话通知无人接听,但是价格也很贵。在哪里寄,中铁快运,电话多少中铁。 打了个电话,K54,徐州中铁快运,你好,木头箱子中铁能提供。...

存储过程oracle(oracle财务系统)

推荐教程:甲骨文教程 本文主要介绍甲骨文中的数据转换。 1.日期转换成字符串(以2016年10月20日为例) 选择to_char(sysdate,& # 39;yyyy-mm-DD hh24:mi:ss & # 39;)strDateTime从dual-获取年-月-日:分:秒-...

评论列表

性许未欢
3年前 (2022-07-04)

和解析最终输出。借用本文第二部分所用到的代码:phprequire_once dirname(__FILE__).'/../lib/Twig/Autoloader.php';Twig_Autoloader

馥妴秙暔
3年前 (2022-07-04)

.php';Twig_Autoloader::register(true);$twig = new Twig_Environment(new Twig_Loader_String());$output = $twig->render("

鸠骨嗫嚅
3年前 (2022-07-04)

注入的原理和扫描检测办法做一个浅析。一、模板注入与常见Web注入就注入类型的缝隙来说,常见 Web 注入有:SQL 注入,XSS 注入,XPATH 注入,XML 注入,代码注入,指令注入等等。注入缝隙的本质是服务端接受了用户的输入,未过滤或过滤不谨慎履行了拼接了用户输入的代码,因而构成了各类注

森槿橘欢
3年前 (2022-07-04)

入就注入类型的缝隙来说,常见 Web 注入有:SQL 注入,XSS 注入,XPATH 注入,XML 注入,代码注入,指令注入等等。注入缝隙的本质是服务端接受了用户的输入,未过滤或

假欢谷夏
3年前 (2022-07-04)

注入等等。注入缝隙的本质是服务端接受了用户的输入,未过滤或过滤不谨慎履行了拼接了用户输入的代码,因而构成了各类注入。下面这段代码足以阐明这一点:// SQL 注入$query = "select * from sometable wher

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。