Web渗透-命令执行漏洞
命令执行漏洞概要
命令执行漏洞是指攻击者可以随意执行系统命令,不具备命令权限的用户可以执行命令,属于高危漏洞之一,也属于代码执行范畴。
在B/S架构和C/S架构中都常见
漏洞成因
在能执行命令的地方,对命令语句过滤不言,可能利用连接符(&& & || |)来突破限制,如原本只能进行ping操作,通过连接符,执行更多命令
ping 192.168.1.1 && whoami
漏洞危害
信息泄露、主机/服务器被控制等
漏洞防范
- 尽量避免使用系统命令
- 在输入命令的地方做好字符过滤,对敏感字符转义
- 确保使用指定函数,比如提供ping测试功能的地方,就只允许ping
- stripslashes(string)该函数会删除字符串string中的反斜杠
- explode(separator,string,limit)字符串转数组,参数1分割位置,参数2待分割字符串,参数3返回数组元素的数目
OS命令执行
- 一般在Windows和linux系统中都可以执行系统命令
- 常见都是一次执行一个命令,但是实际上是可以同时执行多个命令的,而且系统命令漏洞往往就是利用连接符来实现漏洞利用
- 常见连接符:&& , & , || , |
- 连接符的作用是把不同命令连接起来使用,当遇到能执行命令的地方,如果过滤不严。很可能利用运算符/连接符来突破限制,做恶意操作
如在windows命令行输入dir && whoami,
会同时进行“显示当前路径下文件情况”和“显示当前系统用户名”操作
漏洞利用:输入180.149.132.47 && user
这里讲一讲各个连接符的区别
命令1 && 命令2 ----------命令1执行成功,才执行命令2
命令1 & 命令2 ----------无论成功与否,命令1、命令2都执行
命令1 || 命令2 ----------命令1执行失败,才执行命令2
命令1 | 命令2 ----------命令1能够执行,才执行命令2并输出结果(注意命令1没有显示执行结果)
脚本命令执行
任何脚本语言都可以调用操作系统命令,而各个脚本语言实现方式一般不一样
区别:
- 命令执行漏洞是直接调用操作系统命令
- 代码执行漏洞是依靠执行脚本代码调用操作系统命令
框架执行漏洞
更多的是依靠框架存在的缺陷和漏洞