使用node.js解析从wpscan生成的json文件
#javascript #node #pentest

wpscan是在WordPress网站上执行安全评估的流行工具。
它生成了它发现的任何漏洞的详细报告,包括有关受影响插件,主题或WordPress版本的信息。
我们可以生成报告(通常以JSON文件输出),这可能很难分析和分析。

在本教程中,我们将介绍如何使用Node.js解析WPSCAN生成的JSON文件并从中提取有意义的信息。
我们还将使用流行的ExcelJS库来创建一个Excel电子表格,并带有WPSCAN发现的所有漏洞的表。

npm init -y
npm i exceljs

首先,我们将导入FS模块,并使用ReadFilesync函数将JSON文件读取为字符串。然后,我们将使用json.parse将字符串转换为JavaScript对象。

import { readFileSync } from "fs";

const file = readFileSync("./wpscan_output.json", "utf8");
const data = JSON.parse(file);

接下来,我们将提取WordPress版本,主要主题和插件的漏洞。
我们将将这些漏洞存储在单独的数组中,然后使用传播操作员(...)组合成单个数组。

const version_vulnerabilities = data.version.vulnerabilities;
const main_theme_vulnerabilities = data.main_theme.vulnerabilities;
const plugins_vulnerabilities = Object.values(data.plugins)
  .map((plugin) => plugin.vulnerabilities)
  .flat();
const vulnerabilities = [
  ...version_vulnerabilities,
  ...main_theme_vulnerabilities,
  ...plugins_vulnerabilities,
];

现在我们有一个数组中的所有漏洞,
我们可以使用ExcelJs创建具有这些漏洞表的Excel电子表格。
我们首先创建一个新的工作簿和一个新的工作表。然后,我们在数据中定义了表的列及其相应的键。

import exceljs from "exceljs";

const workbook = new exceljs.Workbook();
const worksheet = workbook.addWorksheet("Vulnerabilities");
worksheet.columns = [
  { header: "Title", key: "title", width: 50 },
  { header: "Fixed in", key: "fixed_in", width: 10 },
  { header: "URL", key: "url", width: 50 },
  { header: "WPVulnDB", key: "wpvulndb", width: 50 },
  { header: "CVE", key: "cve", width: 50 },
];

然后,我们可以迭代漏洞数组,并为每个漏洞添加一行。
我们使用适当的键和值为每个漏洞创建一个对象,然后将此对象传递给addrow函数。

vulnerabilities.forEach((vulnerability) => {
  let vulObj = {
    title: vulnerability.title,
    fixed_in: vulnerability.fixed_in,
    url: vulnerability.references.url,
    wpvulndb: vulnerability.references.wpvulndb?.join("\n") || "-",
    cve: vulnerability.references.cve?.join("\n") || "-",
  };
  worksheet.addRow(vulObj);
});

// make wrap text (optional)
worksheet.columns.forEach((column) => {
  column.style = { alignment: { wrapText: true } };
});

最后,我们可以使用WriteFile函数将Excel文件写入磁盘。

workbook.xlsx.writeFile("vulnerabilities.xlsx").then(() => {
  console.log("Excel file is written.");
});

tada!最终代码:

import { readFileSync } from "fs";
import exceljs from "exceljs";
const file = readFileSync("./wpscan_output.json", "utf8");
const data = JSON.parse(file);

const interesting_findings = data.interesting_findings;
const version_vulnerabilities = data.version.vulnerabilities;
const main_theme_vulnerabilities = data.main_theme.vulnerabilities;
const plugins_vulnerabilities = Object.values(data.plugins)
  .map((plugin) => plugin.vulnerabilities)
  .flat();
const vulnerabilities = [
  ...version_vulnerabilities,
  ...main_theme_vulnerabilities,
  ...plugins_vulnerabilities,
];
const workbook = new exceljs.Workbook();
const worksheet = workbook.addWorksheet("Vulnerabilities");
worksheet.columns = [
  { header: "Title", key: "title", width: 50 },
  { header: "Fixed in", key: "fixed_in", width: 10 },
  { header: "URL", key: "url", width: 50 },
  { header: "WPVulnDB", key: "wpvulndb", width: 50 },
  { header: "CVE", key: "cve", width: 50 },
];
const vulnerabilities_count = vulnerabilities.length;
console.log(
  `There are ${vulnerabilities_count} vulnerabilities in this website.`
);

vulnerabilities.forEach((vulnerability) => {
  let vulObj = {
    title: vulnerability.title,
    fixed_in: vulnerability.fixed_in,
    url: vulnerability.references.url,
    wpvulndb: vulnerability.references.wpvulndb?.join("\n") || "-",
    cve: vulnerability.references.cve?.join("\n") || "-",
  };
  worksheet.addRow(vulObj);
});

// wrap text
worksheet.columns.forEach((column) => {
  column.style = { alignment: { wrapText: true } };
});

workbook.xlsx.writeFile("vulnerabilities.xlsx").then(() => {
  console.log("Excel file is written.");
});

就是这样!
只有几行代码,我们就可以解析WPSCAN JSON报告,并创建一个带有所有漏洞表的Excel电子表格。这可能是快速分析WPSCAN扫描结果并识别需要修复的区域的有用工具。

我希望您对此教程有帮助。