项目地址: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漏洞分析相关推荐

  1. Go实现的5G核心网开源项目free5gc源码分析系列 | Gopher Daily (2021.01.08) ʕ◔ϖ◔ʔ

    每日一谚:"Abstractions should be discovered, not created." Go技术新闻 Go实现的5G核心网开源项目free5gc源码分析系列 ...

  2. BT开源项目Snark源码分析

    BT开源项目Snark源码分析 Snark是国外一个开源Java的项目,实现了BitTorrent协议,通过分析此项目的源程序,可以更利于我们更加深入的了解当前流行的BT软件的原理,进而可以指导我们的 ...

  3. 【愚公系列】2023年05月 Web渗透测试之SSRF漏洞分析与实践

    文章目录 前言 一.SSRF简介 二.ssrf漏洞验证 三.通过dict协议获取服务器端口运行的服务 四.通过file协议访问计算机中的任意文件 五.sftp及tftp协议在SSRF中的作用 前言 S ...

  4. 开源项目-学生成绩查询分析管理系统

    哈喽,大家新年快乐!2023年分享的第一个开源系统-学生成绩查询分析管理系统 系统主要有学生管理,教师管理,课程管理,班级管理,成绩管理等模块 系统登录 系统主页 学生信息 班级信息 教师管理 课程管 ...

  5. 泛微某oa系统ssrf漏洞分析

    0x00前言 元旦无聊看看了泛微,发现洞是真多,各种前台getshell等,这次先分享个简单的ssrf(这个CNVD不收),其他的日后会分享出来. 0x01代码分析 漏洞位置: E-mobile/Ap ...

  6. 基于‘纯洁的微笑’开源项目 — Favorites 源码分析

    引言: 对于某语言不算熟悉的话自创项目是很痛苦的过程,即便笔者是一位掌握java的Android码农,对于java入门也是深感无力,毕竟语言是基础,但框架设计模式却与Android有出入,且学习成本较 ...

  7. go开源项目influxdb-relay源码分析(一)

    influxdb-relay项目地址: https://github.com/influxdata/influxdb-relay,主要作为负载均衡节点,写入多个influxdb节点,起到高可用效果. ...

  8. Android开源项目xUtils HttpUtils模块分析

    使用HttpUtils 只需要new 出一个实例便可. public class HttpFragment extends Fragment {     // 同步请求 必须在异步块儿中执行     ...

  9. RiskSense Spotlight:全球知名开源软件漏洞分析报告

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 RiskSense 公司最近发布了关于全球当前知名开源软件 (OSS) 的漏洞分析报告.奇安信代码卫士团队编译如下.   摘要 开源软 ...

最新文章

  1. 南京师范大学874计算机答案,2017年南京师范大学电气与自动化工程学院874电路考研题库...
  2. SilverlightCMS开发之3经典三页面CMS浮现
  3. 容器、Docker与Kubernetes——Kubernetes的配置入门
  4. Table表格横竖线实现Css
  5. Java让数据库执行一条sql_java数据库编程——执行SQL 语句
  6. ubuntu安装jdk全过程-转
  7. 查看mysql二进制日志
  8. latex中怎么设置每一行文字都对齐_LaTeX技巧870:Latex如何在设置行距后让字体垂直居中?...
  9. [置顶] NYOJ117 求逆序数
  10. 网站竞价推广抗恶意点击及屏蔽特定地区IP实例
  11. 使用模板文件流形式导出文件破损或xxx中的部分内容有问题。解决
  12. 统计遗传学:第二章,统计分析概念
  13. Linux Entering rescue mode
  14. Ubuntu18.04运行QQ音乐
  15. 目前常用计算机配置,电脑常见主要配置、参数
  16. dubbo源码分析-dubbo-serialization
  17. XGBOOST与GBD区别笔记
  18. 算法作业04(回溯与分支界限算法)(骑士游历与行列变换问题)
  19. 查看linux版本的命令
  20. 根轨迹和系统参数的确定

热门文章

  1. c语言中fun和main,功能:编写函数fun求1!+2!+3!+ …… +n!的和,在main函 数中由键盘输入n值,并输出运算结果。请编写fun 函数...
  2. 第三方网站接入微信JS-SDK的分享自定义设置,微信分享小图标以及标题
  3. 计组复习(二):单周期数据通路与控制信号
  4. OPENWRT入门之三------刷入openwrt固件和首次使用
  5. 2 应用层 - 应用层协议原理
  6. ORA-14402:updating partition key column would cause a partition change
  7. 手机摄像头驱动_前9月手机镜头12强名单曝光 7家出货量突破2亿颗
  8. 中信计算机管理中心,2019广东省中信银行信用卡中心总部IT系统运营管理岗社会招聘...
  9. Flutter自定义圆形选择框
  10. 我搭建一个好用的云盘,并支持多用户注册登录-cloudeve