此问题与Exploitable PHP Functions类似。
受污染的数据来自用户,或者更具体地来说是攻击者。当受污染的变量达到接收器功能时,您就会有漏洞。例如,执行sql查询的函数是接收器,而GET / POST变量是污点源。
Python中的所有接收器功能是什么?我正在寻找引入漏洞或software weakness的功能。我对远程执行代码漏洞特别感兴趣。是否存在包含危险功能的整个类/模块?你有任何有趣的Python漏洞的例子吗?
答案 0 :(得分: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
是很大的危险信号。安全使用它们需要精心呵护。
答案 1 :(得分: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.
答案 2 :(得分:9)
在寻找这种事情时,我倾向于偏执狂。更是如此,因为我倾向于做很多元编程。
open
,tarfile
,zipfile
,...)urllib2
,socket
,...)pickle
,shelve
,...)subprocess
,os.fork
,os.kill
,...)getattr
setattr
delattr
eval
exec
execfile
__import__
可能还有其他我忘了。我也警惕用户输入通过我正在修改sys.path,sys.modules等的函数。
答案 3 :(得分:6)
subprocess模块包含令人讨厌的功能,它不赞成这些执行命令/进程的方式:
os.system
os.spawn*
os.popen*
popen2.*
commands.*
答案 4 :(得分:3)
评估给定字符串并返回结果的input
函数有一些限制,但仍然可以利用。