漏洞原因:
web应用程序有时需要调用一些系统命令的函数,如PHP中的system,exec,shell-exec等等,当用户能够控制这些函数中的参数时,就可以将恶意参系统命令拼接到正常命令中,从而造成命令注入攻击
漏洞形成需要同时满足以下三个条件:
- 使用了内部调用shell的函数(system,exec)
- 将外界传入的参数传递给内部调用shell的函数
- 参数中shell的元字符没有被转义
漏洞分类:
- 代码层过滤不严
- 系统的漏洞造成命令注入
- 调用第三方组件存在代码执行漏洞
漏洞危害:
- 继承web应用程序的权限去执行系统命令读写执行文件
- 反弹shell
- 控制整个网站甚至整个服务器
- 进一步内网渗透
漏洞对策:
- 选择不调用系统命令的实现方法
- 避免使用内部调用shell的函数
- 不将外界传入的字符串传递给命令行参数
- 使用安全的函数对传递给系统命令的参数进行转义
- 校验参数
- 将应用程序的权限降到最低
- 给web服务器系统及使用的中间件及时打上安全补丁
对策应当在web应用程序设计阶段就应确定下来,针对不同的功能实现阶段分别探讨安全对策