步骤 1:初步探索和帐户创建
为了开始评估,我在网站上创建了一个帐户,并导航到个人信息部分。此部分有多个输入字段,包括称谓、名字、姓氏、出生日期和电子邮件地址。我主要关注的是姓氏字段,因为它似乎接受了未经过滤的用户输入。
步骤2:测试SSTI漏洞
由于怀疑存在潜在的 SSTI 漏洞,我向姓氏字段注入了以下有效载荷:
{{{{ 7 * 7 }}}}
如果此有效载荷由服务器的模板引擎执行,它将执行一个简单的算术运算并显示结果。保存更改后,我在网页上观察了结果。
步骤3:验证SSTI执行
保存信息并刷新页面后,发现{{{{7*7}}}}
payload已经被服务器处理并渲染为{{7*7}}
。刷新页面后,计算结果就显示49
在页面上方角落,靠近Test标签的位置。
截图证明:
这证实了服务器端模板引擎在没有经过充分清理的情况下评估用户输入,从而允许 SSTI。
当计算结果显示出来时,显示49
在页面顶角的Test标签旁边。
步骤 4:分析和后续步骤
了解风险:
SSTI 漏洞构成重大安全风险。一旦被利用,可能导致:
- 数据暴露:攻击者访问敏感的服务器端数据。
- 远程代码执行 (RCE):可能在服务器上执行任意命令。
展望未来:
确认 SSTI 后,我的下一步包括:
- 探索服务器配置:
- jinja2
{{ config.items() }}
- 该有效载荷可以揭示配置细节和环境变量。
- 远程代码执行测试:为了评估严重性,我考虑使用如下有效载荷:
- jinja2
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}
- 如果成功,此有效载荷将执行命令以在基于 Unix 的系统上显示用户信息。
结论
在实时电商网站上发现 SSTI 漏洞,凸显了强大的输入过滤和安全编码实践的必要性。开发人员应该使用默认转义用户输入的模板引擎,或实施适当的验证和编码机制来降低此类风险。
原文始发于微信公众号(红云谈安全):电商网站 SSTI 漏洞利用:专业攻略
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论