介绍命令执行漏洞
应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system、exec、shell_exec、passthru、popen、proc_popen
等函数可以执行系统命令。当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常的命令中,从而造成命令执行攻击,这就是命令执行漏洞。
命令执行漏洞的利用
Windows系统常用管道符:
管道符 | 含义 |
---|---|
| | 直接执行后面的语句,例如:ping 127.0.0.1|whoami |
|| | 如果前面执行的语句执行报错,则执行后面的语句,前面的语句只能为假。例如:ping 2 ||whoami |
& | 如果前面的语句为假,则直接执行后面的语句,前面的语句可真可假,例如:ping 127.0.0.1&whoami |
&& | 如果前面的语句为假,则直接报错,也不执行后面的语句,前面的语句只能为真。例如:ping 127.0.0.1&&whoami |
Linux系统支持的管道符:
管道符 | 含义 |
---|---|
; | 执行完前面的语句再执行后面的。例如:ping 127.0.0.1;whoami |
| | 显示后面语句的执行结果,例如:ping 127.0.0.1|whoami |
|| | 如果前面执行的语句执行报错,则执行后面的语句,前面的语句只能为假。例如:ping 2 ||whoami |
& | 如果前面的语句为假,则直接执行后面的语句,前面的语句可真可假,例如:ping 127.0.0.1&whoami |
&& | 如果前面的语句为假,则直接报错,也不执行后面的语句,前面的语句只能为真。例如:ping 127.0.0.1&&whoami |
命令执行漏洞的修复建议
- 尽量不要使用命令执行函数。
- 客户端提交的变量在进入执行命令函数前要做好过滤和检测。
- 在使用动态函数之前,确保使用的函数是指定的函数之一。
- 对PHP语言来说,不能完全控制的危险函数最好不要使用。