halo博客系统代码审计

admin 2026-01-23 12:22:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文对Halo博客系统v0.4.3进行代码审计,发现多处高危漏洞。包括通过路径遍历实现的任意文件删除、读写漏洞,Freemarker模板注入引发的RCE,以及安装主题功能中因输入校验缺失导致的SSRF与命令执行风险。建议开发者严格过滤文件路径及外部输入参数。 综合评分: 85 文章分类: 代码审计,漏洞分析,WEB安全


cover_image

halo博客系统代码审计

原创

hutututu hutututu

hutututu

2026年1月22日 14:45 江苏

halo博客系统代码审计

作者:1357685890793137

https://xz.aliyun.com/news/91293

文章转载自 先知社区

环境搭建

https://github.com/halo-dev/halo/releases/tag/v0.4.3

白盒审计

任意文件删除

filename参数被引用位置如图所示

srcPath:拼接用户主目录+/halo/backup/+类型+文件名

接着FileUtil.del方法进行删除,返回成功失败状态,目前看调用方法没有做防护操作,并且没有跨目录限制等操作

测试

在217行打断点

前台地址找到delBackup接口删除备份

根据断点回显,知道备份存储路径:C:\Users\21865/halo/backup/resources/resources_backup_20260116105816.zip

fuzz原数据包,C盘新建demo.txt测试,修改拼接的filename文件名为路径文件名,../根据目录级数自定调试,无论删除路径是否正确都会回显删除成功,调整好目录级数成功删除

任意文件写入漏洞

/editor/save接口处

可以看到接口接受两个参数分别为tplName与tplContent

tplName为获取主题路径后追加的名称参数

tplContent是new了FileWriter对象,将前端参数写入

因为前台功能点较少,可以直接在主题编辑界面抓包

根据代码逻辑写文件名称与内容

写入到桌面位置

任意文件读取漏洞

在同级功能点下发现数据包可以读取内容

跟进到/getTpl接口

逻辑代码也只是新建对象,追加路径及tplName参数,readString读取位置打个断点,看到文件路径

C:\Users\21865\Downloads\halo-0.4.3\halo-0.4.3\target\classes\templates\themes\anatole\module\comment.ftl

层级路径调整../数量,成功读取本机win.ini文档

freemarker模板注入漏洞

ThemeController.java文件引用freemarker模板

搜索模板引擎调用对象configuration功能位置,设置主题更新界面,没有做类解析的漏洞修复函数

UNRESTRICTED_RESOLVER

SAFER_RESOLVER

ALLOWS_NOTHING_RESOLVER

首页插入freemarker模板payload

<#assign&nbsp;value="freemarker.template.utility.Execute"?new()>${value("calc.exe")}

前台访问,成功执行

SSRF漏洞&命令执行

关键函数

  • HttpURLConnection.getInputStream

  • URLConnection.getInputStream

  • URL.openStream

  • ImageIO.read

  • OkHttpClient.newCall.execute

  • HttpClients.execute

安装主题功能点存在url地址输入

看请求包接口clone

检查是否两个参数内容是否为空,新建对象获取存储路径,RuntimeUtil.execForStr执行直接git拼接拉取

跟进execForStr,底层用的是ProcessBuilder类

输入函数完全来自用户,未做任何转义或校验

相同的也存在命令执行漏洞,使用&也是可以命令执行的

payload:git clone demo & calc

因为我安装主题一直失败没能复现,逻辑上是存在SSRF与命令执行漏洞


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:hutututu hutututu hutututu《halo博客系统代码审计》

评论:0   参与:  0