第22天
.pyc文件
.pyc
文件是Python编译器创建的已编译的Python代码文件。当你运行Python程序时,Python解释器将.py
文件(即源代码)编译成中间形式,这就是.pyc
文件。这个过程称为“字节编译”,生成的.pyc
文件包含的是字节码,这种字节码不能直接被计算机的处理器执行,而需要Python虚拟机来解释执行。
如果攻击者获得了pyc文件,那么就可以反编译这个pyc文件获得源py程序代码,相当于可以直接看到源代码,但是一般很难获得pyc文件,只有在CTF比赛中出题者会给出
SSTI
服务器端模板注入(Server Side Template Injection,SSTI) 是一种攻击,其中攻击者能够利用动态模板文件的漏洞,插入恶意代码。这种攻击通常发生在网站或应用程序使用模板引擎渲染内容。Flask作为一个轻量级的Python web框架,常用Jinja2模板引擎来渲染HTML页面。如果开发者未正确限制用户输入,就可能导致SSTI。
产生原因
- 用户输入未经过滤直接传入模板:当应用程序将用户输入作为模板的一部分而未进行适当的过滤或限制时,攻击者可以插入模板语法,执行不安全的代码。
- 模板引擎功能强大:Jinja2等模板引擎提供了访问对象属性、执行函数等功能。如果攻击者能够控制到这些功能的调用,就可能执行恶意代码。
- 不正确的配置或开发习惯:开发者可能不完全了解模板引擎的潜在风险,或者为了方便而允许过多的用户控制。
常用Payload
下面是针对Flask应用中使用的Jinja2模板引擎的一些常见SSTI payload示例。使用这些payload仅限于教育和合法的渗透测试活动。
-
基本测试:
{{ 7*7 }}
或者{{ config }}
- 这些payload试图执行简单的表达式或尝试访问Flask的配置对象来验证SSTI的存在。
-
读取文件:
{{ ''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read() }}
- 这个payload试图访问Python的内部类,通过类的继承关系来读取文件系统上的文件。
-
执行命令:
{{''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['os'].popen('whoami').read()}}
- 这个payload尝试通过访问Python内部的全局变量来执行操作系统命令。
-
获取Shell:虽然具体获取shell的payload会根据目标环境的具体配置有所不同,但基本思路是通过SSTI执行命令来下载并执行反向Shell脚本。
防护措施
- 严格的输入验证:对所有用户输入进行严格的验证和过滤。
- 最小化模板引擎的功能:限制模板引擎可以访问的功能和变量。
- 使用安全库:使用如Flask-Talisman这样的库,增加额外的安全措施。
- 代码审计和安全测试:定期进行代码审计和安全测试,以发现和修复潜在的安全问题。
MacCMS
MacCMS是一款流行的内容管理系统(CMS),广泛用于视频网站的构建和管理。它提供了丰富的功能和插件,以支持视频内容的添加、管理和播放,使得创建和维护一个视频分享或视频点播网站变得相对容易。MacCMS是基于PHP开发的,因此它继承了基于Web和PHP环境下常见的安全风险和挑战。
常用payload:
index.php?m=vod-search&wd={if-A:phpinfo0Hendif-A}
该payload是由于cms代码里有一个eval函数,并且接受url的变量,因此通过分析代码以及变量可以反向构造出此payload