一、项目简介
Halo [ˈheɪloʊ],意为光环。当然,你也可以当成拼音读(哈喽)。
轻快,简洁,功能强大,使用 Java 开发的博客系统。
Halo 的诞生离不开下面这些项目:
-
Spring Boot:Spring 的快速开发框架
-
Freemarker:模板引擎,使页面静态化
-
H2 Database:嵌入式数据库,无需安装
-
Spring-data-jpa:不需要写 sql 语句的持久层框架
-
Ehcache:缓存框架
-
Lombok:让代码更简洁
-
等等......
二、项目搭建
1、环境要求
以下是我的测试环境版本详情,除 JDK 需要以下指定版本外,其他仅供参考。
软件名称 | 版本 |
---|---|
操作系统 | Windows10 |
Java | JDK1.8_161(https://www.oracle.com/co/java/technologies/javase/javase8-archive-downloads.html,往下滑) |
Maven | 3.6.3 |
IDEA | 2024.x |
2、项目部署流程
源码下载地址:
https://github.com/halo-dev/halo/releases/tag/v0.4.3
下载完成后解压项目文件,使用 IDEA 以 Maven 方式打开该项目即可,会自动加载相关依赖。
该系统使用了 H2 Database 作为数据库,则不需要像 Mysql 那般操作。
进入src/main/java/cc/ryanc/halo/Application.java
代码中启动项目即可,如下图所示:
访问上述提供的地址http://localhost:8090
,进入安装向导,内容自行填写即可(备注:电子邮箱一定填写自己可以登录的,后面测试会用到),如下图所示:
最后成功安装后可按以下地址进行访问:
前台地址:http://localhost:8090/
后台地址:http://localhost:8090/admin/login
备注:
-
如果遇见报错,也许是因为依赖没有成功下载或加载,可尝试退出 IDEA 后重新进入,如依旧不能解决可将问题详细整理后在群里咨询。
-
如果你的系统内有多个 JDK 版本,记得在
文件 - 项目结构
(英文版 IDEA 看图寻找吧)将 JDK 版本设置为 JDK1.8_161,如下图所示:
三、SSRF 漏洞代码审计
正向梳理功能时,发现系统内安装主题处,可通过远程拉去的方式下载主题,可能会存在 SSRF 漏洞,如下图所示:
通过抓包获取到接口名为/admin/themes/clone
,通过关键字逐一尝试,最终使用关键字/clone
定位到该接口的 Controller 层代码为 ThemeController,如下图所示:
点击进入 ThemeController 层,具体代码位于第 180 行至第 201 行,如下所示:
下面进行代码审计分析。
①、第一步,单击 remoteAddr 查看传递调用关系,在第 186 行处进行了 isBlank 判空操作,没什么其他值得注意的。然后就直接到第 190 行,进行了 git clone 拼接传入的 remoteAddr 参数操作,使用的是 RuntimeUtil.execForStr 方法执行命令,如下图所示:
②、第二步,分析 RuntimeUtil.execForStr 方法。Ctrl加鼠标左键点击 execForStr,进入该方法,发现该方法是 Hutool 组件下的工具类,其中底层就是使用的 ProcessBuilder 执行的命令,没什么其他额外需要注意的代码,可自行分析。如下图所示:
③、第三步,总结来说,底层使用 ProcessBuilder 执行了 git clone 拼接 remoteAddr 的命令,其中 remoteAddr 我们可控,进而通过 git clone 可以进行了网络请求操作,导致触发 SSRF 漏洞。简单说就是 ProcessBuilder 命令执行加上 git clone 触发的 SSRF 漏洞。
最后,在第 190 行设置一个断点,内容如下图所示:
这么看来不仅存在 SSRF 漏洞,还可能存在远程命令执行漏洞。
四、SSRF 漏洞验证
访问外观 - 主题 - 主题安装的远程拉取功能,键入远程地址和主题名称,点击安装,抓取数据包如下图所示:
访问 DNSLog 地址,可以看到存在探测行为,如下图所示:
下面探测内网端口开放情况。
我开启了 8080,7089 这两个端口,可以通过响应时长判断出端口开放情况,如果端口开放响应时间很短,如果端口未开放则响应时间边长。
端口开放情况探测,如下图所示:
端口关闭情况探测,如下图所示:
原文始发于微信公众号(sec0nd安全):Java代码审计 || 通过某博客系统实战学习一个有趣的 SSRF 漏洞分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论