Security+ Log Analysis PBQ: A Real One, Walked Through

By Moussa BENALI, Senior Network & Security Engineer · SY0-701 · Performance-based questions

Log-analysis PBQs are the ones candidates find slowest, and it is almost never because the logs are hard. It is because they start reading at line one. This walks through the reading order that makes them quick, the handful of signatures that carry nearly all the marks, and a full worked example with the reasoning spelled out.

💡
The habit that saves the most time: read the question before the logs. The excerpt is deliberately longer than it needs to be and most lines are there to be ignored. Knowing whether you are being asked "which host is compromised" or "which attack is this" turns forty lines of noise into a targeted search.
Your free Security+ exam code

PBQs are the ones that eat your time. Practise them under pressure.

A full-length SY0-701 practice exam covering every domain, with PBQ-style items, an explanation on every question and a coach that names your weak concepts. The code applies itself when you create the account.

SECPLUS-EXAM-FULL Redeem the code

Free, no credit card. Already have an account? Log in to start · New to PBQs? Start with the formats and strategy.

The three things that carry the signal

Almost every log-analysis PBQ resolves on one of these:

  1. Repetition. The same action many times in a short window. Brute force, spraying, scanning, exfiltration in chunks - all look like repetition before they look like anything else.
  2. Status and result codes. A run of failures followed by one success is the single most important pattern in security logging. HTTP 401/403 then 200. Windows 4625 then 4624.
  3. Anything that does not belong. SQL keywords in a URL. ../ in a path. A login at 03:00 from a country the company does not operate in. An internal host talking to an external IP on a port nothing should use.

Signature reference

What you seeWhat it isThe tell
Many failures, one account, one sourceBrute forceVolume against a single target
Few failures each, many accountsPassword sprayingStays under the lockout threshold - that is the point
' OR 1=1 --, UNION SELECT, %27SQL injectionDatabase syntax where user input belongs
../../etc/passwd, %2e%2e%2fDirectory traversalClimbing out of the web root
<script> in a parameterXSSMarkup where text belongs
Sequential ports from one sourcePort scanBreadth, not depth
Same user, two countries, minutes apartImpossible travelGeography that cannot be true
Large regular outbound transfers to one IPExfiltration / C2 beaconingRegularity - humans are not periodic
Account created, then added to adminsPrivilege escalation / persistenceThe order of the events

A worked example

Here is the kind of excerpt a PBQ gives you. The scenario: a public-facing web application is behaving strangely. Review the logs and identify the attack, then state whether it succeeded.

Web server access log:

10.20.4.12 - - [03/Aug/2026:14:22:01] "GET /index.php HTTP/1.1" 200 4821 10.20.4.12 - - [03/Aug/2026:14:22:09] "GET /products.php?id=14 HTTP/1.1" 200 3110 203.0.113.77 - - [03/Aug/2026:14:31:44] "GET /products.php?id=14' HTTP/1.1" 500 220 203.0.113.77 - - [03/Aug/2026:14:31:52] "GET /products.php?id=14%27%20OR%20%271%27%3D%271 HTTP/1.1" 500 220 203.0.113.77 - - [03/Aug/2026:14:32:10] "GET /products.php?id=14%20UNION%20SELECT%20NULL,NULL HTTP/1.1" 500 220 203.0.113.77 - - [03/Aug/2026:14:32:31] "GET /products.php?id=14%20UNION%20SELECT%20NULL,NULL,NULL HTTP/1.1" 200 9847 203.0.113.77 - - [03/Aug/2026:14:33:02] "GET /products.php?id=14%20UNION%20SELECT%20username,password,NULL%20FROM%20users HTTP/1.1" 200 41209 10.20.4.19 - - [03/Aug/2026:14:35:12] "GET /about.php HTTP/1.1" 200 2201

Reading it

  1. One source stands out. 10.20.x.x is internal and behaving normally. 203.0.113.77 is external and every one of its requests targets the same parameter. That is your actor.
  2. Decode the encoding. %27 is a single quote, %20 a space, %3D an equals sign. So request two is id=14' OR '1'='1. Examiners URL-encode precisely to see whether you can still read it.
  3. Follow the status codes - this is the answer. Three 500s, then 200. A 500 means the injected SQL broke the query. The attacker was column counting: two NULLs failed, three NULLs returned 200. They found the column count.
  4. The last line is the breach. Having matched the column count, they selected username, password FROM users - and it returned 200 with 41,209 bytes, roughly ten times a normal page. Data left the building.
⚠️
The distinction that earns the mark: the attack is SQL injection - but the question usually asks whether it succeeded. Errors alone (500s) mean attempts. The transition to 200 with an abnormal response size is what proves data was returned. Candidates who stop at "SQL injection" get half of it; the response size is the evidence of impact.

The follow-up you should expect

PBQs usually ask for a remediation as well. For this one, ranked as the exam would:

If asked for the best single answer, it is parameterised queries. If asked for immediate containment, it is the WAF rule or blocking the source. Read which one the question wants - that distinction between fix and contain is a recurring theme.

A second pattern: authentication logs

The other common excerpt. Same method, different tells.

14:02:11 auth: FAILED login user=jsmith src=198.51.100.23 14:02:12 auth: FAILED login user=mgarcia src=198.51.100.23 14:02:14 auth: FAILED login user=twilson src=198.51.100.23 14:02:15 auth: FAILED login user=achen src=198.51.100.23 14:02:17 auth: FAILED login user=dpatel src=198.51.100.23 14:02:19 auth: SUCCESS login user=rjones src=198.51.100.23 14:02:41 audit: user=rjones added to group "Domain Admins"

One source, one attempt each against different accounts - that is password spraying, not brute force. The distinction matters because it explains why account lockout did not fire: nobody crossed the threshold. Then a success, and twenty-two seconds later that account joins Domain Admins. Two events, two findings: initial access by spraying, then privilege escalation. The ordering is the story.

Under exam conditions

Your free Security+ exam code

Reading one walkthrough is not the same as doing it on the clock

A full-length SY0-701 exam with PBQ-style items and an explanation on every question - plus a coach that tells you whether PBQs are actually your weak spot or whether something else is costing more. One-time purchase, lifetime access.

SECPLUS-EXAM-FULL Redeem the code

Free, no credit card. Already have an account? Log in to start

Frequently asked questions

What is a log analysis PBQ?

A performance-based question showing one or more log excerpts - web, firewall, authentication or SIEM - asking you to identify what happened, classify the attack, or choose a response. It tests recognition from evidence rather than recall of a definition.

How do I answer one quickly?

Read the question first, then scan for repetition, status codes, and anything that does not belong in a normal request. Those three cover nearly every log PBQ on the exam.

How many PBQs are on the Security+ exam?

CompTIA does not publish a fixed number. Expect a handful at the start, within a maximum of 90 questions. They weigh more than a single multiple-choice item, and you can flag and return - usually the right move if one is eating your time.

What is the difference between brute force and password spraying in a log?

Brute force is many attempts against one account - high volume, single target. Spraying is a few attempts each against many accounts, deliberately staying under the lockout threshold. Same source IP, opposite shape.

How do I know if the attack actually succeeded?

Look for the transition. Failures then a success. Error codes then a 200. And check response size - a 200 returning ten times the normal byte count is data leaving. "It was attempted" and "it worked" are different answers, and the question usually wants the second.

Do I need to memorise log formats?

No. You need to read them. Know that a web log has source IP, timestamp, request and status code; that Windows 4625 is a failed logon and 4624 a successful one; and that URL encoding hides the interesting characters - %27 is a quote, %20 a space.