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

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

#知识点:

1PYC 文件反编译

2Python-Web-SSTI

3SSTI 模版注入利用分析

各语言的SSIT漏洞情况:

SSIT漏洞过程:

https://xz.aliyun.com/t/12181?page=1&time__1311=n4fxni0Qnr0%3DD%2FD0Dx2BmDkfDCDgmrYgBxYwD&alichlgref=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Dxzkjf9x2jM5-hdX-jJhGSyVYqNrH1jEYt9WhW4TlMDot3yoBSI43ZbwS-Ylyj9m1%26wd%3D%26eqid%3Dd46bd7a8000144420000000665b26349

一、PY 反编译-PYC 编译文件反编译源码

pyc (pyd、pyo都是一样的)文件是 py 文件编译后生成的字节码文件(byte code)pyc 文件经过 python 解释器最终会生成机器码运行。因此 pyc 文件是可以跨平台部署的,类似 Java .class,.jar文件,一般 py 文件改变后,都会重新生成 pyc 文件。

python反编译 - 在线工具

对pyc文件进行反编译

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

SSTI:

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

网站更改模板后,界面会改但数据不会;在界面修改过后的数据接受,传入类似的数据一般就会被接受和执行。  针对于模板

from flask import Flask
from flask import request
from flask import config
from flask import render_template_string
app = Flask(__name__)app.config['SECRET_KEY'] = "flag{SSTI_123456}"
@app.route('/')//连接路由
def hello_world():return 'Hello World!'@app.errorhandler(404)//404报错,并进入以下的结构
def page_not_found(e):template = '''
{%% block body %%}//html的界面<div class="center-content error"><h1>Oops! That page doesn't exist.</h1><h3>%s</h3>//%python的参数变量</div> 
{%% endblock %%}
''' % (request.args.get('404_url'))//输入的参数,获取return render_template_string(template), 404if __name__ == '__main__':app.run(host='0.0.0.0',debug=True)//执行的访问地址

输入错误的地址

查看源代码

对404_url——get获值进行传参

这时可得知此网页存在着SSIT漏洞,原因是:错误的页面中将变量进行接受并执行了

传入的数据会变成py代码去实行,所以可以进行shell反弹,将服务器的权限直接提到自己的电脑里

Web应用是有很多的模板,

<div class="center-content error">

        <h1>Oops! That page doesn't exist.</h1>

        <h3>去数据的变量(可控变量)</h3>

可控值需留给数据库语句去操作取出数据(标题)并显示,方便了报错后的界面样式,如果这里是不固定的则可以进行注入,输入攻击代码

</div>

SSTI产生的场景:

存在模版引用的地方,如 404 错误页面展示

存在数据接收引用的地方,如模版解析获取参数数据

Ø SSTI 考点-CTF 靶场-[WesternCTF]shrine

由题得知,此题中的flag是在FLAG的文件中,索引会打开文件进行读取,并且shrine作为变量,被进行过滤”()”(这里是限制了python的函数);flask.render_template_string模板解析函数

测试ssti,2-2执行了,故存在

绕过:可运用一些特殊的函数

url_for.__globals__:获取当前脚本里的全局变量

url_for.__globals__['current_app'].config:获取当前脚本里的config的所有值

url_for.__globals__['current_app'].config[‘FLAG’]

url_for.__globals__['current_app'].config.FLAG

Python Flask,Jinja2模板,模板中使用特殊变量及函数,闪现信息,get_flashed_messages()_jinja2 get_flashed-CSDN博客

Ø SSTI 考点-CMS 源码-MACCMS_V8.X 执行

Maccms:隐私系统

Payload:index.php?m=vod-search&wd={if-dddd:phpinfo()}{endif-dddd}

index.php?m=vod-search

wd={if-dddd:phpinfo()}{endif-dddd}

进行代码分析

找m变量

了解be函数(自定义函数)

了解逻辑之后,m的值会经过过滤之后,给ac变量

并以包含的形式

我们在代码中将ac变量输出,发现是vod.php

所以去vod.php文件

由于我们m的值为vod-search

找到了wd变量,得知与tpl变量有关

在index.php文件找到tpl的由来,进行查找

注意到eval函数,eval函数会将变量值进行PHP执行

Wd输入的格式:{if-([\s\S]*?):([\s\S]+?)}([\s\S]*?){endif-\1}

输出strif

补:判断网页由python制作

查看中间件容器:Werkzeug通常都是以python为主

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



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

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

详解python pycharm与cmd中制表符不一样

《详解pythonpycharm与cmd中制表符不一样》本文主要介绍了pythonpycharm与cmd中制表符不一样,这个问题通常是因为PyCharm和命令行(CMD)使用的制表符(tab)的宽... 这个问题通常是因为PyCharm和命令行(CMD)使用的制表符(tab)的宽度不同导致的。在PyChar