漏洞名称 :命令注入
漏洞描述:Command Injection,即命令注入攻击,是指由于Web应用程序对用户提交的数据过滤
不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。在命令注入的漏洞中,最为常见的是PHP的命令注入。PHP命令注入攻击存在的主要原因是Web应用程序员在应用PHP语言中一些具有命令执行功能的函数时,对用户提交的数据内容没有进行严格的过滤就带入函数中执行而造成的。例如,当黑客提交的数据内容为向网站目录写入PHP文件时,就可以通过该命令注入攻击漏洞写入一个PHP后门文件,进而实施进一步的渗透攻击。
检测条件:
1、 Web业务运行正常
2、 例如已知某页面URL(假设为http://www.exmaple.com/abc.jsp)接收参数,且参数中接收类似于系统命令的字符(假设为cmd=ls)
检测方法:
1、 通过web扫描工具进行扫描,如果具有该漏洞,一般可以扫描得到,也可以通过手工去进行验证:例如打开网站,在地址栏中的网址后面输入‚?cmd=所要执行的命令‛,如下图所示的http://192.168.1.3/?cmd=net user,可以发现命令能够成功执行:
修复方案:
PHP中命令注入攻击漏洞带来的危害和影响很严重。防范命令注入攻击漏洞的存在可以通过以下几种方法:
1、 尽量不要执行外部的应用程序或命令。
2、 使用自定义函数或函数库实现外部应用程序或命令的功能。
3、 在执行system、eval等命令执行功能的函数前,确定参数内容。
4、 使用escapeshellarg函数处理相关参数。Escapeshellarg函数会将任何引起参数或命令结束的字符进行转义,如单引号‚’‛会被转义为‚\’‛,双引号‚‛‛会被转义为‚\‛‛,分号‚;‛会被转义为‚\;‛,这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中所包含的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的。
5、 使用safe_mode_exec_dir执行可执行的文件路径。将php.ini文件中的safe_mode设置为On,然后将允许执行的文件放入一个目录中,并使用safe_mode_exec_dir指定这个可执行的文件路径。这样,在需要执行相应的外部程序时,程序必须在safe_mode_exec_dir指定的目录中才会允许执行,否则执行将失败。