Python由于其简单,快速,库丰富的特点在国内使用的越来越广泛,但是一些不好的用法却带来了严重的安全问题,本文从Python源码入手,分析其语法树,跟踪数据流来判断是否存在注入点。
0x01 引言
Python注入问题是说用户可以控制输入,导致系统执行一些危险的操作。它是Python中比较常见的安全问题,特别是把python作为web应用层的时候这个问题就更加突出,它包括代码注入,OS命令注入,sql注入,任意文件下载等。
0x02 注入的场景
主要是在web应用场景中,用户可直接控制输入参数,并且程序未做任何参数判断或者处理,直接就进入了危险函数中,导致执行一些危险的操作。主要的注入类型有:
(一)OS命令注入
主要是程序中通过Python的OS接口执行系统命令,常见的危险函数有
os.system,os.popen,commands.getoutput,commands.getstatusoutput,subprocess
等一些接口。例如:def myserve(request,fullname):os.system('sudo rm -f %s'%fullname),fullname是用户可控的,恶意用户只需利用shell的拼接符;就可以完成一次很好的攻击。
(二)代码注入
是说在注入点可以执行一段代码,这个一般是由python的序列话函数eval导致的,例如:def eval_test(request,login):login = eval(login),如果恶意用