【攻防演练】某协同办公系统多个1day分析过程,涉及两个回显SSRF、一个文件上传。
0x01 任意文件上传
1.1 代码分析
漏洞出现在E-mobile/App/Ajax/ajax.php
文件中,是后缀过滤被绕过导致的。
业务逻辑如下:
(1)$photo = $_FILES["upload_quwan"];
将上传文件赋值给$photo
,
(2)$ext_temp = path_info($photo["name"]);
获取上传文件后缀
(3) 后缀合法性校验(漏洞核心位置)
校验过程存在缺陷,只校验了上传文件后缀有没有在黑名单,却未考虑后缀为空的情况,比如123.php.
,此时取到的后缀为空,不在黑名单。
(4) 拼接路径,完成上传。
1.2 漏洞利用
action=mobile_upload_save
直接上传即可
0x02 全回显SSRF可RCE
2.1 漏洞分析
还是这个文件,继续分析action
为其他的分支,在action=dingtalkImg
时,存在该漏洞,我们看下实现过程:
(1) 获取一个result参数,然后传入GrabImage
函数进行远程文件抓取操作。
(2) 跟进GrabImage
,该函数做了几点操作:
- 从url中获取文件名
- 打开url读取图片流
- 打开文件,写入图片流
全程一气呵成,没有做任何文件后缀校验。
所以,该处既存在全回显SSRF,同样文件保存在服务器,可以造成RCE
2.2 漏洞利用
服务器上启一个web服务,将代码放进去:
然后构造URL进行请求:
2.3 类似的接口还有
action=outSignImg
时
0x03 回显SSRF
3.1 漏洞分析
在/E-mobile/App/System/File/downfile.php
中
(1)赋值过程(11-18行)
$fileurl = $_REQUEST["url"];
// ....
$rooturl = "http://".$_SERVER['HTTP_HOST'];
$checkurl = explode("/", $fileurl);
当$checkurl
中包含某些特定字符时,则拼接指定的URL:
(2)拼接完整URL,不满足上述两种特定流程时。
else
{
$url = $rooturl.$fileurl;// 将HOST和url参数值拼接
$filetype = pathinfo($fileurl); // 获取文件后缀
$type = $filetype["extension"]; // 将type设置为文件后缀
}
(3)$url
传入file_get_content
造成SSRF
3.2 漏洞利用
- 利用方法1:
url=@butian.net
- 利用方法2:请求包HOST设置为
butian.net
- 本文作者: Alivin
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/1791
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!