【小迪安全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}}

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

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

相关文章

【JAVA基础篇教学】第十五篇:Java中Spring详解说明

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第十五篇&#xff1a;Java中Spring详解说明。 Spring 框架是一个广泛应用于 Java 开发的轻量级、全栈式的企业应用开发框架&#xff0c;它提供了众多功能强大的模块&#xff0c;用于简化企业级应用程序的开发。下面详细说…

光纤收发器的注意事项

光纤收发器有各种不同的类别&#xff0c;而实际使用中最受关注的是根据光纤收发器的不同类别&#xff1a;SC连接器光纤收发器和FC/ST连接器光纤收发器。 当使用光纤收发器连接到不同的设备时&#xff0c;必须小心使用不同的端口。 1.光纤收发器与100Base TX设备&#xff08;交…

第二期书生浦语大模型训练营第三次笔记

RAG RAG是什么&#xff1f; RAG&#xff08;Retrieval Augmented Generation&#xff09;技术&#xff0c;通过检索与用户输入相关的信息片段&#xff0c;并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺…

js所有的引用类型(数组,对象,函数)都具有对象的特性

Object 类型&#xff1a;这是最基础的对象类型&#xff0c;可以包含属性和方法&#xff0c;属性的键可以是字符串或者符号&#xff0c;属性值可以是任意类型的数据。 Array 类型&#xff1a;数组是特殊的对象&#xff0c;用于存储有序的数据集合。它提供了一些内置方法来操作这…

ssh 使用

ssh 使用 一、ssh 安装二、ssh 使用1. ssh 登录2. ssh-keygen 免密登录(1) ssh 生成密钥(2) 开启远程主机的密钥登陆(3) ssh 分发公钥 3. ssh-copy-id 复制公钥到远程主机4. scp 复制 系统环境: linux(ubuntu,debian,kali) 一、ssh 安装 sudo apt update sudo apt install op…

13015.交叉编译移植libz库

文章目录 1 背景2 交叉编译流程2.1 下载源码2.2 编译2.3 测试代码2.4 交叉编译app程序2.5 压缩及效率测试 1 背景 需要再app中使用压缩算法&#xff0c;不能直接移植gzip&#xff0c;gzip交叉编译得到gzip&#xff0c;应该使用libz代码 进行编译生成libz库. 2 交叉编译流程 …

面试手撕合集

82.删除排序链表中的重复元素II 定义单个指针 cur&#xff0c;指向虚拟头节点。如果 cur.next cur.next.next&#xff0c;说明 cur 后面的两个节点重复&#xff0c;例如 节点2 后面存在 2个节点3。我们令 节点2 -> 节点4&#xff0c;实现删除两个节点3的操作。 class Solut…

tcp 为什么要三次握手

TCP三次握手流程&#xff1a; 首先客户端发起请求&#xff0c;想服务端发送SYN报文服务端接收到客户端请求过后&#xff0c;产生SYNACK报文&#xff0c;并将SYNACK报文返回给客户端客户端收到SYNACK报文之后将此报文再发回服务端&#xff0c;至此三次握手完成&#xff0c;连接…

机器人方向控制中应用的磁阻角度传感芯片

磁阻传感器提供的输出信号几乎不受磁场变动、磁温度系数、磁传感器距离与位置变动影响&#xff0c;可以达到高准确度与高效能&#xff0c;因此相当适合各种要求严格的车用电子与工业控制的应用。所以它远比采用其它传感方法的器件更具有优势。 机器人的应用日渐广泛&#xff0…

Linux Debian安装教程

Debian 是一个免费的开源操作系统&#xff0c;是最古老的 Linux 发行版之一&#xff0c;于 1993 年由 Ian Murdock 创建。它采用了自由软件协议&#xff0c;并且由志愿者社区维护和支持。Debian 的目标是创建一个稳定、安全且易于维护的操作系统&#xff0c;以自由软件为基础&a…

吴恩达机器学习笔记:第 7 周-12支持向量机(Support Vector Machines)12.4-12.6

目录 第 7 周 12、 支持向量机(Support Vector Machines)12.4 核函数 1 第 7 周 12、 支持向量机(Support Vector Machines) 12.4 核函数 1 回顾我们之前讨论过可以使用高级数的多项式模型来解决无法用直线进行分隔的分类 问题&#xff1a; 为了获得上图所示的判定边界&…

电子元器件线上交易商城搭建的价值和必要性-加速度jsudo

随着科技的飞速发展&#xff0c;电子元器件行业正迎来前所未有的变革。为了满足市场对于电子元器件采购的便捷性、高效性和多样性的需求&#xff0c;电子元器件商城的开发显得尤为重要。本文将探讨电子元器件商城开发的重要性、主要功能以及它如何助力行业发展。 电子元器件商城…

gles+egl+drm+gbm实现开机动画

基于安卓开机动画修改 /* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the Li…

[后端开发] 过滤器相关注解

一、背景 使用Springboot框架开发后端&#xff0c;在鉴权的时候使用到了过滤器。但是在测试的过程发现&#xff0c;跨域的过滤器在过滤链中出现了两次&#xff0c;导致前端访问后端接口时报错&#xff1a;The Access-Control-Allow-Origin headers contains multiple values,b…

【word】文档标题如何自动编号

我在写一个word文档的时候&#xff0c;每一级标题的格式都设置好了&#xff0c;包括字体&#xff0c;大小等等&#xff0c;但是如何自动编号呢&#xff1f; 在写中期报告的时候&#xff0c;我对每一级标题的格式都创建了一个单独的样式&#xff0c;像这样&#xff1a; 对于每一…

探索Spring、Spring Boot和Spring Cloud的奇妙关系(二)

本系列文章简介&#xff1a; 在当今快节奏、高竞争的软件开发世界中&#xff0c;构建可靠、高效的应用程序是至关重要的。而Spring框架一直以来都是业界领先的Java开发框架之一&#xff0c;帮助开发者简化了复杂的任务&#xff0c;并提供了丰富的功能和强大的支持。 然而&#…

Vue3——Tinymce6富文本编辑器的使用方法

TinyMCE 6 是一款功能强大且灵活的富文本编辑器&#xff0c;可以嵌入到 Web 应用程序中。 一、安装 本文的讲解主要以tinymce6 版本为例 官网地址 Migrating from TinyMCE 5 to TinyMCE 6 | TinyMCE Documentation ​ 要将 TinyMCE 添加到项目中&#xff0c;请执行以下操…

IO流及流的分类

1.java IO流 (1). java程序中&#xff0c;对于数据的输入输出操作是以流的方式进行的.可以看作是数据的流动. (2). IO流中的I/O的input/output的缩写.IO技术是非常实用的技术.用于处理设备之间的数据传输&#xff0c;比如读写文件. 以程序作为参考点.input() : 读取外部数据…

ssh: connect to host github.com port 22: Connection refused fatal

ssh: connect to host github.com port 22: Connection refused 是连接github.com的端口号22拒绝连接。 可以使用github的443端口 $ vim ~/.ssh/config # 如果没有config 文件就新建一个 Host github.com Hostname ssh.github.com Port 443