文章总结: 本文对Halo博客系统v0.4.3进行代码审计,发现多处高危漏洞。包括通过路径遍历实现的任意文件删除、读写漏洞,Freemarker模板注入引发的RCE,以及安装主题功能中因输入校验缺失导致的SSRF与命令执行风险。建议开发者严格过滤文件路径及外部输入参数。 综合评分: 85 文章分类: 代码审计,漏洞分析,WEB安全
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 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博客系统代码审计》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论