SSTI-2 继承关系 & 魔术方法

2023-11-13

主要内容学习自 B站 重庆橙子科技 SSTI 模板注入

我力推橙子科技的所有 CTF 课程!

ssti


由于在模板注入时,我们能够注入的地方,终究只是一个变量,而不是 Python 语句。所以直接注入 Python 语句是不能执行的,需要一些特殊操作让变量类型转换为函数或方法。这个转换过程,就涉及到了 Python 中类的继承关系以及魔术方法的使用。在这之前,我们应该先理解面向对象技术。

一、继承关系

继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系。—菜鸟教程 Python 基础教程

在 python 中,类之间是会有继承关系的,也就是派生类(子类)与基类(父类)的关系,这可以理解为父子关系。在这个父子关系中的最高级,就是 object 。也就是说,object 是祖宗类。
一般来说,SSTI 构造 payload 的思想,就是要通过各个数据类型 Numbers(数字)String(字符串)List(列表)Tuple(元组)Dictionary(字典) 这些子类,一直往上找到 object ,然后再通过找 object 类可以利用的子类。可以利用的子类,就是这个子类的方法(popen() eval()等方法)或属性可以利用。

二、魔术方法

在 python 中,魔术方法是一种两边以双下划线 __ 包裹的特殊方法,利用这些方法,我们可以实现类的寻找,初始化对象的成员,以及最后的利用。

常用魔术方法及作用

单下划线、双下划线、头尾双下划线说明:
__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。—菜鸟教程 Python 基础教程

__class__ : 以字符串形式返回当前对象所属类
__base__ : 以字符串形式返回当前类的基类
__bases__ : 以元组()形式返回当前类的所有基类
__mro__ : 以元组()形式返回从当前类到 object 类的所有类,顺序为从子类逐级往上。 __mro__[1] 或者 __mro__[-1] 都可以得到 object 类。
__subclasses__() : 以列表[]形式返回当前类的下一级所有子类
__init__ : 构造函数,当类被实例化时可以用它来快捷的初始化一些属性。SSTI 中可以用它获取选定子类的初始化方法。
__globals__ : __globals__在函数后使用,以字典形式返回当前位置的所有全局变量,包括所有导入的变量。当其在 __init__ 后使用时,即获取初始化方法的全局变量字典。这些变量可能是模块、方法、变量。

通过以上魔术方法,再配合一些系统命令,就可以构造出基本的 payload 了。

一个示例:

name={{''.__class__.__mro__[-1].__subclasses__()[199].__init__.__globals__['os'].popen("ls -l /opt").read()}}

另一个示例:

name={{"".__class__.__base__.__subclasses__()[139].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('ifconfig').read()")}}

payload 前的 '' 表示一个空字符串,类似的,还可以使用:"" 字符串 () 元组 [] 列表 {} 字典。它们都是数据类型的实例对象。

为什么是[199]、[139]?
因为这他们含有执行系统命令需要的函数 eval() popen()等,关于这个的更多细节,将在下节提到。

事实上,ssti 的 payload 利用方法,构造形式很多,这涉及到很多对 python 的理解。所以我得抓紧补补 python 了。


参考

Flask基础及模板注入漏洞(SSTI)
SSTI模板注入总结
Python 面向对象 | 菜鸟教程
2分钟让你明白什么是面向对象编程
ssti小总结

By QING

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSTI-2 继承关系 & 魔术方法 的相关文章

  • 双系统安装win7出现grub怎么解决

    我们在重装系统时 特别苹果装双系统时 会出现安装过程或者安装后的问题 发现系统开机显示grub 导致不能正常进入系统 让人很是着急 其实出现这种情况是因为系统找不到主引记录所导致 只要重建主引记录mbr即可解决 下面小编就教教大家win7系
  • 网络安全现状:揭秘白帽黑客的真实收入

    前言 作为一个网络安全行业五年打工仔 今天就来看看黑客的收入和方向怎么样 一个黑客年薪是多少呢 外界普遍认为黑客是高收入群体 那么你想过黑客是怎么获得收入的吗 黑客分为白帽黑客和黑帽黑客 处于黑白两道的黑客会的技术都有些相似 但是却是对立的
  • IT圈大实话!卷运维不如卷网络安全

    前言 在刚刚过去的金九银十 我进行了多场网络安全的技术面试 我发现最近很多从事运维的选择了辞职 转行到了网络安全这个发展路线 说实话 运维工程师这个岗位在IT行业里面确实是处于最底层的 不管什么环节出现问题 基本都是运维背锅 薪资水平也比不
  • 为什么这么多人自学黑客,但没过多久就放弃了(掌握正确的网络安全学习路线很重要)

    网络安全是一个 不断发展和演变 的领域 以下是一个 网络安全学习路线规划 旨在帮助初学者快速入门和提高自己的技能 基础知识 网络安全的 基础知识 包括 网络结构 操作系统 编程语言 等方面的知识 学习这些基础知识对理解网络安全的原理和技术至
  • “性能压测揭密:关键指标分析!“

    在进行全链路压测和性能测试时 需要关注多个关键性能指标 KPIs 来评估系统的性能表现 以下是一些常见的性能测试指标 1 吞吐量 Throughput 系统在单位时间内能够处理的请求数量或事务数量 通常以每秒请求数 RPS TPS 来衡量
  • DreadHunger恐惧饥荒海上狼人杀服务器搭建架设教程windows系统

    DreadHunger 恐惧饥荒海上狼人杀服务器搭建架设教程windows系统 大家好我是艾西 在11月底我有发文 DreadHunger 恐惧饥荒海上狼人杀官方停服的消息 当时在官方的公告模版中公布了在2024年一月一日会将服务端公开让喜
  • Linux 系统日志及其归档

    主要记录Linux 系统需要关注的日志文件 以及日志归档服务 rsyslogd 系统日志服务 rsyslogd 日志服务 rsyslogd reliable and extended syslogd 可靠 可扩展的系统日志服务 Rsyslo
  • 自定义编写zabbix_agent脚本

    vi usr lib systemd system zabbix agent servicce Unit Description Zabbix Agent After syslog target After network target S
  • 【网络安全】Web缓存欺骗攻击原理及攻防实战

    Web缓存欺骗是一种新的攻击方式 危害范围可扩大至各种技术及框架 本文仅分享Web缓存攻击知识 不承担任何由于传播 利用本文所发布内容而造成的任何后果及法律责任 文章目录 前言 攻击前提及原理 实例一 ChatGPT帐户接管漏洞 实例二 P
  • Web 安全漏洞之 OS 命令注入

    什么是 OS 命令注入 上周我们分享了一篇 Web 安全漏洞之 SQL 注入 其原理简单来说就是因为 SQL 是一种结构化字符串语言 攻击者利用可以随意构造语句的漏洞构造了开发者意料之外的语句 而今天要讲的 OS 命令注入其实原理和 SQL
  • 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

    接触过线程安全的同学想必都使用过synchronized这个关键字 在java同步代码快中 synchronized的使用方式无非有两个 通过对一个对象进行加锁来实现同步 如下面代码 synchronized lockObject 代码 对
  • J2EE常见面试题(一)

    StringBuilder和StringBuffer的区别 String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBuilder
  • 远程控制软件安全吗?一文看懂ToDesk、RayLink、TeamViewer、Splashtop相关安全机制_raylink todesk

    目录 一 前言 二 远程控制中的安全威胁 三 国内外远控软件安全机制 ToDesk RayLink Teamviewer Splashtop 四 安全远控预防 一 前言 近期 远程控制话题再一次引起关注 据相关新闻报道 不少不法分子利用远程
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 网络安全(黑客)自学

    1 网络安全是什么 网络安全可以基于攻击和防御视角来分类 我们经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 2 网络安全市场 一 是市场需求量高 二 则是发展相对成熟入门比较容易 3 所需要的
  • 网络安全:绕过 MSF 的一次渗透测试

    这次渗透的主站是 一个 Discuz 3 4 的搭建 违法招 piao 网站 配置有宝塔 WAF 用 Discuz ML 3 X 的漏洞进行攻击 但是没有成功 发现主站外链会有一个发卡网 引导人们来这充值 是 某某发卡网 而且域名指向也是主
  • 内网安全:隧道技术详解

    目录 隧道技术 反向连接技术 反向连接实验所用网络拓扑图及说明 网络说明 防火墙限制说明 实验前提说明 实战一 CS反向连接上线 拿下Win2008 一 使用转发代理上线创建监听器 二 上传后门执行上线 隧道技术 SMB协议 SMB协议介绍
  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • 为什么这么多人自学黑客,但没过多久就放弃了(掌握正确的网络安全学习路线很重要)

    网络安全是一个 不断发展和演变 的领域 以下是一个 网络安全学习路线规划 旨在帮助初学者快速入门和提高自己的技能 基础知识 网络安全的 基础知识 包括 网络结构 操作系统 编程语言 等方面的知识 学习这些基础知识对理解网络安全的原理和技术至
  • 网工内推 | 上市公司同程、科达,五险一金,年终奖,最高12k*15薪

    01 同程旅行 招聘岗位 网络工程师 职责描述 1 负责职场 门店网络规划 建设 维护 2 负责网络安全及访问控制 上网行为管理和VPN设备的日常运维 3 负责内部相关网络自动化和系统化建设 4 优化与提升网络运行质量 制定应急预案 人员培

随机推荐

  • Python设置excel单元格格式

    文章目录 xlwt 模块简介 设置数字的格式 设置字体 设置对齐方式 设置边框 设置 填充 设置保护 xlwt 模块简介 xlwt 是 python中一个用来操作 excel 文件的库 其中 封装了很多常用操作 本文主要讲解使用该库在生成e
  • elememt el-tree使用(样式修改+设置为单选,不含父节点)

    elememt el tree使用 样式修改 设置为单选 不含父节点 最近在使用element做练习 就单纯的想对使用的组件和功能做一下下记录 v 直接在elememt官网找自己想要使用的组件就好 html
  • 【算法提升】——中心扩散法(最长回文子串和回文子串)

    中心扩散法常用来解决回文子串的问题 如最长回文子串和回文子串的问题 最长回文子串 给你一个字符串 s 找到 s 中最长的回文子串 解题思路 从每一个位置确定回文子串中心点 回文子串向两边扩散的起始位置 向左右两边扩散进行比较 如果是 bab
  • LCD 亮度相关(背光) 正负压相关

    LCD 亮度相关 背光 kernel msm 3 18 drivers video msm mdss mdss fb c 调用led classdev register 注册lcd backlight sys class leds lcd
  • Lua的string和string库总结

    Lua有7种数据类型 分别是nil boolean number string table function userdata 这里我总结一下Lua的string类型和string库 复习一下 以便加深记忆 个人认为string是Lua编程
  • 全栈工程师的职业前景及就业环境情况说明

    本篇文章主要讲解全栈工程师的职业前景和就业趋势 作者 任聪聪 日期 2023年4月20日 全栈工程师顾名思义就是会一个技术栈领域的所有客户端技术 如web全栈即前后端技术栈都会的工程师 如web pc app都会的则也是全栈 大全栈 故此全
  • 网络---因特网的概述

    因特网的概述 网络 互联网 因特网 网络 许多计算机连接在一起 互联网 internet 许多网络连接在一起 因特网 全球最大的一个互联网 Internet和广域网 局域网 覆盖范围小 自己花钱买设备 带宽固定 10M 100M 1000M
  • 关于ER图和UML图之间的对比

    ER图与UML图 ER图 实体 联系图 Entity Relation Diagram 用来建立数据模型 在数据库系统概论中属于概念设计阶段 ER图提供了表示实体 即数据对象 属性和联系的方法 用来描述现实世界的概念模型 构成E R图的基本
  • React项目 加入 TS

    1 全局安装ts npm i g typescript 2 创建tsconfig json tsc init 修改tsconfig json 开启jsx和allowJs配置 3 安装开发环境依赖 npm install save dev t
  • 数据分析:Pandas之Series用法总结

    文章目录 Series 一 导入Series 二 创建Series 1 使用列表或者numpy进行创建 默认索引为0到N 1的整数型索引 2 使用字典创建 推荐使用 三 Series的索引和切片 1 显式索引与切片 2 隐式索引与切片 四
  • 域名系统由什么服务器组成,域名(DNS)的有那三个组成部分

    域名制度 域名 DNS 的有那三个组成部分 DNS由下面三个部分组成 域名空间和资源记录 域名空间是一个树状结构 资源记录是与名字相关的一些数据 从概念上说 每个结点和域名空间树的叶子结点都有一定的信息 而查询是要查询出一些与之相关的特定信
  • 辛普森悖论及贝叶斯解释

    辛普森悖论 Simpson s Paradox 亦有人译为辛普森诡论 为英国统计学家E H 辛普森 E H Simpson 于1951年提出的悖论 即在某个条件下的两组数据 分别讨论时都会满足某种性质 可是一旦合并考虑 却可能导致相反的结论
  • leetcode 63. 不同路径 II

    一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 Start 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 在下图中标记为 Finish 现在考虑网格中有障碍物 那么从左上角到右下角将会有多少条不同的路径
  • ReactNative系列之四十八屏幕宽高

    有几种方式可以获取屏幕 依次来对比下 1 view gt onLayout measure 如果view是flex 1 则获取的为屏幕真正的可显示宽高 即全面屏含刘海高度 安全区模式不含刘海高度 实际 2 Dimens 监听change 在
  • 【实现一套爬虫数据抓取平台】[3-5-03] 微博长短地址转换

    文章目录 零 系列目录 一 背景 二 代码 三 总结 零 系列目录 写这套文章的时候 不会完全按照目录的顺序一篇一篇写 大家可以到目录中直接找到对应的章节进行查看 点我跳转 一 背景 新浪微博有两类地址 分别是 pc站地址 https we
  • VSCode配置C++开发环境:OpenCV

    文章目录 Linux 编译 调试 配置OpenCV Win10 编译调试 配置OpenCV 参考 最近在做深度学习的C 部署相关工作 于是写下这篇文档记录环境配置的过程 环境配置是一项非常繁琐的工作 无论从大学做相关作业还是到工作上 做这项
  • ORACLE中通过SQL语句(alter table)来增加、删除、修改字段

    ORACLE中通过SQL语句 alter table 来增加 删除 修改字段 1 添加字段 alter table 表名 add 字段 字段类型 default 输入默认值 null not null 2 添加备注 comment on c
  • Git合并代码流程——2023.05

    本文介绍一下如何将git上面的代码合并 一 把分支代码合并到master 首先切换到分支hello git checkout hello 使用git pull 把分支代码pull下来 git pull 切换到主分支 git checkout
  • 【收藏】开发人员看过来:11 个免费的开源 IDE

    1 Komodo Edit Windows Mac Linux Komodo Edit 是开源的 支持PHP Python Ruby JavaScript Perl Tcl XML HTML 5 and CSS 3 它具备语法着色 折叠 背
  • SSTI-2 继承关系 & 魔术方法

    主要内容学习自 B站 重庆橙子科技 SSTI 模板注入 我力推橙子科技的所有 CTF 课程 由于在模板注入时 我们能够注入的地方 终究只是一个变量 而不是 Python 语句 所以直接注入 Python 语句是不能执行的 需要一些特殊操作让