Skip to content

Instantly share code, notes, and snippets.

@NyaMeeEain
Forked from 3lpsy/filter_nessus_risks.py
Created December 19, 2020 04:50
Show Gist options
  • Save NyaMeeEain/395cd73d598b3f4d09d59477ec9e6103 to your computer and use it in GitHub Desktop.
Save NyaMeeEain/395cd73d598b3f4d09d59477ec9e6103 to your computer and use it in GitHub Desktop.
Filter out lower risk vulns in .nessus file
import sys
import argparse
from pathlib import Path
import lxml.etree as et
def run_filter(file, risks):
if len(sys.argv) < 1:
print("usage: [script].py nessusfile.nessus")
sys.exit(1)
if isinstance(file, str):
file_path = Path(file)
content = file_path.read_text()
else:
content = file.read().decode("utf-8")
file.close()
tree = et.fromstring(content, parser=et.XMLParser(huge_tree=True))
for bad in tree.xpath("//risk_factor"):
if bad.text.lower() not in risks:
# print("Filtering item")
# remove item from item's parent
bad.getparent().getparent().remove(bad.getparent())
print(str(et.tostring(tree, pretty_print=True).decode()))
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"-r",
"--risk",
action="append",
help="risks to keep (default: ['critical', 'high','serious'])",
)
parser.add_argument("file", type=str, help="the .nessus file to parse")
args = parser.parse_args()
file = args.file
risks = args.risk
# can't remember if it's high or serious
if not args.risk:
risks = ["critical", "high", "serious"]
risks = [r.lower() for r in risks]
run_filter(file, risks)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment