Command Execution
一、原理
命令执行漏洞是指应用有时需要调用一些执行系统命令的函数,如:system()
、exec()
、shell_exec()
、eval()
、passthru()
,代码未对用户可控参数做过滤,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。
常见连接符
A;B 先执行A,再执行B
A&B 简单拼接,A B之间无制约关系
A|B 显示B的执行结果
A&&B A执行成功,然后才会执行B
A||B A执行失败,然后才会执行B
二、分类
1. 代码层过滤不严
商业应用的一些核心代码封装在二进制文件中,在Web应用中通过system函数来调用:system("/bin/program --arg $arg");
2. 系统的漏洞造成命令注入
bash破壳漏洞(CVE-2014-6271)
3. 调用的第三方组件存在代码执行漏洞
WordPress中用来处理图片的ImageMagick组件;
JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy等);
ThinkPHP命令执行;
三、防御
- 尽量少用执行命令的函数或者直接禁用
- 参数值尽量使用引号包括,并在拼接前调用addslashes函数进行转义
- 在使用动态函数之前,确保使用的函数是指定的函数之一
- 在进入执行命令的函数方法之前,对参数进行过滤,对敏感字符进行转义
- 对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下,使用escapeshellarg函数进行过滤
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。