Skip to content

Instantly share code, notes, and snippets.

@3lpsy
Last active December 19, 2020 04:50
Show Gist options
  • Save 3lpsy/aa498b40f73f468ee14487fc41699ac7 to your computer and use it in GitHub Desktop.
Save 3lpsy/aa498b40f73f468ee14487fc41699ac7 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