如何成为专业提供WordPress电商平台服务的开发商?
摘要:做正规网站,wordpress开发商城,小说榜单首页百度搜索风云榜,网站开发的运行可行性Flask的网站,这里的功能是Base64编码解码,并输出 并且是存在SSTI的 hint
做正规网站,wordpress开发商城,小说榜单首页百度搜索风云榜,网站开发的运行可行性Flask的网站#xff0c;这里的功能是Base64编码解码#xff0c;并输出 并且是存在SSTI的 /hint 提示PIN码 既然提示PIN#xff0c;那应该是开启了Debug模式的#xff0c;解密栏那里随便输入点什么报错看看#xff0c;直接报错了#xff0c;并且该Flask开启了Debug模式这里的功能是Base64编码解码并输出 并且是存在SSTI的 /hint 提示PIN码 既然提示PIN那应该是开启了Debug模式的解密栏那里随便输入点什么报错看看直接报错了并且该Flask开启了Debug模式需要PIN码 参考ye1s师傅的Flask debug模式下的 PIN 码安全性
可知要获取PIN码需要知道以下几点
username运行该Flask程序的用户名modname模块名getattr(app, __name__, getattr(app.__class__, __name__))app名值为Flaskgetattr(mod, __file__, None)Flask目录下的一个app.py的绝对路径这个值可以在报错页面看到。但有个需注意Python3是 app.pyPython2中是app.pyc。str(uuid.getnode())MAC地址需要转换成十进制读取这两个地址/sys/class/net/eth0/address或者/sys/class/net/ens33/addressget_machine_id()系统id
从报错中还能看出来使用了render_template_string() 从这个render_template_string(tmp)看应该是使用的jinja2引擎编码{{config}}传入解密然后渲染执行 WAF的黑名单import、os、popen、flag、eval、*、?等 其实这里就可以使用拼接绕过了但是我们还是先来试试获取PIN码GetShell的
首先通过报错就可以得知很多信息Python3的环境以及
modnameflask.appgetattr(app, __name__, getattr(app.__class__, __name__))Flaskgetattr(mod, __file__, None)/usr/local/lib/python3.7/site-packages/flask/app.py 接下来可以通过SSTI去文件读取其他信息使用jinja2的控制结构语法构造
jinja2一共三种语法
控制结构 {% %}
变量取值 {{ }}
注释 {# #}
jinja2的Python模板解释器在构建的时候考虑到了安全问题删除了大部分敏感函数相当于构建了一个沙箱环境。
但是一些内置函数和属性还是依然可以使用而Flask的SSTI就是利用这些内置函数和属性相互组建来达到调用函数的目的
从而绕过沙箱。
