php 沙箱逃逸,Python沙箱逃逸之基础篇

0x01 前言

周末去参加了一波国赛的半决赛,发现全部都是python的题,之前还以为会有人把模版改成php的呢,结果都没有。。对于python也不是很熟悉,所以回来之后学习一下。

0x02 Python一般的利用方式

一般python沙箱的话都是可以执行python命令的一个环境,因此我们需要知道一些敏感的函数来帮助我们getshell或者读取敏感文件等等执行系统命令1

2

3

4

5os.system('whoami')

os.popen('whoami')

commands.getoutput('whoami')

commands.getstatusoutput('whoami')

subprocess.call('whoami',shell=True)

读取文件1

2

3

4

5

6fd = os.open('flag.txt',O_RDWR)

os.read(fd,1024)

--------------------------------------------

file('flag.txt').read() //file函数python3会移除

--------------------------------------------

open('flag.txt').read()

f_string

python3.6之后引入的新特性,作用跟format差不多,但是可以执行命令1f"{__import__('os').system('whoami')}"

当然这些都是常见的利用方式,还有很多利用姿势等你解锁

0x03 Python之import

在做沙箱逃逸的时候import是对于getshell是很重要的,因为我们肯定是需要引入其他包的功能来进行命令执行。

一般import的用法如下:import关键字

__import__函数

importlib库1

2

3import os

__import__('os')

importlib.import_module('os')

0x04 Python之builtin

在python中,不用引用直接就能使用的叫做内建模块,对于内建模块来说,我们要区分

__builtin__、__builtins__、builtins这三者

对于__builtin__和builts来说,他们的区别在于 __builtin__是对于Python2.x的,而builtins是对于Python3.x的,他们都是内建模块。

当我们想使用内建函数,比如chr()的时候,其实是用的__builtins__.chr()的

3bef98b428edecea98a490f834cec649.png

那么__builtins__和__builtin__又有什么区别呢,其实可以把__builtins__看作是

builtin 的一个引用,但是这个引用还要看作用域当在__main__作用域的时候,两者没有任何区别,但是想要用__builtin__的时候,必须import才能使用,__builtins__就不用import

当不再__main__作用域的时候__builtins__是 __builtin__.__dict__的引用,是个字典

一般来说,在沙箱中经常会使用1

2import __builtin__

del __builtin__.chr

这种方式把敏感的内建函数删除

0x05 Python之 dict 与 dir()

__dict__和dir()都可一查看模块/类/对象的属性和函数,但是并不是所有的模块/对象/类都有 __dict__属性的,所以可以用dir()来获取全部的属性和函数

0x06 Python之__mro__与__base__与__base__

在Python中mro可以获取一个类的所有父类的列表(按照方法解析顺序排列)1"".__class__.__mro__

c21bfd3c3bae2897c13a378c2151e083.png

base返回父类

a89c8831f3c6315a655b707d0d40591e.png

bases返回父类的tuple

17f408f9cedb5c7d0eaf2f2c779fcb43.png

0x07 Python之__subclasses__()

之前说的mro是获取父类的列表,那么subclasses就是获取子类的列表了。因此有一个思路就是,获取任意类的父类列表,找到object类,因为所有的类都是继承object类的,所有再使用subclasses来获取子类的列表,这样就能使用所有的类了。

0x09 Python之__globals__

globals属性是函数特有的,记录当前文件的全局变量的值,1

2

3a=lambda x:x+1

a.__globals__

a.func_globals //两个返回的内容是一样的

0x08 参考

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值