可利用的Python函数
这个问题和可被利用的PHP函数很相似。
所谓“污染数据”就是来自用户的数据,或者更具体地说,是来自攻击者的数据。当一个被污染的变量传递到一个“终点函数”时,就会出现安全漏洞。比如说,一个执行SQL查询的函数就是一个终点,而GET/POST变量就是污染数据的来源。
在Python中,所有的终点函数有哪些呢?我想找一些会引入安全漏洞或者软件弱点的函数。我特别关注远程代码执行的漏洞。有没有一些包含危险功能的类或者模块?你能举一些有趣的Python漏洞的例子吗?
5 个回答
10
我在寻找这类东西的时候, tend to be a bit paranoid(有点多疑)。这主要是因为我经常做一些元编程的事情。
- 大多数有副作用的命令(其他帖子也提到过)
- 文件操作(比如
open
、tarfile
、zipfile
等等) - 网络请求(比如
urllib2
、socket
等等) - 数据序列化/持久化(比如
pickle
、shelve
等等) - 进程/线程管理(比如
subprocess
、os.fork
、os.kill
等等)
- 文件操作(比如
- 内置函数
getattr
setattr
delattr
eval
exec
execfile
__import__
还有其他我可能忘记的东西。我也对用户输入经过一些我在修改 sys.path
、sys.modules
等的函数感到谨慎。
14
直接来自于pickle的文档:
Warning
The pickle module is not intended to be secure against erroneous or maliciously constructed data. Never unpickle data received from an untrusted or unauthenticated source.
14
eval
和 exec
是经典的危险函数。不过,open
和 file
也可能被滥用:
open('/proc/kcore', 'w').write('0' * 1000 * 1000 * 1000)
还有 os
、sys
、subprocess
和 dircache
这些模块。基本上,任何涉及文件系统的操作,或者能把数据变成可执行代码的东西(比如 os.system
),都可能被列入危险名单。
正如 S. Lott 在评论中提到的,往文件系统写入数据和执行任意外部程序并不是 Python 特有的。不过,这些操作确实值得安全审计人员关注。大多数这些函数在使用时安全性问题不大,但 eval
和 exec
就是明显的危险信号。安全使用它们需要非常小心。