#翻译文章# 原文:
https://infosecwriteups.com/leveraging-template-injection-to-takeover-an-account-1dba7c4ae315
这是关于我去年向一个私密程序报告的一个模板注入错误。
我正在浏览该应用程序,并试图了解它的作用。在浏览该应用程序时,我进入了帐户设置页面,并寻找了在测试设置页面时应注意的常规事项。
经过一段时间的测试,没有发现任何有意义的东西,我想也许我什么都没有了,应该继续进行下一个功能。
第二天,我在应用程序上探索了其他功能,并发现了这个有趣的功能,该功能使用户可以为访问页面的查看者编写自定义消息,有点像带有自定义问候语的博客文章。有趣的是,它允许用户访问用户对象的某些属性以创建自定义消息,甚至允许用户为某些属性设置默认值。
例如,如果用户想写一个帖子,以每个观看者的自定义问候语开头。他可以做这样的事情。
Hi user.name,
XXXX
XXXX
如果名为Akash的用户访问此页面,他将会看到
Hi Akash,
XXXX
XXXX
有许多属性可用于向应用程序上具有不同特权的用户显示不同的消息。
我创建了一个博客文章,开头是这样的问候
Hi user.name,
XXXX
XXXX
并从我的帐户访问了此页面,令我惊讶的是,它显示Hi 9,我没想到,但是随后我回忆起在设置页面上测试错误时,我输入了姓名{{3*3}},当时没有任何反应。我没有更改名称,而是继续测试其他功能
它正在执行表达式{{3*3}}并显示结果9。这意味着该应用程序容易受到客户端模板注入(CSTI)攻击。该应用程序正在使用AngularJS,并且帐户设置页面下名称字段中用户提交的输入(表达式)正在此博客页面上进行执行。
我希望找到一种利用此行为的方法,然后继续寻找IDOR,它可能允许攻击者更改用户名并将其替换为将用户的会话cookie发送到由攻击者控制的服务器,然后自动提交的方式更改其帐户电子邮件以接管其帐户。
不幸的是,我找不到IDOR,并得出结论认为,仅此行为是无法利用的,因为这只是一个无害的自我注入漏洞。
但是,等等,还记得我提到过该应用程序允许用户为某些属性设置默认值吗?攻击者可以将变量的默认值设置为CSTI有效载荷,以利用此漏洞点。
我将此AngularJS CSTI Payload设置为默认值 redacted_property.
{{a=toString().constructor.prototype;a.charAt=a.trim;$eval(‘a,alert(1),a’)}}
并redacted_property在博客上使用了
Hi user.name,
user.redacted_property
XXXX
XXXX
访问此页面时,我会看到一个警报弹出窗口经典的XSS PoC。

攻击者可以利用此方法来窃取用户的会话Cookie,或者更改其电子邮件地址并接管其帐户,
译者按:
模板注入,不仅仅有服务端模板注入,还有客户端模板注入,利用服务端模板注入,可以getshell获取服务器权限,利用客户端模板注入,可以xss盗取客户账号。
本文迁移自知识星球“火线Zone”