开源项目CRMEB ssrf漏洞分析
项目地址:https://github.com/crmeb/CRMEB
下载源码后来到app/api/controller/v1/PublicController.php
文件get_image_base64
函数。
源码如下:
/*** 获取图片base64* @param Request $request* @return mixed*/
public function get_image_base64(Request $request)
{[$imageUrl, $codeUrl] = $request->postMore([['image', ''],['code', ''],], true);try {$code = CacheService::get($codeUrl, function () use ($codeUrl) {$codeTmp = $code = $codeUrl ? image_to_base64($codeUrl) : false;if (!$codeTmp) {$putCodeUrl = put_image($codeUrl);$code = $putCodeUrl ? image_to_base64(app()->request->domain(true) . '/' . $putCodeUrl) : false;$code ?? unlink($_SERVER["DOCUMENT_ROOT"] . '/' . $putCodeUrl);}return $code;});$image = CacheService::get($imageUrl, function () use ($imageUrl) {$imageTmp = $image = $imageUrl ? image_to_base64($imageUrl) : false;if (!$imageTmp) {$putImageUrl = put_image($imageUrl);$image = $putImageUrl ? image_to_base64(app()->request->domain(true) . '/' . $putImageUrl) : false;$image ?? unlink($_SERVER["DOCUMENT_ROOT"] . '/' . $putImageUrl);}return $image;});return app('json')->successful(compact('code', 'image'));} catch (\Exception $e) {return app('json')->fail($e->getMessage());}
}
函数从前端接受一个image
参数赋值于变量$imageUrl
[$imageUrl, $codeUrl] = $request->postMore([['image', ''],['code', ''],], true);
通过跟踪$imageUrl
参数进入image_to_base64
函数
$codeTmp = $code = $codeUrl ? image_to_base64($codeUrl) : false;
$image_to_base64
函数源码:
/*** 获取图片转为base64* @param string $avatar* @return bool|string*/
function image_to_base64($avatar = '', $timeout = 9){$avatar = str_replace('https', 'http', $avatar);try {$url = parse_url($avatar);$url = $url['host'];$header = ['User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0','Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3','Accept-Encoding: gzip, deflate, br','accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','Host:' . $url];$dir = pathinfo($url);$host = $dir['dirname'];$refer = $host . '/';$curl = curl_init();curl_setopt($curl, CURLOPT_REFERER, $refer);curl_setopt($curl, CURLOPT_URL, $avatar);curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);curl_setopt($curl, CURLOPT_ENCODING, 'gzip');curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);curl_setopt($curl, CURLOPT_HTTPHEADER, $header);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);$data = curl_exec($curl);$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);curl_close($curl);if ($code == 200) {return "data:image/jpeg;base64," . base64_encode($data);} else {return false;}} catch (\Exception $e) {return false;}}
继续跟踪$imageUrl
变量(image_to_base64
函数中为$avatar
),可以发现直接将参数$avatar
设置为curl的请求路径,并且没有做过滤
curl_setopt($curl, CURLOPT_URL, $avatar);
在app/api/route/v1.php
寻找到对应的路由,搭建好环境后进行验证
Route::post('image_base64', 'v1.PublicController/get_image_base64')->name('getImageBase64');// 获取图片base64
在dnslog请求一个域名
然后构造对应数据包
成功接收到请求数据
开源项目CRMEB ssrf漏洞分析相关推荐
- Go实现的5G核心网开源项目free5gc源码分析系列 | Gopher Daily (2021.01.08) ʕ◔ϖ◔ʔ
每日一谚:"Abstractions should be discovered, not created." Go技术新闻 Go实现的5G核心网开源项目free5gc源码分析系列 ...
- BT开源项目Snark源码分析
BT开源项目Snark源码分析 Snark是国外一个开源Java的项目,实现了BitTorrent协议,通过分析此项目的源程序,可以更利于我们更加深入的了解当前流行的BT软件的原理,进而可以指导我们的 ...
- 【愚公系列】2023年05月 Web渗透测试之SSRF漏洞分析与实践
文章目录 前言 一.SSRF简介 二.ssrf漏洞验证 三.通过dict协议获取服务器端口运行的服务 四.通过file协议访问计算机中的任意文件 五.sftp及tftp协议在SSRF中的作用 前言 S ...
- 开源项目-学生成绩查询分析管理系统
哈喽,大家新年快乐!2023年分享的第一个开源系统-学生成绩查询分析管理系统 系统主要有学生管理,教师管理,课程管理,班级管理,成绩管理等模块 系统登录 系统主页 学生信息 班级信息 教师管理 课程管 ...
- 泛微某oa系统ssrf漏洞分析
0x00前言 元旦无聊看看了泛微,发现洞是真多,各种前台getshell等,这次先分享个简单的ssrf(这个CNVD不收),其他的日后会分享出来. 0x01代码分析 漏洞位置: E-mobile/Ap ...
- 基于‘纯洁的微笑’开源项目 — Favorites 源码分析
引言: 对于某语言不算熟悉的话自创项目是很痛苦的过程,即便笔者是一位掌握java的Android码农,对于java入门也是深感无力,毕竟语言是基础,但框架设计模式却与Android有出入,且学习成本较 ...
- go开源项目influxdb-relay源码分析(一)
influxdb-relay项目地址: https://github.com/influxdata/influxdb-relay,主要作为负载均衡节点,写入多个influxdb节点,起到高可用效果. ...
- Android开源项目xUtils HttpUtils模块分析
使用HttpUtils 只需要new 出一个实例便可. public class HttpFragment extends Fragment { // 同步请求 必须在异步块儿中执行 ...
- RiskSense Spotlight:全球知名开源软件漏洞分析报告
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 RiskSense 公司最近发布了关于全球当前知名开源软件 (OSS) 的漏洞分析报告.奇安信代码卫士团队编译如下. 摘要 开源软 ...
最新文章
- 南京师范大学874计算机答案,2017年南京师范大学电气与自动化工程学院874电路考研题库...
- SilverlightCMS开发之3经典三页面CMS浮现
- 容器、Docker与Kubernetes——Kubernetes的配置入门
- Table表格横竖线实现Css
- Java让数据库执行一条sql_java数据库编程——执行SQL 语句
- ubuntu安装jdk全过程-转
- 查看mysql二进制日志
- latex中怎么设置每一行文字都对齐_LaTeX技巧870:Latex如何在设置行距后让字体垂直居中?...
- [置顶] NYOJ117 求逆序数
- 网站竞价推广抗恶意点击及屏蔽特定地区IP实例
- 使用模板文件流形式导出文件破损或xxx中的部分内容有问题。解决
- 统计遗传学:第二章,统计分析概念
- Linux Entering rescue mode
- Ubuntu18.04运行QQ音乐
- 目前常用计算机配置,电脑常见主要配置、参数
- dubbo源码分析-dubbo-serialization
- XGBOOST与GBD区别笔记
- 算法作业04(回溯与分支界限算法)(骑士游历与行列变换问题)
- 查看linux版本的命令
- 根轨迹和系统参数的确定
热门文章
- c语言中fun和main,功能:编写函数fun求1!+2!+3!+ …… +n!的和,在main函 数中由键盘输入n值,并输出运算结果。请编写fun 函数...
- 第三方网站接入微信JS-SDK的分享自定义设置,微信分享小图标以及标题
- 计组复习(二):单周期数据通路与控制信号
- OPENWRT入门之三------刷入openwrt固件和首次使用
- 2 应用层 - 应用层协议原理
- ORA-14402:updating partition key column would cause a partition change
- 手机摄像头驱动_前9月手机镜头12强名单曝光 7家出货量突破2亿颗
- 中信计算机管理中心,2019广东省中信银行信用卡中心总部IT系统运营管理岗社会招聘...
- Flutter自定义圆形选择框
- 我搭建一个好用的云盘,并支持多用户注册登录-cloudeve