目录
一、命令执行漏洞原理
命令执行漏洞是指攻击者可以执行任意系统命令,是代码执行的一种。
命令执行漏洞不仅可以存在B/S架构中,在C/S架构中也很常见。
二、利用方法
1、常用函数(PHP中)
●shell_exec():执行shell命令并返回输出结果的字符串
●eval():把字符串当作PHP代码来执行
●preg_replace():正则表达式的搜索和替换
●system():执行一个外部程序并输出,如:system($cmd)可以执行任意命令
●exec():执行一个外部程序
●passthru():执行一个UNIX系统命令并显示原始的输出
2、管道连接命令
●Windows系统下,可以使用“&&、&、|、||”等。如:用户输入“127.0.0.1&&net user”时,服务器将执行命令“ping 127.0.0.1&& net user”,即执行完ping命令后再执行net user命令。
●Linux系统下,可以使用“&&、&、|、||、;”等进行命令拼接。如:用户输入“127.0.0.1;cat /etc/passwd”时,服务器将执行完ping命令后再执行cat /etc/passwd命令,攻击者将获取服务器上所有用户的信息。输入“127.0.0.1|cat /etc/passwd”也会得到类似的结果。
三、防御
●谨慎使用eval()等可引起命令执行的函数。可以在PHP配置文件中的disabled_functions中进行禁用该类函数。
●如果无法避免使用该类函数,则要对用户提供的参数进行必要的过滤。如:使用escapeshellarg()、escapeshellcmd()函数对其进行过滤或转码。
●参数值尽量使用引号进行包裹,并在拼接前调用addslashes()函数进行转义。
●使用黑名单对特殊字符进行过滤或替换。