docker remote api未授权访问漏洞批量扫描脚本

it2025-05-05  6

docker remote api未授权访问漏洞批量扫描脚本 支持多线程 获取docker版本、所有容器信息 环境:python3 安装模块: requests docker-py == 1.8.1

# python3 # by 5wimming import queue import threading import time import requests import json from docker import Client thread_lock = threading.Lock() out_result = [] # 输出列表 multi = 7 # 线程数量 queueSize = 10 # 申请队列空间大小,值一般略大于multi的值 input_file_path = "./ip.txt" # 输入文件路径,每个ip一行 output_file_path = './result.txt' #输出文件路径 ports = ['2375'] # 扫描端口 wait_time = 1 # 文件线程准备时间(s),默认1s,若需要读取的文件大小大于10M可增加至5s以上,文件越大设置的时间理论上越长 def read_file(): with open(input_file_path, 'r') as fp: file_data = fp.readlines() data_list = file_data data_length = len(data_list) flag_xy = 0 while flag_xy != data_length: while (not workQueue.full()) and (flag_xy != data_length): workQueue.put(data_list[flag_xy]) flag_xy += 1 continue print("文件内容放入队列完成") def multi_start_main(): while not workQueue.empty(): file_line_api = workQueue.get() custom_def(file_line_api) def http_get(url): response = requests.get(url) return response.text def get_version(host, port): url = "http://"+host+":"+port+"/version" ret = json.loads(http_get(url)) client_api_version = ret['ApiVersion'] return client_api_version def get_container(host, port, docker_version): cli = Client(base_url='tcp://'+host+':'+port, version=docker_version) return cli def custom_def(file_line_api): ip = file_line_api.strip() result = '' for port in ports: try: docker_version = get_version(ip, port) result = ip + '\t' + port + '\tversion:' + docker_version docker_containers = get_container(ip, port, docker_version) result += '\t' + str(docker_containers.containers(all=True)) except Exception as e: print(ip, e) if result: print('success:', result) with thread_lock: out_result.append(result) break if __name__ == '__main__': threads = [] workQueue = queue.Queue(queueSize) fileThread = threading.Thread(target=read_file) fileThread.start() print("文件读取线程准备时间%ss" % wait_time) time.sleep(wait_time) for i in range(multi+1): thread = threading.Thread(target=multi_start_main) thread.start() threads.append(thread) for t in threads: t.join() fileThread.join() with open(output_file_path, 'w') as fw: fw.writelines(out_result) print("主线程结束,任务完成")
最新回复(0)