Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可利用的Python函数_Python_Security_Auditing - Fatal编程技术网

可利用的Python函数

可利用的Python函数,python,security,auditing,Python,Security,Auditing,这个问题类似于 受污染的数据来自用户,或者更确切地说来自攻击者。当受污染的变量到达接收器函数时,您就存在漏洞。例如,执行sql查询的函数是接收器,而GET/POST变量是污染源 Python中的所有sink函数都是什么?我正在寻找引入漏洞或漏洞的函数。我对远程代码执行漏洞特别感兴趣。是否存在包含危险功能的完整类/模块?您是否有任何有趣的Python漏洞示例 该模块包含功能上不推荐的命令/进程执行方式: os.system os.spawn* os.popen* popen2.* commands

这个问题类似于

受污染的数据来自用户,或者更确切地说来自攻击者。当受污染的变量到达接收器函数时,您就存在漏洞。例如,执行sql查询的函数是接收器,而GET/POST变量是污染源

Python中的所有sink函数都是什么?我正在寻找引入漏洞或漏洞的函数。我对远程代码执行漏洞特别感兴趣。是否存在包含危险功能的完整类/模块?您是否有任何有趣的Python漏洞示例

该模块包含功能上不推荐的命令/进程执行方式:

os.system
os.spawn*
os.popen*
popen2.*
commands.*

还有一个函数将执行python代码,它将“计算”表达式,并可用于操作变量

eval
exec
是经典之作。但是,
打开
文件
也可能被滥用:

open('/proc/kcore', 'w').write('0' * 1000 * 1000 * 1000)
然后是
os
sys
子流程
,以及
dircache
模块。几乎所有涉及文件系统或可用于将数据转换为可执行代码的内容(如
os.system
)都将出现在列表中

正如S.Lott在评论中指出的那样,写入文件系统和执行任意外部程序不是特定于Python的。然而,它们值得安全审计员考虑。这些功能中的大多数都可以安全地使用,而不必太担心安全性<另一方面,code>eval和
exec
是巨大的危险信号。安全地使用它们需要仔细小心。

请参阅文档:

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.

计算给定字符串并返回结果的函数有一些限制,但仍然可以利用。

我在寻找这种东西时倾向于偏执。更重要的是,我倾向于做很多元编程

  • 大多数副作用命令(其他帖子涵盖)
    • 文件操作(
      open
      tarfile
      zipfile
      ,…)
    • 网络调用(
      urllib2
      socket
      ,…)
    • 数据序列化/持久化(
      pickle
      shelve
      ,…)
    • 进程/线程管理(
      subprocess
      os.fork
      os.kill
      ,…)
  • 内置
    • getattr
    • setattr
    • delattr
    • eval
    • exec
    • execfile
    • \uuuu导入\uuuuu

可能还有其他我忘记的。我还担心用户输入会通过我正在修改sys.path、sys.modules等的函数进行修改。

把它变成一个社区wiki怎么样?@Sven Marnach这会让它变得更好吗?我以前没有这样做过,要在很大程度上保护Python是非常困难的;这种语言太过灵活了。如果您正试图创建一个安全的Python环境,那么您将面临一项非常艰巨的任务。@Rook:这将使人们能够协作编译列表。您链接的PHP帖子的公认答案也是一篇社区维基帖子。@Sven Marnach非常欢迎您为此帖子编辑我的帖子。我在PHP列表上得到了一些帮助,这就解决了。打开“/proc/kcore”需要大多数进程没有的特权。这是另一种利用漏洞的方式,因为它需要特权,而且不仅仅是简陋的编码。@S.Lott:当然,但这只是一个(戏剧性的)例子。可能攻击者希望以web服务器用户身份运行,并打开
/var/www/index.html
。良好的安全性是分层的。我们不能指望所有用户的管理员都能确保所有内容始终以最佳权限运行,因此值得额外关注并寻找此类内容。“良好的安全性是分层的”。这不完全是重点。
eval
exec
是不依赖安全性的Python漏洞利用。另一个漏洞在性质上是不同的——它与Python无关,因为所有语言都有它。这是操作系统权限管理的一部分。如果要列出这些,那么必须开始列出所有与Python无关的操作系统漏洞。我认为您应该在回答中更清楚地将其划分为一种不同类型的利用,这种利用只发生在使用Python的情况下。@S.Lott:这很公平。更好?经过pickle处理的数据是最差的,因为它的结构或可读性不足以进行清理,并且在取消pickle时可以执行任意代码。例如,通过DBUS(或其他一些开放式IPC机制)发送pickle数据结构可能是一个巨大的安全漏洞,但对于Python或DBUS新手来说,这并不一定明显。更好的方法是使用JSON或XML编写一个显式序列化方法,并通过您使用的任何协议发送。您可以确认它是可利用的<代码>\uuuu导入\uuuuu('os')。系统('ls')在stdin中输入上述字符串,导致在shell中执行
ls
命令。输入函数如何计算给定字符串?