8
n8n 中文网amn8n.com

使用 Google Dorks、Parsera 爬取和 Gmail 报告进行安全侦察

中级

这是一个SecOps领域的自动化工作流,包含 11 个节点。主要使用 Code, Gmail, FormTrigger, AiScraper, SplitInBatches 等节点。 使用 Google Dorks、Parsera 爬取和 Gmail 报告进行安全侦察

前置要求
  • Google 账号和 Gmail API 凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "01ae5aeb0f03250e714391f10c410bfe49fcc3d6c533f86b8ecaa9248deb7305",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "db3ff71e-8a51-43a6-a6ab-8c68ec9ad9f0",
      "name": "表单输入",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -1280,
        -1980
      ],
      "webhookId": "f6a3f761-54de-4b3f-93bf-063c4181b5ca",
      "parameters": {
        "path": "f6a3f761-54de-4b3f-93bf-063c4181b5ca",
        "options": {},
        "formTitle": "Enter Target Domain",
        "formFields": {
          "values": [
            {
              "fieldLabel": "URL",
              "placeholder": "https://example.com"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "f0ed1ae2-59ce-47e1-bc5c-9335536b9772",
      "name": "逐个拆分搜索指令",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -840,
        -1980
      ],
      "parameters": {
        "options": {},
        "batchSize": 8
      },
      "typeVersion": 1
    },
    {
      "id": "100d5381-dd7e-433d-8ac0-e6803b024d88",
      "name": "搜索指令模板搜索",
      "type": "n8n-nodes-base.code",
      "position": [
        -1060,
        -1980
      ],
      "parameters": {
        "jsCode": "const inputUrl = $json[\"URL\"];\n\nconst match = inputUrl.match(/^(?:https?:\\/\\/)?(?:www\\.)?([^\\/]+)/i);\nconst domain = match ? match[1] : 'example.com';\n\nconst dorks = `\nsite:.example.com ext:pdf intext:invoice | intext:address\nsite:.example.com ext:php | ext:jsp | ext:asp\nsite:.example.com unurl:/git/config intext:\"[remote\" | intext:\"[branch\"\nsite:.example.com intitle:\"Index of /\"\nsite:.example.com intitle:login | intitle:\"sign in\" | inurl:login\nsite:.example.com intitle:\"phpinfo\" intext:\"HTTP_HOST\"\nsite:.example.com intext:\"Choose file\"\nsite:.example.com (ext:json | ext:log | ext:txt | ext:conf | ext:env)\n`;\n\nconst customizedDorks = dorks\n  .trim()\n  .split('\\n')\n  .map(line => {\n    const encoded = encodeURIComponent(line.replace(/\\.example\\.com/g, `.${domain}`));\n    return { json: { dork: `https://www.google.com/search?q=${encoded}` } };\n  });\n\nreturn customizedDorks;"
      },
      "typeVersion": 2
    },
    {
      "id": "cdd1fdef-f29f-43e1-b967-fd8fedba8415",
      "name": "使用代理抓取",
      "type": "n8n-nodes-aiscraper.aiScraper",
      "position": [
        -620,
        -1980
      ],
      "parameters": {
        "url": "={{ $json.dork }}",
        "resource": "agent",
        "agentName": "google",
        "requestOptions": {}
      },
      "credentials": {
        "aiScraperApi": {
          "id": "ROPOn643mdU0j2To",
          "name": "AI Scraper account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "3a41049b-1c6b-43cd-8da3-2aa13c912046",
      "name": "清理输出",
      "type": "n8n-nodes-base.code",
      "position": [
        -400,
        -1980
      ],
      "parameters": {
        "jsCode": "return $input.all().map(item => {\n  const link = item.json.Link;\n\n  // Filter logic\n  const isValid =\n    link &&\n    link.startsWith('http') &&\n    !link.includes('google.com') &&\n    !link.startsWith('/search') &&\n    !link.startsWith('#');\n\n  return isValid\n    ? { json: { cleanedLink: link } }\n    : null;\n}).filter(Boolean);\n"
      },
      "typeVersion": 2
    },
    {
      "id": "82ddf50d-c3e5-452c-ac18-ce85b88c157a",
      "name": "生成HTML",
      "type": "n8n-nodes-base.code",
      "position": [
        -180,
        -1980
      ],
      "parameters": {
        "jsCode": "const links = $input.all().map(i => i.json.cleanedLink);\n\nlet markdown = \"### Key Links Identified:\\n\\n\";\n\n// For numbered lists, usually a single newline is enough if the numbering is consistent.\n// However, if the renderer is still lumping, forcing with \\n\\n is robust.\n// Alternatively, explicit Markdown list syntax:\nmarkdown += links.map((l, i) => `${i + 1}. [${l}](${l})`).join('\\n\\n');\n\nreturn [{ json: { markdown } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "fce1a6ad-1663-40ae-92a3-b4ad5aded080",
      "name": "发送消息",
      "type": "n8n-nodes-base.gmail",
      "position": [
        40,
        -1980
      ],
      "webhookId": "b77ff6a1-c0de-407c-ac25-9871d0d8bc18",
      "parameters": {
        "sendTo": "example@gmail.com",
        "message": "={{ $json.markdown }}",
        "options": {},
        "subject": "=Google Dorks Report"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "D27NgmOmFA90smsf",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "9d3d5d12-5c91-484f-84a0-be0ef26f76f7",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1340,
        -2120
      ],
      "parameters": {
        "height": 100,
        "content": "## 输入URL"
      },
      "typeVersion": 1
    },
    {
      "id": "80868822-ece2-473b-a9da-c079c3f6e469",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -660,
        -2160
      ],
      "parameters": {
        "width": 380,
        "content": "## Parsera节点"
      },
      "typeVersion": 1
    },
    {
      "id": "ae462b28-e9c3-4865-8c1c-c7c45a2126f7",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1000,
        -2140
      ],
      "parameters": {
        "height": 120,
        "content": "## Google搜索指令"
      },
      "typeVersion": 1
    },
    {
      "id": "6feb6169-cf44-4af6-ae03-450197753f8f",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        -2140
      ],
      "parameters": {
        "width": 280,
        "height": 120,
        "content": "## 设置Gmail账户"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Form Input": {
      "main": [
        [
          {
            "node": "Dorks Template Search",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean Output": {
      "main": [
        [
          {
            "node": "Generate HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate HTML": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape with agent": {
      "main": [
        [
          {
            "node": "Clean Output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Dorks Template Search": {
      "main": [
        [
          {
            "node": "Split Dorks One-by-One",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Dorks One-by-One": {
      "main": [
        [
          {
            "node": "Scrape with agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

中级 - 安全运维

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量11
分类1
节点类型6
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Sean Birmingham

Sean Birmingham

@knute

I am seeking opportunities where I can leverage my skills and experience to contribute effectively. I thrive in environments that value adaptability, routine, and clear communication. I am excited to explore new opportunities and bring my unique perspective and determination to a forward-thinking organization.

外部链接
在 n8n.io 查看

分享此工作流