[网络安全]一文带你了解SSTI漏洞(结合Web_python_template_injection解题详析)

这篇具有很好参考价值的文章主要介绍了[网络安全]一文带你了解SSTI漏洞(结合Web_python_template_injection解题详析)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SSTI漏洞

SSTI是Server-Side Template Injection的缩写,是一种Web应用程序安全漏洞,主要存在于使用基于模板引擎的Web应用程序中。

SSTI漏洞的主要原因是在Web应用程序中使用了基于模板引擎的渲染功能,并且没有正确地验证和过滤用户输入的数据。当攻击者能够构造特定的输入并成功地注入恶意代码时,模板引擎会将该代码当做合法的模板片段来处理,导致服务器端执行该代码。

漏洞分类

  1. 条件语句注入:攻击者在应用程序中的条件语句中注入模板代码,从而控制条件判断的分支,导致程序的逻辑错误。这种注入通常发生在基于条件语句的模板引擎,如 DjangoJinja2中。

  2. 命令执行注入:攻击者在应用程序中的命令执行语句中注入模板代码,从而执行任意系统命令,获取系统权限,对系统进行攻击等。这种注入通常发生在使用反序列化操作等动态执行代码的模板引擎中,如 FreeMarkerVelocity 等。

  3. 变量渲染注入:攻击者在应用程序中的变量渲染语句中注入模板代码,从而影响页面的输出,导致代码执行或信息泄漏等问题。这种注入通常发生在基于语法标签的模板引擎,如 Smarty 等中。

  4. 其他注入:SSTI 漏洞还有一些其他的注入方式,如在 URL、请求头、Cookie 等参数中注入模板代码,通过多重注入实现攻击等。

魔术方法

在一些模板引擎中,存在一些用于访问对象属性和方法的魔术方法,可利用这些魔术方法构造SSTI漏洞。

1. __class__:通过该魔术方法,攻击者可以获取目标对象的类名并进行操作。

2. __bases__:该魔术方法返回目标对象所在类的所有父类的元组,
并且攻击者可以根据这些信息来构造恶意代码。

3. __subclasses__():该魔术方法返回目标对象的所有子类,
并且攻击者可以根据这些信息来构造恶意代码。

4. __globals__:该魔术方法返回当前作用域中的所有全局变量,
并且攻击者可以利用这些变量来执行恶意代码。

5. __import__():该魔术方法用于动态加载模块,
并且攻击者可以利用这个方法来执行任意代码。

姿势

ssti漏洞,# CTF赛题,网络安全,python,SSTI漏洞,网络安全

判断是否存在SSTI漏洞

Payload:{{1+1}}

ssti漏洞,# CTF赛题,网络安全,python,SSTI漏洞,网络安全如上图,存在SSTI漏洞。

查看所有子类

Payload:[].__class__.__base__.__subclasses__()

调用 class 方法获取的是 [] 所处的类 list。接着,通过 base 方法获取了 list 类的基类 object。然后再调用 subclasses() 方法,获取的是 object 的所有子类,也就是所有 Python 中定义的类,以及这些类的子类和后代类

ssti漏洞,# CTF赛题,网络安全,python,SSTI漏洞,网络安全

查找warnings.catch_warnings函数

在Python 3中,如果一个未受信任的程序调用warnings.showwarning()函数,则warnings.catch_warnings()上下文管理器将捕获到 RuntimeWarning 警告。

在warnings.catch_warnings()未被禁用前,可以在模板注入中使用 warnings.catch_warnings() 来允许在 Python 3 环境下成功读取文件内容

ssti漏洞,# CTF赛题,网络安全,python,SSTI漏洞,网络安全由上图,warnings.catch_warnings函数位于第59个type中

查找warnings.catch_warnings函数内模块

构造Payload:
{{[].__class__.__base__.__subclasses__()[59].__init__.func_globals.keys()}}

在object 子类列表中第 59 个子类中(即第59个type中), 调用__init__.func_globals.keys() 方法返回其初始化函数的全局作用域(即所有的变量、函数)

ssti漏洞,# CTF赛题,网络安全,python,SSTI漏洞,网络安全发现linecache函数

在 Python 3 中,当使用警告时,如果Python没有找到对应的源文件,则会引发一个 linecache 警告。可利用此特性,在未找到源文件的情况下成功读取flag

查看linecache中os模块


为什么需要查看 linecache 中的 os 模块?

在 Python 3 中,当对一个未导入的模块(如 os 模块)执行 eval() 函数时,linecache 模块会发出一个警告,可利用这个警告来读取敏感信息。


Payload:
{{().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").popen("ls").read()')}}

获取第 59 个type的__init__.func_globals.values()[13]['eval']属性,然后使用 Python 的 eval() 函数来执行字符串 __import__(\"os\").popen(\"ls\").read()

__init__用来创建一个 Python 代码字符串所对应的函数对象,func_globals.values() 返回一个字典视图对象,包含了定义在该方法中的所有全局变量和函数。而 [13] 则是用来获取该字典视图中的第 13 个元素。由于这个方法中定义了一个名为 eval 的全局函数变量,因此该元素为 eval 函数本身。

在 Python 中,eval() 函数可以动态地解析并执行字符串作为 Python 代码进行计算。执行 os.popen("ls").read()命令,可获取当前目录下的所有文件列表

ssti漏洞,# CTF赛题,网络安全,python,SSTI漏洞,网络安全

查看fl4g文件内容

Payload:{{().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").popen("cat fl4g").read()')}}

os.popen("cat fl4g").read() 命令用于读取名为 fl4g 的文件中的内容
ssti漏洞,# CTF赛题,网络安全,python,SSTI漏洞,网络安全

总结

以上为SSTI漏洞原理分析并结合攻防世界Web_python_template_injection实例进行解题详解,希望读者躬身实践。

我是秋说,我们下次见。文章来源地址https://www.toymoban.com/news/detail-714451.html

到了这里,关于[网络安全]一文带你了解SSTI漏洞(结合Web_python_template_injection解题详析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络安全】带你了解什么是【黑客】

    随着科技的迅猛发展和互联网的普及,黑客一词也逐渐进入了我们的日常生活。然而,黑客并不仅仅是一个贬义词,它有着复杂而多样的内涵。本文将从多个角度对黑客进行探讨,以帮助读者更好地了解黑客文化的本质。 黑客(Hacker)是指那些具备计算机技术专业知识,并能

    2024年02月16日
    浏览(42)
  • CTF是什么?一文带你读懂网络安全大赛

    💻随着大数据、人工智能的发展,人们步入了新的时代,逐渐走上科技的巅峰。 ⚔科技是一把双刃剑,网络安全不容忽视,人们的 隐私 在大数据面前暴露无遗,账户被盗、资金损失、网络诈骗、隐私泄露,种种迹象表明,随着互联网的发展, 网络安全 需要引起人们的重视

    2024年02月07日
    浏览(65)
  • 【网络安全】一篇文章带你了解CTF那些事儿

    CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。已经成为全球范围网络安全圈流行的竞赛形式,2013年全

    2024年02月08日
    浏览(59)
  • linux【网络编程】之HTTPS协议,一文了解HTTPS是如何保证通信安全的

    在上篇文章中我们了解到什么事HTTP协议,HTTP协议内容都是按照⽂本的⽅式明⽂传输的.这就导致在传输过程中出现⼀些被篡改的情况,本期我们来探讨一下HTTPS协议。 HTTPS( 超文本传输安全协议 )也是⼀个应⽤层协议.是在HTTP协议的基础上引⼊了⼀个加密层. HTTPS:默认端口与

    2024年02月08日
    浏览(61)
  • 【网络安全 --- 任意文件上传漏洞靶场闯关 6-15关】任意文件上传漏洞靶场闯关,让你更深入了解文件上传漏洞以及绕过方式方法,思路技巧

      首先分享一个自己做的很不错的网路安全笔记,内容详细介绍了许多知识 超详细的网络安全笔记 分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取: 超详细的网络安全笔记​编辑https://m.tb.cn/h.5JdFcih?tk=OuVrWRl9vMx%20CZ3457 https://m.tb.cn/

    2024年02月07日
    浏览(48)
  • 一文带你了解注册信息安全专业人员CISP

    CISP即\\\"注册信息安全专业人员\\\",系国家对信息安全人员资质的最高认可。英文为Certified Information Security Professional (简称CISP),CISP系经中国信息安全测评中心实施国家认证。 CISP证书涵盖方向: “注册信息安全工程师”,英文为Certified Information Security Engineer,简称 CISE。证书持

    2024年02月02日
    浏览(41)
  • 【AI广延 | GAN】一文带你了解生成对抗网络

    近年来,深度学习在很多领域的都取得了突破性进展,但大家似乎发现了这样的一个现实,即深度学习取得突破性进展的工作基本都与判别模型相关。 也就是说,生成模型并没有被好好地运用以释放其潜能。生成模型关注于分析和理解数据背后的生成过程,能够生成与训练数

    2024年02月05日
    浏览(50)
  • 【宝藏系列】一文带你了解STM32内置的硬件功能安全属性

    对于功能安全,ST MCU 从芯片内置的硬件安全属性,经过认证的软件自检库和完备的安全文档三个层面来支持STM32用户在系统级进行开发,达到要求的功能安全等级。 下表中列出了STM32MCU内置的一些主要硬件安全属性。下面我们一起来看看这些属性在功能安全中的用处。 🌸🌸

    2024年02月10日
    浏览(36)
  • 一文带你彻底了解java 网络编程的基本概念

    主题:探索Java网络编程:构建连接世界的桥梁 作者:Stevedash 发布日期:2023年8月11日 15点18分 (PS:这一篇文章作为总章,今天着重讲“Socket套接字编程”这里的知识,其他模块的知识,后续补上,拆分成单独章节来慢慢完善该文,并且后面会附带上其他文章的链接,会持续

    2024年02月13日
    浏览(51)
  • 【硬件安全】一文带你了解单片机故障注入知识,绕过保护提取固件

    在物联网设备的物理安全评估期间,目标之一是利用调试接口或可访问的芯片来研究设备的工作原理。理想的情况是提取完整的文件系统,以找到一种方法来获取对设备的 root 访问权限。然后,可以更轻松地检查正在运行哪些服务,并在需要时对其进行调试,以最终控制目标

    2024年02月03日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包