命令行注入,其实是通过WEB程序,在目标服务器上拼接操作系统命令的一个过程。所指的命令是操作系统的命令,不同操作系统,命令名称及格式各不相同,今天以Windows操作系统为例,给大家讲解命令行注入过程。
我们先打开DVWA,并设置安全级别为最低,即为Low,如下图所示:
进入到命令行注入演示分类中。
此页面是用来测试网络是否畅通的方法,我们在“Enter an IP address”处输入我们测试的IP地址,并点击“Submit”按钮进行提交(我们输入的IP地址为网关地址),如果如下图所示。
我们可以看到红框内反馈回来的结果,先看看反馈回来的信息是不是很眼熟,其实它与我们在Windows下使用ping命令反馈回来的结果很像,那我们就可以猜想,这里可能存在命令行注入漏洞。接下来,来一张CMD下ping命令的对比吧。
大家看一看是不是很像啊,这样就更确定当前网站所使用的方法可能是直接调用了系统的ping命令来完成的。当然大家可能会说页面上怎么是乱码?这个是因为我们的页面使用的编码格式是UTF8,而Windows默认使用的编码是GBK,所以会产生乱码,这样我们也会更加确认页面直接调用系统ping命令的可能性。
在Windows下的CMD模式下,我们使用命令其实是可以进行拼接的(拼接可以使用“&&”),如我们在ping的同时,可以查看当前目录下所有文件。
我们在图中可以看出,我们使用“&&”进行命令拼接后,会有两部分数据的反馈,所以我们将这个加入到页面中进行测试。
通过测试我们可以100%确认,此网站存在命令行注入漏洞,那我们就可以通过这个漏洞为所欲为了,举个例子,如果这个网站的服务器使用的是Windows2008或更高的版本(也可能低一些),那么,我就可以使用拼接命令的方式创建用户,将用户加入到管理员组中,如果这个服务器开放3389端口(即例没有开,我们也可以使用其它方法将其开启),那么我就可以远程连接到服务器上,做自己的快乐事了。
补充知识拼接符说明:
A && B : 命令A执行成功后,才会执行命令B。
A & B :命令A与命令B简单拼接,之前并无约束关系。
A || B :命令A执行失败后,才会执行命令B。
A | B :命令A的输出作为命令B的输入。