小迪安全23WEB 攻防-Python 考点CTF 与 CMS-SSTI 模版注入PYC 反编译
#知识点:
1、PYC 文件反编译
2、Python-Web-SSTI
3、SSTI 模版注入利用分析
各语言的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 反编译
#知识点: 1、PYC 文件反编译 2、Python-Web-SSTI 3、SSTI 模版注入利用分析 各语言的SSIT漏洞情况: SSIT漏洞过程: https://xz.aliyun.com/t/12181?page1&time__1311n4fxni0Qnr0%3DD%2FD0Dx2BmDkfDCDgmrYgBxYwD&alichlgrefhtt…...
计算机毕业设计 基于SpringBoot的律师事务所案件管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
如何使用宝塔面板配置Nginx反向代理WebSocket(wss)
本章教程,主要介绍一下在宝塔面板中如何配置websocket wss的具体过程。 目录 一、添加站点 二、申请证书 三、配置代理 1、增加配置内容 2、代理配置内容 三、注意事项 一、添加站点 二、申请证书 三、配置代理 1、增加配置内容 map $http_upgrade $connection_…...
vulhub之redis篇
CVE-2022-0543 | redis的远程代码执行漏洞 简介 CVE-2022-0543 该 Redis 沙盒逃逸漏洞影响 Debian 系的 Linux 发行版本,并非 Redis 本身漏洞, 漏洞形成原因在于系统补丁加载了一些redis源码注释了的代码 原理分析 redis一直有一个攻击面,就是在用户连接redis后,可以通过ev…...
Lua简介和应用场景介绍
Lua 的介绍 起源:Lua 于 1993 年在巴西里约热内卢的天主教大学(PUC-Rio)由 Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo 开发。 设计目的:Lua 设计的主要目标是为了嵌入到其他应用程序中,…...
【手写数据库toadb】10 开发数据库内核开发阶段-数据库模型
数据库内核模型介绍 专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方…...
02-Redis持久化、主从与哨兵架构详解
文章目录 Redis持久化RDB快照(snapshot)bgsave的写时复制(COW)机制AOF(append-only file)AOF重写RDB 和 AOF ,我应该用哪一个? Redis 4.0 混合持久化Redis数据备份策略: Redis主从架构redis主从…...
无刷电机篇(一)直流无刷电机(BLDC)介绍
目录 01 直流无刷电机介绍 直流无刷电机内部结构 转子描述 定子描述 02 直流无刷电机分类 直流无刷电机分类描述 内、外转子电机描述 内、外转子电机区别 03 直流无刷电机参数 无刷电机参数 04 文章总结 大家好,这里是程序员杰克。一名平平无奇的嵌入式软…...
【GitHub项目推荐--不错的Flutter项目】【转载】
01 可定制的图表库 FL Chart是一个高度可定制的 Flutter 图表库,支持折线图、条形图、饼图、散点图和雷达图 。 项目地址:https://github.com/imaNNeoFighT/fl_chart LineChart BarChart PieChart Sample1 Sample2 Sample3 …...
Unity UnityWebRequest 向php后端上传图片文件
之前测试功能写过一次,因为代码忘记保存,导致真正用到的时候怎么也想不起来当初怎么写的了,复现后还是写个文章记录一下,省的下次再忘记。 php后端 /*** 图片保存到本地*/ public function uploadLocalImage() {try {$img $thi…...
Vscode 顶部Menu(菜单)栏消失如何恢复
Vscode 顶部Menu(菜单)栏消失如何恢复? 首先按一下 Alt按键,看一下是否恢复了菜单栏如果恢复了想了解更进一步的设置,或是没能恢复菜单栏,可以看后续。 1.首先点击左下角 齿轮,打开settings; 或者 直接 ctrl 逗号 …...
Jenkins相关
1、Linux(Centos7)安装 jenkins (jdk1.8jenkins2.346),并配置jdk,maven,git,gitee 2、Linux(Centos7)安装 jenkins(jdk11jenkins2.375),并配置JDK,Maven,Git,GitLab 3、jenkins和jdk安装教程(安装支持jdk…...
禅道的安装以及使用
一,简介 禅道是一款专业的国产开源研发项目管理软件,集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,完整覆盖了研发项目管理的核心流程。管理思想基于国际流行的敏捷项目管理方法——Scrum,在遵循其价值观…...
马尔可夫预测(Python)
马尔科夫链(Markov Chains) 从一个例子入手:假设某餐厅有A,B,C三种套餐供应,每天只会是这三种中的一种,而具体是哪一种,仅取决于昨天供应的哪一种,换言之&#…...
双向队列的创建队首与队尾的操作deque()
【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 双向队列的创建 队首与队尾的操作 deque() [太阳]选择题 请问以下代码输出的结果是? from collections import deque print("【创建双向队列】d deque()") d deque(…...
一、MongoDB、express的安装和基本使用
数据库【Sqlite3、MongoDB、Mysql】简介&小记 Sqlite3: SQLite3是一个轻量级的数据库系统,它被设计成嵌入式数据库。这意味着它是一个包含在应用程序中的数据库,而不是独立运行的系统服务。适用场景:如小型工具、游戏、本地…...
被困住了——如何从层级结构中获取子集
大家好,我是欧阳方超,我被一个问题困住了。 事情是这样的,与第三方平台对接时,第三方接口返回了一个具有层级结构的列表,比如下面这种结构: [{"id": 1,"name": "Root Category 1…...
leetcode1237. 找出给定方程的正整数解
1237. 找出给定方程的正整数解https://leetcode.cn/problems/find-positive-integer-solution-for-a-given-equation/ 难度中等 101 给你一个函数 f(x, y) 和一个目标结果 z,函数公式未知,请你计算方程 f(x,y) z 所有可能的正整数 数对 x 和 y。满…...
sqlmap使用教程(6)-注入技术拓展
注入技术 选项--technique,可以用来指定SQL注入技术,默认为BEUSTQ。其中,B表示基于布尔盲注,E表示基于错误的盲注,U表示基于联合查询注入,S表示堆叠注入,T表示基于时间盲注,Q表示内联…...
苹果Find My市场需求火爆,伦茨科技ST17H6x芯片助力客户量产
苹果发布AirTag发布以来,大家都更加注重物品的防丢,苹果的 Find My 就可以查找 iPhone、Mac、AirPods、Apple Watch,如今的Find My已经不单单可以查找苹果的设备,随着第三方设备的加入,将丰富Find My Network的版图。产…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
