【小迪安全2023】第23天:WEB攻防-Python考点CTF与CMS-SSTI模版注入PYC反编译

本文主要是介绍【小迪安全2023】第23天:WEB攻防-Python考点CTF与CMS-SSTI模版注入PYC反编译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

大纲:

知识点:

演示案例:

1、SSTI入门-原理&分类&检测&分析&利用

1、什么是SSTI?有什么漏司危害?

2、如何判断检测SSTI漏河的存在?

3、SSTI会产生在那些语言开发应用?

4、SSTI安全问题在生产环境那里产生?

2、SSTI(模板注入)漏洞(cms实例篇)

题目练习:[WesternCTF2018]shrine


大纲:

知识点:

  • 1、PYC文件反编译

  • 2、Python-web-ssrr

  • 3、SSTI模版注入利用分析

演示案例:

  • PY反编译-PYC编译文件反编译源码

  • SSTI入门-原理&分类&检测&分析&利用

  • SSTI考点-CTF靶场-WestemnCTF日shrine

  • SSTI考点-CMS源码-MACCMS V8.X执行

  • PY反编译-PYC编译文件反编译源码

Pyc文件是py文件编译后生成的字节码文件(byte code),Pyc文件经过pythonf解释器,最终会生成机器码运行,因此pyc文件是可以跨平台部署的,类似Java的。

反编译在线平台:

python反编译 - 在线工具

在线pyc,pyo,python,py文件反编译,目前支持python1.5到3.6版本的反编译-在线工具

1、SSTI入门-原理&分类&检测&分析&利用

1、什么是SSTI?有什么漏司危害?

漏洞成因就是服务端接收了用户的恶意输入以后,未经任何处理就将其作为Web应用模板内容的一部分,模板引擎在进行目标编泽這染的过程中,执行了用户播入的可以破怀模板的语句,因而可影导数了散感信息泄露、代码执行、GetShe11等问题。其影响范围主要取决于模版引擎的复杂性。

2、如何判断检测SSTI漏河的存在?

输入的数据会被浏览器利用当前脚本语言调用解析执行

3、SSTI会产生在那些语言开发应用?
1、Python: 使用像Jinja2、Mako、Django等模板引擎的Python Web应用程序容易受到SSTI攻击。这些框架在处理用户输入时,如果不正确地进行了过滤或者模板渲染不安全,就容易受到攻击。2、Ruby: Ruby on Rails框架使用ERB(Embedded Ruby)作为默认的模板引擎,如果开发人员未正确处理用户输入,就可能导致SSTI漏洞。3、Java: 基于Java的Web应用程序通常使用像FreeMarker、Thymeleaf等模板引擎。如果这些模板引擎未受到适当的保护或者没有正确地过滤用户输入,就可能受到SSTI攻击。4、JavaScript/Node.js: 一些Node.js应用程序使用像Handlebars、Pug等模板引擎。如果这些模板引擎在处理用户输入时不安全,就可能存在SSTI漏洞。

4、SSTI安全问题在生产环境那里产生?
  • -存在模版引用的地方,如 404 错误页面展示
  • -存在数据接收引用的地方,如模版解析获取参数数据

参考文章:

https://swq111.online/index.php/2024/02/19/ssti模版注入特详版/

2、SSTI(模板注入)漏洞(cms实例篇)

参考链接:

https://www.cnblogs.com/bmjoker/p/13653563.html

常见的CMS模块SSTI注入源代码下载:

GitHub - bmjoker/Code-audit: 记录一下代码审计的资料

题目练习:[WesternCTF2018]shrine

模板渲染接受的参数需要用两个大括号括起来{{}},所以我们需要在大括号内构造参数形成注入

SSTI注入需要知道用的是什么模板引擎,参考这张图片

题目代码如下(可以右击查看源代码,这样更具清楚)

import flask
import osapp = flask.Flask(__name__)app.config['FLAG'] = os.environ.pop('FLAG')@app.route('/')
def index():return open(__file__).read()@app.route('/shrine/<path:shrine>')
def shrine(shrine):def safe_jinja(s):s = s.replace('(', '').replace(')', '')blacklist = ['config', 'self']return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + sreturn flask.render_template_string(safe_jinja(shrine))if __name__ == '__main__':app.run(debug=True)

可以看到有两个路由,第一个路由给出了显示出源代码,第二个路由在/shrine/路径下提交参数,模板中设定{{ }}包括的内容为后端变量,% %包括的内容为逻辑语句

我们尝试简单的SSTI注入测试:/shrine/{{2*2}}

我们查看源码,可以知道我们提交的参数之中的()会被置为空,同时会将黑名单(config或者self)内的内容遍历一遍,把参数内的与黑名单相同的置为none

s = s.replace('(', '').replace(')', '')blacklist = ['config', 'self']

根据前面分析我们需要看到config,这里面应该有一个FLAG的值

利用python里面的内置函数,比如url_forget_flashed_messages

url_for() 方法:url_for() 会返回视图函数对应的URL。如果定义的视图函数是带有参数的,则可以将这些参数作为命名参数传入。get_flashed_messages() 方法:返回之前在Flask中通过 flash() 传入的闪现信息列表。把字符串对象表示的消息加入到一个消息队列中,然后通过调用 get_flashed_messages() 方法取出(闪现信息只能取出一次,取出后闪现信息会被清空)。

注入{{url_for.globals}}查看里面的变量信息

/shrine/{{url_for.__globals__}}

/shrine/{{url_for.__globals__['current_app'].config}}

注入config.FLAG拿flag值:

/shrine/{{url_for.__globals__['current_app'].config.FLAG}}

这篇关于【小迪安全2023】第23天:WEB攻防-Python考点CTF与CMS-SSTI模版注入PYC反编译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/903388

相关文章

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提