Turning Nessus and Burp Suite Output into a Client-Ready Report

Five steps from a Nessus or Burp Suite export to a client-ready pentest report: confirm, group per issue, rate for the client, rewrite, keep the evidence.

A Nessus or Burp Suite export becomes a client-ready report in five steps: confirm each result is real, collapse per-host results into one finding per issue, rate each issue for this client rather than in general, rewrite the description and remediation for the people who will fix it, and keep the scanner’s output as evidence. Pasting the export straight in skips all five, and the client can tell.

What the two exports give you

Nessus exports a scan’s results as a .nessus file, an XML document holding every host and every plugin result: the plugin’s name and number, a severity from 0 for informational to 4 for critical, CVSS scores where the plugin has them, a description, a solution and the plugin’s output for that host. Its CSV export carries much the same in rows, repeating a result once for each CVE it lists.

Burp Suite Professional’s reporting wizard exports the issues you select as HTML or XML. The XML keeps each issue’s name, host and path, its severity (high, medium, low or information) and its confidence (certain, firm or tentative), the issue detail and remediation, and, if you choose, the requests and responses, which can be Base64 encoded so the file stays valid XML.

ExportWhat one entry isIts ratingWhat it knows about this client
NessusOne plugin result on one host0 to 4, informational to criticalWhat the host answered
Burp SuiteOne issue at one locationHigh to information, with a confidenceThe request and the response

Neither knows what the host holds, who can reach it, or what the client has already decided about it. That is the gap the five steps close.

Step one: confirm before you write

A scan run without credentials often decides a host is vulnerable from the version number a service announces. Linux distributions routinely fix security issues without changing the upstream version number, changing only their own package release, so those remote checks over-report on exactly the servers that are patched. Confirm with the installed package’s own release, or with a credentialed scan, which compares against the distribution’s own fixed packages, before writing any of them up.

Burp gives you its own doubt in the confidence column. A tentative issue is one Burp itself is unsure of; firm and certain issues still deserve a look by hand before anything rated medium or above reaches the client. False positives in pentest reports covers confirming in proportion to the rating.

Step two: one finding per issue

A scanner reports per host and per location, so one missing patch on forty servers is forty Nessus results, and one missing header across fifty pages is fifty Burp issues. The client has one problem with one fix in each case. Group results by issue into a single finding that lists every affected host or path.

The same issue often arrives under different names from different tools. Deduplicating vulnerability scanner findings covers matching them before a developer sees the same fix twice.

Step three: rate it for this client

A scanner rates an issue in general. Your rating should reflect where the host sits, what it holds and who can reach it: an outdated web server on an isolated test network and the same server facing the internet in front of payment data are not the same finding. Start from the scanner’s rating, adjust it for what you know, and when the two differ, say why in the finding, so a reviewer comparing your report with the raw export understands the change. CVSS scoring mistakes in pentest reports covers the scoring itself.

Step four: rewrite it for the person who fixes it

Scanner text is written for everyone who will ever run the check, which makes it accurate and generic. Rewrite the description in terms of this client’s estate: which servers, which component, what an attacker could do here. Rewrite the remediation as the change to make, with the version to move to or the setting to change, and say who usually owns that kind of change. Keep the scanner’s references, the CVE numbers and vendor advisories, because those are what an engineer will search for.

Writing remediation a developer will actually action covers what makes the difference between a fix that is scheduled and one that is argued about.

Step five: keep the output as evidence

For each host, keep the plugin output or the request and response that shows the issue, labelled with the host and port it came from. That is what lets the client’s engineers see the problem for themselves, and what lets you answer a challenge months later. Remove session tokens, credentials and personal data before it goes in, and trim long responses to the part that matters.

Merging scanner results with your own findings

Scanner output is rarely the whole engagement. A tester who confirms an outdated component by hand and then imports a scan reporting the same component ends up with two findings for one issue, one in their words and one in the scanner’s. Merge them, keep the tester’s write-up, and add the scanner’s hosts and output to it as further evidence. Manual evidence of the effect is stronger than a scanner’s inference, so it leads.

The same applies in reverse. A scanner result that led you to something worse, such as an outdated plugin that turned out to allow file uploads, belongs inside the finding you wrote about the upload, not as a separate entry with a lower rating sitting beside it.

What the client should never receive

The scanner’s own PDF, attached as the report or as an appendix nobody asked for, tells the client that nobody read it. If the client wants the raw output, perhaps for their own tracking, give it to them as data alongside the report and say what it is. The report itself should contain only findings somebody has confirmed, rated and written up.

Doing it without retyping

Confirming, rating and rewriting are judgement, and they are where a tester’s time should go. Copying hosts, plugin output and references from an export into findings is not. A reporting tool that reads the export can do the grouping and carry the evidence across, so the tester starts from one draft finding per issue rather than a spreadsheet of rows.

Pental’s Import from scanner reads the .nessus file and the Nessus CSV exports, Burp Suite’s XML issue export and fourteen other formats, and shows everything it read before a finding exists. It makes one finding per issue with every affected host listed and each host’s output kept as evidence, takes your Library’s wording where your Library has the issue, and leaves out results the scanner itself marked as false positives. Importing scanner output as findings goes through it.

Common Questions

Can you turn a Nessus scan into a pentest report?
Yes, but not by pasting the export. Confirm each result, collapse per-host results into one finding per issue, rate each issue for the client, rewrite the description and remediation, and keep the plugin output as evidence.
How do you export issues from Burp Suite for a report?
In Burp Suite Professional, select the issues and use the reporting wizard to export them as XML, including the requests and responses if you want them as evidence. The XML keeps each issue’s severity, confidence, location and detail.
Should a scanner’s severity go straight into a pentest report?
No. A scanner rates an issue in general, without knowing where the host sits or what it holds. Start from its rating, rate the issue for this client, and say why when the two differ.
How do you stop a Nessus report listing the same issue on every host?
Group the results by issue into one finding that lists every affected host, keeping issues apart when they differ in substance. The client then sees one problem with one fix and a list of where to apply it.

Keep Reading

Setup guide

See the product set up, end to end

The whole setup in 10:01, with chapters you can jump to: registering, your own domain, your own database in any of three places, your own mail server, branding, the first sign-in, updating the database on Supabase Cloud, and moving the database if you change your mind.

  • 0:00 · Registering, signing in, and the free trial
  • 0:44 · Your name and your firm’s name
  • 0:50 · Custom domain
  • +6 more