写在前面📕

挖洞,轻而易举啊。

准备 🙌

  • cherry studio

  • SAST工具

  • MCP(可选)

快速开始 💕

Cherry Studio🍒

准备你的ai agent。请注意限定它的工作目录以及权限。我这里直接开放所有权限。

提示词如下:

现在你是网络安全专家。请你辅助我完成代码审计工作

MCP

ai agent在读doc文件这一块显得很吃力。我配置了一个方便ai agent读文件的MCP工具:

主要代码如下:

@expose_tool(
    name="read_docx_file",
    description="读取本地 .docx 文件的文本内容。支持读取段落文本,不包含复杂的格式信息。"
)
def read_docx_file(file_path: str) -> str:
    """
    参数:
        file_path (str): .docx 文件的绝对路径或相对路径。

    返回:
        str: 文件中的所有文本内容,按段落换行。
    """
    try:
        # 1. 检查文件是否存在
        if not os.path.exists(file_path):
            return f"错误: 文件不存在 - {file_path}"

        # 2. 检查是否为 docx 后缀 (简单的检查,防止误读二进制文件)
        if not file_path.lower().endswith(".docx"):
            return "警告: 文件扩展名不是 .docx,本工具仅支持 .docx 格式。如果是旧版 .doc 文件,请先在 Word 中另存为 .docx。"

        # 3. 读取文档
        doc = Document(file_path)

        # 4. 提取所有段落的文本
        full_text = []
        for para in doc.paragraphs:
            if para.text.strip():  # 忽略空行,也可以改为保留空行
                full_text.append(para.text)

        # 5. 如果没有内容
        if not full_text:
            return "该文档似乎是空的,或者内容无法提取(例如内容全在表格或图片中)。"

        return "\n".join(full_text)

    except Exception as e:
        # 捕获特定的错误,比如如果不是有效的 zip/docx 文件
        error_msg = str(e)
        if "BadZipFile" in error_msg or "not a zip file" in error_msg:
            return "错误: 文件损坏或不是有效的 .docx 格式。如果是 .doc 文件,请先转换为 .docx。"
        return f"读取文件时发生错误: {error_msg}"

具体的MCP服务器框架见上一篇文章

MCP配置:

正文

现在可以使用ai agent进行代码审计了。

  1. 首先使用SAST工具生成一个漏洞报告。我这里使用ChanziSAST

  1. 让ai解读你的报告。正文如下:

我为你配置了有关DOCX阅读的MCP工具。现在请你阅读""C:\.xxx\xxxxxxxx\xxxxxxxxx.docx""这篇由SAST工具生成的报告,然后验证其中的漏洞是否为误报

生成结果如下:

验证漏洞

然后就是坐享其成的时候了。验证漏洞即可。