一文看懂Python沙箱逃逸
不过要注意,2.x 才能用,3.x 删了 execfile,不过可以这样:
这个方法倒是 2.x、3.x 通用的。 不过要使用上面的这两种方法,就必须知道库的路径。其实在大多数的环境下,库都是默认路径。如果 sys 没被干掉的话,还可以确认一下,:
3. 花式处理字符串 代码中要是出现 os,直接不让运行。那么可以利用字符串的各种变化来引入 os:
还可以利用 eval 或者 exec:
顺便说一下,eval、exec 都是相当危险的函数,exec 比 eval 还要危险,它们一定要过滤,因为字符串有很多变形的方式,对字符串的处理可以有:逆序、变量拼接、base64、hex、rot13…等等,太多了。。。 4. 恢复 sys.modules sys.modules 是一个字典,里面储存了加载过的模块信息。如果 Python 是刚启动的话,所列出的模块就是解释器在启动时自动加载的模块。有些库例如 os 是默认被加载进来的,但是不能直接使用,原因在于 sys.modules 中未经 import 加载的模块对当前空间是不可见的。 如果将 os 从 sys.modules 中剔除,os 就彻底没法用了:
注意,这里不能用 del sys.modules['os'],因为,当 import 一个模块时:import A,检查 sys.modules 中是否已经有 A,如果有则不加载,如果没有则为 A 创建 module 对象,并加载 A。 所以删了 sys.modules['os'] 只会让 Python 重新加载一次 os。 看到这你肯定发现了,对于上面的过滤方式,绕过的方式可以是这样:
最后还有一种利用 __builtins__ 导入的方式,下面会详细说。 5. 花式执行函数 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |