Chapter 3: Vulnerability Discovery and Analysis
A penetration test lives or dies on the quality of its discovery phase. Exploitation gets the attention, but
exploitation without disciplined discovery is guessing: you fire exploits at whatever responds, miss the real
weaknesses, and report noise that the client cannot act on. Vulnerability discovery is the craft of finding
weaknesses systematically, proving which ones are real, and ranking them so the exploitation phase spends its
limited time on the findings that actually lead somewhere. The exam tests this as judgment, not as tool trivia.
You will be given scan output, a half-finished assessment, or a finding that looks critical and asked what to do
next. The right answer is almost always the disciplined one: verify before you claim, read the evidence before
you rank, and understand what your tools can and cannot see.
1. Vulnerability scanning types
Scanning is not one activity. The scan type you choose decides what you can see, how much you can trust the
results, and what you might break. A penetration tester picks scan types the way a doctor picks tests: matched
to the question being asked, with full awareness of each method's blind spots.
1.1 Credentialed vs non-credentialed scans
A non-credentialed scan talks to a target from the outside, the way an unauthenticated attacker would. It probes
ports, reads banners, and infers software versions from what the target volunteers. It is safe, easy to arrange,
and realistic for the external attacker's view. Its weakness is inference: banners lie. Vendors backport security
fixes without changing version banners, custom builds report misleading versions, and a service can be
configured to hide its version entirely. A non-credentialed scan reports what the target claims to be, not what it
is.
A credentialed scan logs in with valid credentials and inspects the system directly: installed packages and patch
levels, registry or configuration values, running services, local security policy. It sees the truth instead of the
advertisement, which makes it far more accurate and far better at confirming that a patch is actually present.
The cost is access: somebody must provision credentials, manage them securely, and grant the scanner enough
privilege to read system state without handing it the keys to the kingdom. Credentialed scanning also changes
the trust picture: the scan account itself becomes a privileged credential that must be protected, rotated, and
removed when the assessment ends.
Credentialed scan. A vulnerability scan that authenticates to target systems with valid credentials and
inspects installed software, patch levels, and configurations directly, rather than inferring them from network
responses.
Non-credentialed scan. A vulnerability scan performed without logging in to targets, inferring vulnerabilities
from externally observable behavior such as banners, responses, and open ports.
When a scenario says a scanner reported a vulnerability that a patch record says is fixed, the first suspect is a
non-credentialed scan reading a stale banner. When a scenario says the scan account's password expired
mid-assessment, the findings after that point are effectively non-credentialed, even if the scan was configured
as credentialed. The exam loves that quiet downgrade.
Figure 10: Credentialed vs non-credentialed scan - what each method sees on the same target, and where banner-based errors come from
(illustrated)
1.2 Agent-based vs agentless scanning
Agent-based scanning installs a small agent on each host. The agent collects vulnerability data locally and
continuously, reports back on a schedule, and keeps working when the host is off the corporate network, which
is exactly when laptops accumulate unpatched software. Agents give you coverage of roaming and remote
machines and reduce the blast of network traffic that a scan window creates. Their costs are deployment and
maintenance: somebody installs the agent everywhere, updates it, and troubleshoots the hosts where it stops
reporting.
Agentless scanning needs no software on the target. The scanner reaches out over the network, authenticates,
and inspects remotely. It is simpler to start and leaves no footprint on the host, but it only sees hosts that are
reachable during the scan window, it generates more network traffic, and it depends entirely on network access
and working credentials at scan time. A laptop that is powered off during the window is simply not assessed.
Every scan method trades accuracy against reach against effort. Credentialed beats non-credentialed on
accuracy. Agents beat agentless on coverage of machines that move. Agentless beats agents on deployment
simplicity. There is no universally best scan, only the right scan for the asset, the window, and the constraint in
front of you. Exam questions that describe a constraint (a laptop fleet, a scan window, a fragile network) are
really asking you to apply this trade-off.
1.3 Network, web, and cloud scans
Network scans map hosts, ports, and services, then match what they find against vulnerability signatures. They
answer the infrastructure question: what is exposed, and what known flaws does it carry? Web scans go deeper
on one application: they crawl the site, map its pages and parameters, and test inputs for web flaws such as
injection and cross-site scripting. A web scan that cannot authenticate, handle session tokens, or reach pages
behind multi-step workflows will miss the application's most important surfaces. Cloud scans do not probe ports
at all in the traditional sense; they call provider APIs and read configurations, comparing them against
benchmarks. A cloud scan answers the configuration question: which buckets are public, which security groups
are open, which identities are over-privileged?
A tester at CertCrack.com planning an assessment of the company's public storefront would run all three, in
order: a network scan to map the exposed estate, a web scan of the storefront application itself with
authenticated sessions, and a cloud configuration review of the account hosting it. Each scan type answers a
question the others cannot ask.
CertCrack.com's scanner reports that a server is vulnerable to a flaw fixed two years ago, but the systems team
shows a patch record proving the fix was applied last month. The scan ran without credentials. What most
likely happened, and what single action best resolves the dispute?
Answer: The non-credentialed scan most likely read a stale banner, since the vendor backported the fix without
changing the reported version. A credentialed rescan of that host settles it: it reads the installed package
directly instead of trusting the banner.
2. SAST and DAST
Static and dynamic testing see different halves of an application. Confusing them is one of the exam's favorite
traps, because their names sound similar and their outputs look similar, but they find different flaws at different
times.
2.1 SAST: reading code without running it
Static application security testing (SAST) analyzes source code, bytecode, or binaries without executing the
program. It traces data flow from untrusted inputs (sources) to dangerous operations (sinks) and flags patterns
that look like injection, insecure cryptography, hardcoded secrets, or unsafe deserialization. SAST runs early, in
the development pipeline, before the code ever reaches a running environment. It finds flaws developers can fix
while the code is still in front of them, and it sees code paths that a running test might never reach, including
error handlers and rarely used branches.
SAST's weakness is that it reasons about code, not behavior. It flags patterns that look dangerous but are safe in
context, because a validation routine elsewhere neutralizes the input. It also misses flaws that only exist at
runtime: configuration mistakes, authentication logic that depends on deployment settings, and business-logic
flaws that no pattern can express. A SAST report is a list of candidates, and every candidate needs a human to
decide whether it is real.
SAST (static application security testing). Analysis of source code, bytecode, or binaries without executing
the program, tracing data flow from untrusted inputs to dangerous operations to find flaws early in
development.
2.2 DAST: attacking the running application
Dynamic application security testing (DAST) tests the running application the way an attacker would: it sends
requests, observes responses, and looks for evidence of flaws. It finds what SAST cannot see, because it sees the
application as deployed, with its real configuration, real authentication, and real data handling. A DAST finding
comes with proof in the form of a request and a response, which makes it easier to confirm and harder to
dismiss.
DAST's weakness is coverage. It can only test what it can reach. Pages behind authentication, multi-step
workflows, and single-page application states that the crawler never triggers are invisible to it. And DAST checks
range from safe to intrusive: a safe check reads banners and error messages, while an intrusive check sends
payloads that attempt injection, manipulate parameters, or trigger error conditions. Intrusive checks can modify
data, lock accounts, or disrupt a service, which is why they belong only in agreed test windows against
non-production targets or explicitly authorized production systems, never as a surprise against a live service.
DAST (dynamic application security testing). Testing of a running application by sending requests and
analyzing responses, finding flaws as they appear in the deployed system, including configuration and
authentication issues that code analysis cannot see.
If a question describes a flaw found by reading code before deployment, the answer is SAST. If it describes a
flaw found by sending requests to a running application, the answer is DAST. If it describes a flaw that only
appears when the application runs with its production configuration, DAST is the only method that could have
found it, because SAST never sees the deployment.
2.3 Pipeline placement and crawl gaps
SAST belongs early in the pipeline, on every commit or pull request, where its findings are cheapest to fix and its
false positives cost a developer minutes rather than an incident. DAST belongs later, against a deployed test
environment, on a schedule or before release, where it validates the assembled application. A mature program
runs both, because each covers the other's blind spots, and adds software composition analysis for third-party
libraries, which neither SAST nor DAST evaluates well.
Crawl gaps are DAST's most important limitation and the exam's favorite DAST trap. A crawler that never logs in
tests only the public surface. A crawler that cannot handle JavaScript-heavy pages misses the application's real
functionality. A crawler that never completes a multi-step checkout or form workflow never tests the code
behind those steps. When a DAST report comes back clean, the first question is not whether the application is
secure but whether the crawler saw the application. Coverage first, verdict second.
Figure 11: SAST vs DAST pipeline placement - where each method runs, what it sees, and where crawl gaps hide (illustrated)
SAST proves what code could do. DAST proves what the deployed application does. Neither proves the
application is secure. A clean SAST report means the code has no flagged patterns, not that it has no flaws. A
clean DAST report means the crawler found nothing on the pages it reached, not that the application is clean.
The tester reads both reports for what they cover, not for reassurance.
On your own computer, take a small practice web application you built yourself or a deliberately vulnerable lab
application running locally, and run a free DAST tool against it (for example, OWASP ZAP in baseline mode,
pointed only at your local lab application). Compare the findings with the pages you know the application has,
and list which pages the crawler never reached. That gap list is the most honest part of the report. Only scan
applications you own or are explicitly authorized to test.
3. Scan configuration and troubleshooting
A scan that fails silently is worse than a scan that fails loudly, because it produces a report that looks complete
while covering nothing. Most scan troubleshooting is about one question: did the scanner actually see and
assess what you think it assessed? Work through failures in order, from discovery to authentication to network
path to scope.
3.1 Discovery failures and scope
Discovery is the step where the scanner finds live hosts. It fails quietly more than any other step. ICMP echo is
commonly blocked, so a scanner that relies on ping to decide a host is alive will mark live hosts as dead and skip
them. DNS records go stale, so a scanner can probe an address that now belongs to a different host or to
nothing at all. DHCP reassigns addresses between the asset inventory and the scan, so the host you think you
scanned may be a different machine by scan time. And scope mistakes cut both ways: too narrow a scope
misses assets, while too broad a scope scans systems outside the authorization, which is both a reporting failure
and a professional one.
The fix is to verify discovery independently of the scanner's own claims. Compare the hosts the scanner reports
as alive against the asset inventory and the DHCP lease records for the scan window. If a critical host is missing
from the results, do not assume it is clean; assume it was never assessed, and find out why. A report that cannot
account for every in-scope asset is incomplete, and the tester says so in plain language rather than letting a
clean-looking report imply coverage that never happened.
Scan scope. The set of systems, addresses, and applications explicitly included in an assessment, bounded by
the authorization. Anything outside scope must not be scanned, and anything inside scope must be accounted
for in the results.
3.2 Authentication failures
Authentication failures are the most common reason scan quality collapses, and the most common reason is
mundane: expired passwords, rotated service account credentials, accounts locked by too many login attempts,
or privilege escalation that works on some hosts and fails on others. The symptom is a report that looks normal
but is thin: fewer findings than expected, findings that read like banner guesses, and an authentication
summary showing a low success rate. The danger is that nobody reads the summary. The findings get reported,
the coverage gap does not, and the client believes an estate was assessed that was only skimmed.
When authentication fails, stop and fix it before interpreting findings. Confirm the scan account is valid,
unlocked, and has the privilege the scanner needs on a sample host. Check the escalation path separately from
the login: a scanner can log in successfully and still fail to read patch state if its privilege escalation to
administrator or root fails. Re-run the failed hosts after the fix, and report the original coverage gap honestly:
the first run assessed only the authenticated portion, and the second run closed the gap.
3.3 Firewall blocks, windows, and DHCP correlation
Firewalls and intrusion prevention systems treat scanners the way they treat attackers, because from the
network's view there is no difference. A scanner's rapid probes trip rate limits, its payloads match intrusion
signatures, and its traffic gets dropped or shunned mid-scan. The result is a report full of hosts that appear
down or ports that appear filtered, when the real story is that the scanner's traffic never arrived. The fix is
coordination, not force: agree on scan windows, whitelist the scanner's source address on the path to the
targets, and confirm with the network team that the scan traffic is expected. If whitelisting is refused, say so in
the report and describe what the blocking cost in coverage.
Scan windows create their own failures. A scan that overruns its window gets cut off mid-assessment, leaving
part of the estate unscanned, or it keeps running into business hours and disrupts production traffic. Estimate
honestly: large estates, slow links, and intrusive checks all stretch scan time. Break the work into windows that
fit, and track completion per window rather than assuming the whole estate was covered.
DHCP correlation is the quiet bookkeeping that makes results trustworthy. When addresses change between
discovery and scanning, or between scanning and reporting, findings attach to the wrong host. Correlate scan
results with DHCP lease records and asset inventory by time: which host held this address during the scan
window? A finding reported against the wrong host wastes remediation effort and, worse, lets the truly
vulnerable host go unpatched.
When a scenario describes a scan that found far fewer hosts or findings than expected, check discovery and
authentication before concluding the environment is secure. Blocked ICMP, failed credentials, and firewall
shunning all produce clean-looking reports. The exam rewards the tester who distrusts a clean report until
coverage is confirmed.
Troubleshooting a failed or thin scan, step by step:
1. Confirm discovery: compare hosts found against the asset inventory and DHCP leases for the scan
window, and account for every missing host.
2. Check authentication: read the authentication summary first, verify the scan account on a sample host,
and fix login and privilege escalation failures before interpreting findings.
3. Check the network path: confirm the scanner's traffic is not being dropped, rate-limited, or shunned by
firewalls or intrusion prevention on the way to the targets.
4. Check scope and window: confirm the scan covered exactly the authorized scope and finished inside its
window, and re-run anything cut off or left out.
5. Correlate results by time: match findings to hosts using DHCP and inventory records from the scan
window, not from today, so findings attach to the right machines.
4. Reading scanner output
Scanner output is not a verdict. It is evidence, and evidence has to be read with attention to what produced it,
how confident the scanner is, and what the scanner could not see. The three scanners below illustrate the range:
each reports differently, and each has characteristic errors.
4.1 Nessus: plugins and evidence
Nessus organizes its knowledge as plugins: each plugin tests for one vulnerability, misconfiguration, or
information disclosure, and carries a severity derived from CVSS plus Tenable's own vulnerability priority rating.
A Nessus result names the host, the plugin, the severity, and the evidence the plugin observed, followed by a
solution, usually a patch or configuration change. The analyst's job is to read the evidence, not just the severity.
A plugin that reports based on a banner is weaker evidence than the same plugin reporting from a credentialed
check that read the installed package version. A plugin that reports a service as present because a port
responded is weaker still.
Nessus output also includes informational plugins that are not vulnerabilities at all: operating system
identification, open ports, traceroute data, authentication success or failure. Those informational results are
where coverage is verified. An analyst who reads findings before reading the informational plugins is reading
conclusions before checking whether the assessment happened.
Plugin. A single check in a vulnerability scanner's library that tests for one specific vulnerability,
misconfiguration, or information disclosure, reporting its evidence and a recommended solution.
4.2 OpenVAS: QoD and results
OpenVAS, the scanner behind Greenbone, reports each finding with a Quality of Detection (QoD) value: a
percentage expressing how confident the scanner is in the result. A QoD of 100 percent means the finding was
confirmed by a reliable method, such as a credentialed package check. A QoD of 70 percent typically means
banner-based detection, which carries the usual banner risk. Lower values mean weaker evidence, such as a
check that inferred a flaw from a generic behavior. QoD is the scanner telling you how much to trust each line,
and the analyst who ignores it treats a guess and a confirmation as equals.
OpenVAS results also carry severities, solutions, and references to advisories, and its reports separate
vulnerabilities from informational results. The reading discipline is the same as with Nessus: check coverage and
authentication first, weigh each finding by its evidence quality, and treat low-QoD banner findings as candidates
for manual validation rather than confirmed vulnerabilities.
Quality of Detection (QoD). An OpenVAS confidence value, expressed as a percentage, indicating how reliable
the detection method behind a finding is. Banner-based findings carry lower QoD than credentialed
confirmations.
4.3 Nikto: web server checks
Nikto is a web server scanner, not a general vulnerability scanner. It probes a web server for dangerous files and
directories, outdated server software, misconfigurations, insecure headers, and known issues in common server
software, reporting each item with a reference identifier. Its output is a list of observations about the server, not
a verdict about the application: a missing security header is a hardening note, an outdated server version is a
lead, and a discovered backup file is a finding that needs manual confirmation.
Nikto's characteristic error is the error-page false positive. Many servers return a custom error page with a 200
OK status for missing files, so Nikto's request for a known dangerous file receives a normal-looking response,
and its signature matches the error page content rather than the file itself. The analyst confirms Nikto findings
by requesting the item manually and reading the actual response: is this the dangerous file, or the server's
polite apology for not having it?
When a question gives you scanner output, read the evidence line before the severity line. A critical severity
attached to banner evidence is a candidate, not a confirmed critical. A medium severity attached to a
confirmed, remotely exploitable flaw on an internet-facing host may be the more urgent finding. Severity ranks
the flaw; evidence ranks your confidence; exposure and exploitability rank the priority.
An OpenVAS report lists a critical finding with a QoD of 70 percent, based on a version banner, on a server the
team patched last week. A credentialed check shows the patched package installed. What is the correct verdict,
and what should the analyst record?
Answer: False positive caused by banner-based detection of a backported patch. The analyst records it as a
false positive with the credentialed evidence attached, so future scans and auditors know why it was dismissed
instead of silently deleting it.
5. Validating findings: false positives and false negatives
Validation is the step that separates a penetration test from a scan dump. A scanner reports possibilities; the
tester proves which ones are real, documents the proof, and carries only the proven findings into exploitation
and reporting. Skipping validation does not save time. It spends the client's remediation budget on ghosts and
spends the tester's credibility with it.
5.1 Banner-based false positives
The banner-based false positive is the most common validation story in the field, and it has one root cause: the
scanner trusts what the target claims about itself. A vendor backports a security fix into an older version without
changing the version banner, so the banner still advertises the vulnerable version. A custom build reports a
generic version string. A load balancer answers with the version of a different component than the one behind
it. In each case the scanner matches its signature to the banner and reports a vulnerability that is not present.
The validation is straightforward and must be done before the finding is reported: confirm the installed version
or configuration directly, through a credentialed check, a package query, or a behavior test that distinguishes
the vulnerable version from the patched one. If the direct check shows the fix present, the finding is a false
positive. Record it as such, with the evidence, because the same banner will trigger the same finding on the next
scan, and the next analyst deserves to know it was already settled.
False positive. A reported finding that does not actually exist on the target, commonly caused by
banner-based detection of backported patches, error-page signature matches, or signatures that match a
pattern without confirming exploitability.
5.2 Error-page signature matches and stale data
Error-page matches are the web equivalent of banner errors. A scanner requests a known dangerous file, the
server answers with a custom error page and a success status, and the scanner's signature matches text on the
error page rather than the file. The validation is manual and quick: request the item yourself, read the response,
and ask whether this is the file or the apology. The same discipline applies to stale data: a scan report from last
month describes last month's estate. Hosts have been rebuilt, addresses reassigned, and patches applied since.
A finding is only as current as its scan, and a finding carried forward without revalidation is a rumor, not a result.
False negative. A real vulnerability that a scan fails to report, commonly caused by hosts offline during the
scan, failed authentication, incomplete scope, or checks the scanner does not have. A scanner only finds what
it is built to find.
False negatives are more dangerous than false positives, and the exam knows it. A false positive wastes
remediation time. A false negative creates a false sense of security: the report says clean, the vulnerability sits
untouched, and the next person to find it may not be friendly. When a question asks which error is worse, or
describes a breach through a host that scanned clean, the answer centers on false negatives and the coverage
gaps that caused them: failed logins, offline hosts, scope exclusions, and missing checks.
5.3 The validation procedure
Validation is a procedure, not an instinct. Run it the same way for every finding worth reporting, so nothing gets
confirmed by enthusiasm and nothing gets dismissed by fatigue.
1. Reproduce the finding yourself, outside the scanner, using the evidence the scanner recorded: the host,
the port, the request, the version it claims.
2. Examine the evidence for its strength: credentialed confirmation, banner inference, error-page match, or
generic signature, and weigh the finding accordingly.
3. Confirm the version or configuration directly: a package query, a configuration read, or a behavior test
that separates the vulnerable state from the patched state.
4. Test safely and within authorization: use non-destructive checks, avoid payloads that modify data or
disrupt services, and stop at proof of the flaw rather than pushing into exploitation.
5. Document the verdict with evidence: confirmed, false positive with the disproving evidence, or
inconclusive with the reason and the next step needed. An undocumented dismissal is a finding waiting to
recur.
Figure 12: Finding validation workflow - from scanner report through reproduction, evidence check, direct confirmation, and documented
verdict (illustrated)
When a question asks for the next step after a scanner reports a critical finding, the answer is almost never to
exploit it immediately. The answer is to validate it: reproduce it, check the evidence, confirm the version.
Exploitation of an unvalidated finding wastes the test window and risks reporting a flaw that does not exist.
CertCrack.com's web scanner reports that a backup archive is exposed at a predictable URL on the company
storefront. The analyst requests the URL manually and receives the site's standard "page not found" page with
a 200 OK status. What is the finding, and what should the analyst do?
Answer: Likely a false positive from an error-page signature match: the scanner matched its signature against
the custom error page, not the archive. The analyst records it as a false positive with the manual response as
evidence, and notes the server's error-page behavior, since the same pattern will recur on future scans.
6. CVSS and EPSS
Scoring exists so that findings can be compared and sorted, but a score is a model, not a measurement. The
tester who understands what a score includes, and what it leaves out, ranks findings well. The tester who sorts
by score alone ranks them badly and confidently.
6.1 Base, temporal, and environmental metrics
The Common Vulnerability Scoring System (CVSS) rates severity from 0.0 to 10.0 using three metric groups. Base
metrics describe the flaw itself, independent of time and organization: attack vector (network, adjacent, local, or
physical), attack complexity, privileges required, user interaction, scope, and the impact on confidentiality,
integrity, and availability. Base metrics do not change unless the flaw itself changes. Temporal metrics describe
factors that change over time: exploit code maturity (from unproven to functional to weaponized), remediation
level (from no fix to official fix available), and report confidence. A flaw with public exploit code scores higher
temporally than the same flaw with no known exploit. Environmental metrics let an organization adjust the
score for its own reality: modified base metrics for its environment, and confidentiality, integrity, and availability
requirements reflecting how much the affected asset matters. Two organizations with the same flaw can
legitimately arrive at different environmental scores, because the same flaw on a test server and on a payment
database is not the same risk.
CVSS (Common Vulnerability Scoring System). A standardized framework rating vulnerability severity from
0.0 to 10.0 using base, temporal, and environmental metric groups. CVSS measures severity, how bad the flaw
is in the abstract, not risk, which also depends on exposure, asset value, and threat activity.
6.2 Scope and severity bands
Scope answers one question: does exploiting this flaw affect a security authority beyond the vulnerable
component? If scope is unchanged, the impact stays within the component that holds the flaw. If scope is
changed, exploitation escapes into another authority, for example a sandbox escape that reaches the host, or a
vulnerability in a virtual machine that affects the hypervisor. Changed scope raises the score substantially,
because the blast radius is larger than the component itself. The exam tests scope with escape scenarios: a flaw
that stays inside its container is one score, and the same flaw breaking out of the container is a higher one.
The qualitative severity bands for the base score are: None (0.0), Low (0.1 to 3.9), Medium (4.0 to 6.9), High (7.0
to 8.9), and Critical (9.0 to 10.0). Bands are labels for communication, not decisions. A High and a Critical can sit
in either priority order once context is applied, which is why the next section matters more than the bands
themselves.
Scope (CVSS). Whether exploiting a vulnerability affects a security authority beyond the vulnerable
component. Changed scope, such as a sandbox or container escape, increases the score because the impact
extends past the flawed component.
6.3 Severity vs risk, and EPSS
Severity is not risk. A CVSS 9.8 flaw on an isolated system with no network path and no sensitive data may be
less urgent than a CVSS 6.5 flaw on an internet-facing server holding customer records, especially when exploit
code for the 6.5 is circulating. Risk adds what severity omits: exposure (can an attacker reach it?), exploit
availability (does working exploit code exist?), asset value (what does it protect?), and threat activity (is anyone
actually exploiting it?). Sorting a remediation queue by CVSS descending is the beginner's answer, and it is
usually wrong.
The Exploit Prediction Scoring System (EPSS) helps with one piece of that gap: it estimates the probability that a
vulnerability will be exploited in the wild in the next 30 days, expressed as a score from 0 to 1, often read
alongside its percentile rank among all vulnerabilities. A high EPSS score means exploitation is likely soon, even
if the CVSS score is moderate. Used together, the two scores answer different questions: CVSS says how bad the
flaw is, EPSS says how likely someone is to use it. A moderate CVSS with a high EPSS on an internet-facing asset
is a finding that jumps the queue, and the exam tests exactly that combination.
Figure 13: CVSS metric groups and severity bands - base, temporal, and environmental metrics feeding the score, with EPSS as the
exploitation-likelihood overlay (illustrated)
When a question gives you a severity score plus context, the context decides the priority, not the score alone.
Look for exposure (internet-facing?), exploit availability (public exploit? weaponized?), and asset value
(customer data? critical system?). If the question mentions EPSS, use it as the tiebreaker for likelihood: high
EPSS means exploit soon, regardless of a middling CVSS.
Open the free FIRST CVSS calculator online and score a vulnerability you read about recently, starting from its
base metrics. Then change one metric at a time, attack vector first, then privileges required, and watch how far
the score moves. Then look up the same vulnerability's EPSS score and percentile. The gap between the two
numbers is the difference between severity and risk, and learning to read that gap is the skill this section
teaches.
7. Manual validation techniques
Scanners find candidates. Manual validation proves them. The techniques below are the tester's confirmation
toolkit, and each one has the same discipline: use the smallest proof that settles the question, never a payload
that damages data or disrupts a service, and stay strictly inside the authorized scope. Every technique here is
described for use against your own lab systems or explicitly authorized targets.
7.1 Injection and cross-site scripting
SQL injection (SQLi) is confirmed by showing that input changes the query, not by dumping data. Start with a
single quote in an input field and watch for a database error or a change in behavior. Follow with a boolean test:
two inputs that should return different results if the input reaches the query, such as a true condition and a false
condition appended to the same parameter. If the application's responses differ exactly as the conditions
predict, the input is reaching the query, and the injection is confirmed. Never use destructive statements, never
extract more than the proof requires, and never run injection tests against production data.
Cross-site scripting (XSS) is confirmed by showing that input is reflected or stored without encoding, using a
harmless, unique marker string rather than an active payload. Submit a distinctive string in an input, then
search the response for that string unencoded. If it appears unencoded in the page, the reflection is proven, and
the finding is real regardless of whether a browser would execute it. Reflected XSS proves the flaw in one
request and response. Stored XSS proves it when the marker reappears for other users or later visits.
DOM-based XSS proves it when client-side code writes the marker into the page without encoding. In each case
the marker, not an exploit, is the proof.
SQL injection (SQLi). A flaw where untrusted input is incorporated into a database query without proper
parameterization or escaping, letting an attacker alter the query's logic or access data beyond the intended
scope.
Cross-site scripting (XSS). A flaw where untrusted input is included in a web page without proper output
encoding, letting an attacker inject script that runs in another user's browser. Reflected XSS arrives in one
request, stored XSS persists for later visitors, and DOM-based XSS is introduced by client-side code.
7.2 Access flaws: IDOR, traversal, and authentication bypass
Insecure direct object reference (IDOR) is confirmed by changing an object identifier and observing whether
access control follows. Request your own record, then request the same resource with a neighboring identifier,
and observe whether the application serves another user's data or rejects the request. If it serves the data,
authorization is missing on that object, and the finding is proven with two requests and no special tooling. The
exam angle is the distinction between authentication and authorization: the tester is logged in, the tester is who
they claim to be, and the application still serves data the tester should not see. Authentication passed;
authorization failed.
Path traversal is confirmed by asking for a file outside the intended directory and reading the response. A
sequence of parent-directory references in a file parameter, or an encoded variant of the same sequence, that
returns a system file proves the application builds file paths from untrusted input without validation. Test with a
harmless, well-known file on your own lab system, and read the response for the file's contents rather than an
error. Directory traversal and its cousins, including log poisoning and null-byte tricks on older systems, all share
the same root cause: untrusted input reaching a file path.
Authentication bypass is confirmed by showing that a control meant to restrict access can be sidestepped.
Common proofs include requesting a restricted page directly without going through the login flow (forced
browsing), modifying a client-side parameter that claims a role or privilege, replaying or tampering with a
session token, and reusing a session after logout. Each proof has the same shape: the application trusts
something the client controls. The tester documents the exact request that bypassed the control, because the fix
is server-side enforcement, and the developer needs to see precisely which check was missing.
IDOR (insecure direct object reference). A flaw where an application exposes a direct reference to an
internal object, such as a record identifier, without verifying that the requesting user is authorized for that
object.
Path traversal. A flaw where untrusted input is used to build a file path without validation, letting an attacker
reference files outside the intended directory.
7.3 SSRF, upload flaws, and TLS checks
Server-side request forgery (SSRF) is confirmed by making the server fetch a resource you control and observing
the result. In a lab, point a suspect parameter at an address you own, such as a listener on your own lab
machine, and watch for the incoming connection: if the server connects, it is issuing requests on your behalf.
The dangerous form, fetching internal services or cloud metadata endpoints, is proven the same way in
principle, but the tester proves it in the lab against lab services, never by reaching for real internal systems
outside the authorization. The exam angle is the trust inversion: the server, which sits inside the trust boundary,
becomes the attacker's proxy.
File upload flaws are confirmed by testing what the application accepts and what it does with the file. Change
the extension, the content type, and the filename casing, and observe whether a file the application should
reject is stored and reachable. Double extensions and case variations defeat allowlists that check only one form.
The proof is a stored file that the application serves back, on your own lab system, with harmless content. The
dangerous outcome, a stored file that executes on the server, is demonstrated by the application's willingness
to store and serve it, not by executing a real payload against a real target.
TLS checks are configuration validation, not exploitation. Confirm the certificate is valid, unexpired, and issued
for the hostname being visited. Confirm the server still offers weak protocols or ciphers, such as TLS 1.0 or 1.1,
or cipher suites without forward secrecy. Confirm whether HTTP strict transport security is present, which tells
browsers to refuse plaintext connections. A TLS finding is usually a hardening finding rather than a critical one,
but it matters in combination: a login page served with a weak configuration, or a certificate mismatch a user
has been trained to click past, turns a hardening note into an attack path.
SSRF (server-side request forgery). A flaw where an attacker makes a server issue requests to internal or
unintended destinations, using the server's trusted position to reach services the attacker cannot reach
directly.
Manual validation questions reward the smallest sufficient proof. A single quote that changes behavior proves
injection. A unique marker reflected unencoded proves XSS. A neighboring identifier that returns another
user's data proves IDOR. The exam punishes the tester who reaches for a destructive payload or a full exploit
when a safe proof already settles the question.
A tester at CertCrack.com is validating a suspected IDOR flaw in the company's lab storefront. Requesting
order 1042 returns the tester's own order. Requesting order 1043 returns another test account's order details,
including its shipping address. The tester is authenticated as the first account throughout. Is the flaw
confirmed, and what exactly failed?
Answer: Yes, confirmed. Authentication worked correctly, the tester is who they claim to be, but authorization
failed: the application never checked whether the requesting user owns order 1043 before serving it. The fix is
server-side authorization on every object request, not stronger login.
8. Prioritizing findings for exploitation
Discovery produces a list. Exploitation needs an order. The exploitation phase has limited time, and the order
decides whether it produces a meaningful result or a pile of low-value shells. Prioritization is where the tester's
judgment becomes visible, and the exam tests it as a ranking exercise: given several findings with context, which
goes first and why?
8.1 Exposure, public exploits, and attack chains
Exposure comes first. An internet-facing flaw is reachable by anyone, while an internal flaw requires a foothold
first. A flaw on a system holding customer data outranks the same flaw on an isolated test host. Public exploit
availability comes second: a flaw with a working public exploit or a Metasploit module is a flaw the tester can use
quickly and reliably, while a flaw needing custom exploit development may consume the whole test window.
Threat activity comes third: a flaw actively exploited in the wild, signaled by a high EPSS score or current
reporting, outranks a flaw nobody is using, because the window for the client is already closing.
Attack chains change the arithmetic. Two low-severity findings that combine into a critical path outrank either
finding alone. An information disclosure that reveals a username, plus a weak password policy, plus a missing
lockout, chains into account takeover. A reflected XSS that steals a session token, plus missing authorization on
an administrative function, chains into full compromise. The tester ranks chains, not just findings, and the report
describes the chain as one result with one severity, because that is how the client must fix it: break any link and
the chain fails.
8.2 Compensating controls and the final order
Compensating controls lower priority without removing the flaw. A web application firewall rule blocking an
injection pattern reduces the immediate risk but does not fix the code. Network segmentation containing a
vulnerable host reduces its blast radius but does not patch it. Endpoint detection watching for an exploit
technique raises the chance of catching it but does not prevent it. The tester records the control, credits it
honestly, and still reports the flaw, because controls fail, get misconfigured, and get removed, while the flaw
remains until fixed.
The final order for exploitation follows from all of this, and it is worth stating as a procedure the tester can apply
to any list:
1. Rank by exposure first: internet-facing and data-bearing systems before internal and isolated ones.
2. Rank by exploitability second: public exploits and weaponized code before flaws needing custom
development.
3. Rank by chaining third: findings that combine into a path to a valuable goal before isolated findings of
similar severity.
4. Adjust for compensating controls: credit controls that genuinely reduce risk, but never let a control erase
a finding.
5. Confirm the top findings before exploiting them: a validated critical beats an unvalidated critical, because
the exploitation phase must not spend its window on ghosts.
Prioritization is risk arithmetic, not score sorting. Exposure times exploitability times impact, adjusted for
controls and chains, is the ranking. A sorted CVSS list is a starting point for that arithmetic, never the answer to
it. The tester who can explain why a medium outranks a critical in a specific environment understands
prioritization; the tester who cannot is just reading a column.
CertCrack.com's assessment found three issues: a CVSS 9.8 flaw on an isolated internal server with no network
path from untrusted networks and no public exploit; a CVSS 6.5 flaw on the internet-facing storefront with a
public Metasploit module and active exploitation reported; and a CVSS 7.5 flaw on an internal workstation that
chains with an exposed username list to reach domain credentials. In what order should exploitation be
attempted, and why?
Answer: The storefront 6.5 first: internet-facing, publicly exploitable, and actively exploited, so it is the most
reachable and most urgent. The chained 7.5 second: its chain reaches domain credentials, which outranks its
individual score. The isolated 9.8 last: severe in the abstract, but unreachable without a prior foothold, so it
matters only after the chain is understood.
Chapter check
1. A non-credentialed scan reports a critical vulnerability on a server, but a credentialed rescan shows the
finding is gone and the patched package is installed. What most likely caused the original report?
A. The scanner's plugin feed was expired
B. Banner-based detection of a backported patch
C. A zero-day vulnerability in the scanner itself
D. The host was offline during the first scan
2. A tester wants to validate a new detection rule for one specific ATT&CK technique, credential dumping, in
isolation. Which approach fits best?
A. A full adversary campaign emulation
B. A network vulnerability scan of the estate
C. A cloud configuration benchmark
D. A single-technique test mapped to that ATT&CK technique
3. An OpenVAS report lists a finding with a QoD of 70 percent based on a version banner. What does the QoD
value tell the analyst?
A. The finding carries moderate confidence from banner-based detection
B. The finding is confirmed by a credentialed check
C. The finding is a confirmed false positive
D. The finding requires no further validation
4. During DAST testing of a web application, the report comes back clean. The application has an authenticated
administrative section and several multi-step workflows. What should the tester question first?
A. Whether the scanner's plugin feed is current
B. Whether the application has any vulnerabilities at all
C. Whether the crawler reached the authenticated pages and workflows
D. Whether the test window was long enough
5. A CVSS base score is 9.8 for a flaw on an isolated server with no network path from untrusted networks and
no public exploit. A second flaw scores 6.5 on an internet-facing server with a public exploit module and active
exploitation in the wild. Under risk-based prioritization, which should be addressed first?
A. The 9.8 flaw, because CVSS score always decides priority
B. The 6.5 flaw, because exposure and active exploitation raise its risk above the isolated flaw
C. Both equally, because they are in different severity bands
D. Neither until environmental scores are formally calculated
6. A tester submits a unique marker string into a search field and finds that string returned unencoded in the
response page. What has been proven?
A. A SQL injection flaw
B. An insecure direct object reference
C. A server-side request forgery flaw
D. A reflected cross-site scripting flaw
7. A cloud assessment tool produces an HTML report listing a public storage bucket and an overly permissive
security group. Which category of tool produced this output?
A. A cloud infrastructure assessment tool
B. A network vulnerability scanner
C. A web application scanner
D. A packet analysis tool
8. A scanner requests a known dangerous file from a web server and receives the site's custom error page with a
200 OK status. The scanner reports the file as present. What is the most likely explanation?
A. The file is genuinely present on the server
B. A credentialed scan confirming the file's contents
C. An error-page signature match producing a false positive
D. A banner-based detection of the server version
Answer key: 1. B - 2. D - 3. A - 4. C - 5. B - 6. D - 7. A - 8. C
Discovery Toolkit: Scanners for Artifacts, Clusters, and Secrets
Chapter 3 covered scan types, scanner output, and scoring. The objectives also name the newer scanning generation — tools that scan things (images, bills of materials, repositories, clusters) rather than only live hosts. These six are tested by name, and the distinctions between them are pure exam material.
TruffleHog (secrets in history). TruffleHog. A secrets scanner that digs through git history commit by commit — plus other sources such as S3 buckets and filesystems — with hundreds of credential detectors, and can verify many findings against the live service to prove the key still works. Its signature lesson: deleting a secret in a new commit does nothing, because history keeps it; rotation is the only fix.
Trivy (artifact vulnerability scanner). Trivy. Aqua Security's all-in-one scanner for container images, filesystems, and repositories: OS packages and language libraries checked against CVE databases, plus misconfiguration and secret checks. It is built for pipeline gates — scan the image, fail the build on critical findings. If the scenario says "scan the image before deployment," Trivy is the default answer.
Grype (SBOM-driven scanning). Grype. Anchore's vulnerability scanner that consumes a software bill of materials (typically produced by its companion, Syft) or an image, and matches the package inventory against vulnerability data. Its niche is analysis from the document: in air-gapped environments, the SBOM travels where the image cannot.
Kube-hunter (cluster weakness hunter). Kube-hunter. Aqua's tool for scanning a Kubernetes cluster for the weaknesses an attacker would exploit — exposed kubelet APIs, dashboards, etcd, and privilege paths. It can run remotely, inside the network, or as a pod, and reports findings by severity. Where Trivy scans what goes into the cluster, Kube-hunter tests the cluster itself.
Docker Bench for Security (host benchmark). Docker Bench for Security. A script that runs the CIS Docker Benchmark's checks against a host and daemon: configuration, container privileges, logging, and image trust. It audits how Docker is set up, not what is inside the images — the third leg of the container trio the exam loves to rotate (Trivy = image contents, Grype = SBOM contents, Docker Bench = host configuration).
PowerSploit (PowerShell offensive framework). PowerSploit. A collection of PowerShell modules for offensive work across the engagement, named in the objectives for the discovery phase because of PowerUp: its systematic checks for privilege-escalation weaknesses — service permissions, unquoted paths, DLL hijacking opportunities — on a Windows host under analysis.
Scanning things vs scanning hosts. Classic scanners (Nessus, OpenVAS) interrogate running systems over the network. The tools in this section mostly scan artifacts and configurations — an image, an SBOM, a repository, a cluster's API — often before anything is deployed, and usually inside a pipeline. Exam scenarios signal the family with their nouns: image, SBOM, commit history, and cluster point here; ports and services point back to the classic scanners.
| Tool | Scans | Input | Decides |
|---|---|---|---|
| TruffleHog | Secrets | Git history, files, buckets | Is a credential exposed — and still live? |
| Trivy | Package CVEs | Container image / filesystem | May this image deploy? |
| Grype | Package CVEs | SBOM (or image) | What in this bill of materials is vulnerable? |
| Kube-hunter | Cluster weaknesses | Live Kubernetes cluster | Where can an attacker get in? |
| Docker Bench | Host configuration | Docker host | Does the setup meet the CIS benchmark? |
| PowerSploit | Host privesc surface | Windows host (PowerShell) | What local weaknesses exist? |
The container trio. Trivy, Grype, and Docker Bench are the three-way confusion the exam exploits. Anchor on the object: an image in a pipeline is Trivy; an SBOM document is Grype; the host running Docker is Docker Bench. Kube-hunter is the odd one out — it attacks a live cluster rather than scanning an artifact.
Discovery Toolkit. Question. A pipeline generates a Syft SBOM for each release, and the security team — working offline — wants CVE matching from those files alone. Which tool, and what input does it never need? Answer: Grype; it works from the SBOM document and never needs to pull or run the image.
Want the full CompTIA PenTest+ (PT0-003) package?
This guide is free to read. Get the full PT0-003 practice exam — 750 questions plus 10 PBQs — with the complete PDF and online access.
Get PT0-003 Full Access — $10