可利用的Python函数

26 投票
5 回答
11329 浏览
提问于 2025-04-16 07:13

这个问题和可被利用的PHP函数很相似。

所谓“污染数据”就是来自用户的数据,或者更具体地说,是来自攻击者的数据。当一个被污染的变量传递到一个“终点函数”时,就会出现安全漏洞。比如说,一个执行SQL查询的函数就是一个终点,而GET/POST变量就是污染数据的来源。

在Python中,所有的终点函数有哪些呢?我想找一些会引入安全漏洞或者软件弱点的函数。我特别关注远程代码执行的漏洞。有没有一些包含危险功能的类或者模块?你能举一些有趣的Python漏洞的例子吗?

5 个回答

10

我在寻找这类东西的时候, tend to be a bit paranoid(有点多疑)。这主要是因为我经常做一些元编程的事情。

  • 大多数有副作用的命令(其他帖子也提到过)
    • 文件操作(比如 opentarfilezipfile 等等)
    • 网络请求(比如 urllib2socket 等等)
    • 数据序列化/持久化(比如 pickleshelve 等等)
    • 进程/线程管理(比如 subprocessos.forkos.kill 等等)
  • 内置函数
    • getattr
    • setattr
    • delattr
    • eval
    • exec
    • execfile
    • __import__

还有其他我可能忘记的东西。我也对用户输入经过一些我在修改 sys.pathsys.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

evalexec 是经典的危险函数。不过,openfile 也可能被滥用:

open('/proc/kcore', 'w').write('0' * 1000 * 1000 * 1000)

还有 ossyssubprocessdircache 这些模块。基本上,任何涉及文件系统的操作,或者能把数据变成可执行代码的东西(比如 os.system),都可能被列入危险名单。

正如 S. Lott 在评论中提到的,往文件系统写入数据和执行任意外部程序并不是 Python 特有的。不过,这些操作确实值得安全审计人员关注。大多数这些函数在使用时安全性问题不大,但 evalexec 就是明显的危险信号。安全使用它们需要非常小心。

撰写回答