命令执行简介
远程命令执行或者代码执行,英文全称Remote Command/Code Execute,简称RCE。命令执行漏洞指的是可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
漏洞产生的原因
没有对用户输入进行过滤,直接执行用户输入的命令。
利用方法
直接调用操作系统命令
常见的函数
1.系统命令执行函数
system():能将字符串作为OS命令执行,且返回命令执行结果;
exec():能将字符串作为OS命令执行,但是只返回执行结果的最后一行(约等于无回显);
shell_exec():能将字符串作为OS命令执行
passthru():能将字符串作为OS命令执行,只调用命令不返回任何结果,但把命令的运行结果原样输出到标准输出设备上;
popen():打开进程文件指针
proc_open():与popen()类似
pcntl_exec():在当前进程空间执行指定程序;
反引号``:反引号``内的字符串会被解析为OS命令;
2.代码执行函数
eval():将字符串作为php代码执行;
assert():将字符串作为php代码执行;
preg_replace():正则匹配替换字符串;
create_function():主要创建匿名函数;
call_user_func():回调函数,第一个参数为函数名,第二个参数为函数的参数;
call_user_func_array():回调函数,第一个参数为函数名,第二个参数为函数参数的数组;
可变函数:若变量后有括号,该变量会被当做函数名为变量值(前提是该变量值是存在的函数名)的函数执行;
绕过方式
有管道符、空格过滤、反斜杠\绕过、异或绕过、黑名单绕过、正则匹配绕过,等等。
漏洞危害
1、继承Web服务程序的权限去执行系统命令,
2、反弹shell,
3、控制整个网站甚至控制服务器,
4、进一步内网渗透。
防御方式
1、尽量少用执行命令的函数或者直接禁用,
2、参数值尽量使用引号包括,
3、在使用动态函数之前,确保使用的函数是指定的函数之一,
4、在进入执行命令的函数/方法之前,对参数进行过滤,对敏感字符进行转义。
案列
输入弱密码进入后台
在后台处,系统监控—定时任务处存在远程命令执行漏洞,可以反弹shell。
点击确定后,点击执行一次,vps上发现访问了该端口
过了一会儿,成功获取到root权限