Blog··7 min read

Is Claude Sonnet 4.6 good for pentesting? One Darkmoon run on OWASP Juice Shop, measured

Darkmoon's open-source CLI with claude-sonnet-4-6 on OWASP Juice Shop: 16 challenges, 43 points, USD 17.44, and what one tool and model run shows.

Disclosure. This page reports one configuration of a benchmark that the Darkmoon team built and ran, and the configuration is our own open-source tool. It is not an independent evaluation. It is the detailed companion of the full model comparison, which explains the protocol, the scoring and why that study cannot rank models.

Summary

In one run (R01, 2026-07-01), the Darkmoon open-source CLI driving claude-sonnet-4-6 solved 16 OWASP Juice Shop challenges for 43 difficulty points, 10.9% of the 394 points in the catalogue, including the only 5-star challenge solved in the whole dataset (Retrieve Blueprint). The run made 244 successful LLM calls and cost USD 17.44, that is USD 1.09 per solved challenge; 97.6% of the 36.5 million prompt tokens were served from Anthropic's prompt cache. All 16 solves came in the first 52.8 minutes of a 120.4-minute session.

Two facts limit what this means. The target had not been reset, so 7 relevant challenges were already solved and could not be credited. And this is a single run of a tool and model pair: it tells you how that pair behaved once, not whether Claude Sonnet 4.6 is “good for pentesting” in general.

Exact configuration

ItemValue (as recorded)
Configuration / runC01 / R01
ToolDarkmoon, open-source CLI (github.com/ASCIT31/Dark-Moon)
Tool revision130f6de (default-branch head resolved at Launch; merge of pull request #26)
Model labelclaude-sonnet-4-6
LLM routeLiteLLM proxy -> anthropic/claude-sonnet-4-6 (metered)
Date (UTC)2026-07-01
Run statusdone (stopped by the operator)
Tool settings, prompts, hardwarenot recorded

The revision is the one the platform resolved through the GitHub API when the run was launched [2]; the tool reference field was empty, so we cannot prove the locally executed build was exactly that commit. Darkmoon's open-source edition is the CLI and its agents; nothing in this run involves the Pro web dashboard or the Pro remediation agent.

Test environment

Target: one OWASP Juice Shop instance, Docker image bkimminich/juice-shop:latest (digest not recorded), with the 113-challenge catalogue in force in July 2026 (394 points). Black-box access only through the platform's capture proxy, which logs every request and returns 403 on /api/challenges*. Solves are detected by polling Juice Shop's own challenge flags about once per second, and a challenge scores its star rating (1 to 6). The protocol is published in methodology/experimental-protocol.md and the scoring analysis in methodology/scoring-methodology.md.

Observed results

MeasureR01
Challenges solved (credited)16
Points (sum of stars)43 (score recomputed, matches the stored score)
Share of catalogue points10.9% of 394; 11.4% of the 377 points still creditable
Wall clock (Launch to Stop)120.4 min
Active traffic window118.8 min
First / last solve3.4 min / 52.8 min after Launch
Proxied HTTP requests7,886 (4,045 distinct paths)
Requests per solved challenge492.9
Blocked requests (403 on /api/challenges*)121
Points per hour (wall clock)21.4

The 121 blocked requests are not evidence of an attempt to read the solutions: most are the trailing-slash form of the endpoint, and the Juice Shop front-end itself may issue such calls when a browser is driven through the proxy. We did not verify this against the front-end source, so we report the count without interpreting it.

No trace excerpts

The benchmark database stores only method, path and status for each request, and paths can carry exploit payloads. The public dataset therefore contains per-run counts only, and this article quotes no trace. The solve times below are offsets from Launch, the finest public granularity.

The challenges it solved

MinuteChallengeCategoryStars
3.4Outdated AllowlistUnvalidated Redirects1
4.3Database SchemaInjection3
6.8Login JimInjection3
7.4View BasketBroken Access Control2
8.8Zero StarsImproper Input Validation1
9.0Reset Jim's PasswordBroken Authentication3
10.9Forged ReviewBroken Access Control3
12.8Access LogObservability Failures4
14.2Admin RegistrationImproper Input Validation3
15.1Retrieve BlueprintSensitive Data Exposure5
19.1Forged FeedbackBroken Access Control3
20.4Deprecated InterfaceSecurity Misconfiguration2
20.4XXE Data AccessXXE3
41.8Security PolicyMiscellaneous2
42.9Login BenderInjection3
52.8Admin SectionBroken Access Control2

By difficulty: 2 one-star, 4 two-star, 8 three-star, 1 four-star and 1 five-star challenge, none at 6 stars. By category, Broken Access Control (4) and Injection (3) lead, then Improper Input Validation (2), with one solve each in seven other categories. Two solves appear in no other valid run of the dataset: Reset Jim's Password and Retrieve Blueprint.

Timeline of the 16 challenges credited to R01 in minutes since Launch: 13 solves within the first 20.4 minutes, three more at 41.8, 42.9 and 52.8 minutes, nothing afterwards until Stop at 120.4; Retrieve Blueprint, 5 stars, highlighted at 15.1 minutes; below, the 7 challenges already solved at Launch and not credited.
Figure 1 · When each credited challenge was solved, and the seven challenges that were already solved when the run started. The last 67.6 minutes of the session produced no new solve.Source: datasets/challenge_results.csv (R01: solve_offset_s, presolved_at_launch); ambient Exposed Metrics, pre-solved at every Launch, omitted.

The non-reset target

When the operator pressed Launch, Juice Shop already showed these challenges as solved: Confidential Document (1 star), Error Handling (1), Score Board (1), Login Admin (2), Password Strength (2), User Credentials (4) and Email Leak (5), plus the ambient Exposed Metrics flag that every run starts with. The platform correctly refused to credit them. Together they weigh 16 points.

Several of them are among the most frequently solved challenges of the study (Error Handling solved in 14 of the 15 valid runs where it was creditable, Login Admin in 12 of 15), so a fresh target would likely have offered R01 some easy points. We do not add them: whether R01 would have solved them, and when, is unknown, and adjusting the score would be inventing a result.

Cost, tokens and time

MeasureValue
Successful LLM calls244
Prompt tokens36,519,632
of which cache reads35,635,401 (97.6%)
of which cache writes883,983 (2.4%)
of which uncached input248
Completion tokens229,194
Mean prompt / completion tokens per call149,671 / 939
Cost (LiteLLM pricing)USD 17.44
Cost per solved challenge / per pointUSD 1.09 / USD 0.41
Cost per hour of wall clockUSD 8.70

These figures are summed from LiteLLM's spend log over the exact run window [3]. The platform's own stored values are slightly lower (USD 17.37, 36,443,691 prompt and 225,920 completion tokens) because it writes metrics only at each live poll, so the last calls before Stop were missed; the gap is 0.42%. The attribution assumes no other LLM use in that window, which is plausible (one active run at a time) but not provable. Cost is in list prices as known to LiteLLM, not an invoice.

The profile is that of a long-context agent: on average each call resent about 150,000 tokens of context and produced under a thousand. Prompt caching is what keeps such a loop affordable. The time profile matters as much: 13 of the 16 solves came in the first 20.4 minutes, and the session then ran for 67.6 more minutes after its last solve. A cost per solved challenge computed on the whole session therefore depends on when the operator pressed Stop.

Comparison with the other configurations

R01 is the highest single run of the dataset, but only just. R17 (C12, kimi-k3, tool not recorded) also solved 16 challenges, for 42 points, in an 80.0-minute active window on a fresh target; R19 (C14, gemini-3.1-pro-preview, tool not recorded) reached 31 points in 29.0 minutes. A one-point difference between two single runs, with different time budgets and target states, is not a ranking, and we do not read it as one.

The two top runs share 8 of their solved challenges. R01 alone solved Outdated Allowlist, Login Jim, Reset Jim's Password, Retrieve Blueprint, Deprecated Interface, XXE Data Access, Security Policy and Login Bender; R17 alone solved Christmas Special, Deluxe Fraud, Payback Time and Upload Type, plus four challenges that R01 could not earn because they were pre-solved (Confidential Document, Error Handling, Login Admin, User Credentials).

Above all, a result describes the pair. The same claude-sonnet-4-6 inside another agent, or Darkmoon with another model, could score differently; and because the tools of C02 to C16 are not recorded, the dataset cannot separate the model's contribution from Darkmoon's. Cost cannot be compared at all, since C01 is the only metered configuration. For a cross-check of how Darkmoon behaves on Juice Shop outside this platform, see Darkmoon's Juice Shop results over six campaigns, and for how we grade findings, why we grade on proof.

Limits of this result

  • Single run. No variance estimate is possible for C01; the two-run configurations of the study show low overlap between runs (Jaccard 0 to 0.6).
  • Operator stop. The run ended when the operator pressed Stop, not on a fixed budget.
  • Non-reset target. Seven relevant challenges (16 points) could not be credited.
  • Selection. Earlier Darkmoon configurations (“Darkmoon Community” and “Darkmoon” with claude-sonnet-4-6) were deleted from the platform before the backups and their runs are not recoverable; R01 is the surviving one, so it may not be representative.
  • Construct. Points are Juice Shop's author-assigned difficulty; there is no false-positive, report-quality or proof-of-exploitation axis, and the target is a training application.
  • Unrecorded settings. Darkmoon's configuration, prompts and the hardware were not stored; the Juice Shop digest is unknown.
  • Not independent. Built and run by the Darkmoon team.

Reproduce and check

The exact results folder for this configuration is results/configs/C01.md in the Darkmoon-Benchmarks study llm-pentest-juice-shop-2026 (scope: LLM pentest benchmarks on OWASP Juice Shop). The per-run row is in datasets/results.csv, the comparison with every other configuration in results/global-comparison.md, and what can and cannot be reproduced is listed in reproducibility/README.md. To run the same tool against your own lab, start from the open-source repository: github.com/ASCIT31/Dark-Moon (commit 130f6de). For running it on a local model instead of a cloud API, see running Darkmoon fully local.

References

  1. Darkmoon team. Which LLM is best for pentesting? A reproducible benchmark on OWASP Juice Shop (the global study). dark-moon.org/blog/llm-pentesting-benchmark/
  2. ASCIT31/Dark-Moon, commit 130f6de (merge of pull request #26). github.com/ASCIT31/Dark-Moon/commit/130f6de672de1cde3bbc0d3fb34988bcd3a64617
  3. LiteLLM documentation. Spend tracking (LiteLLM_SpendLogs). docs.litellm.ai/docs/proxy/cost_tracking
  4. OWASP Foundation. OWASP Juice Shop project page. owasp.org/www-project-juice-shop/
  5. Kimminich, B. Pwning OWASP Juice Shop, companion guide: Challenges (difficulty rating). pwning.owasp-juice.shop/companion-guide/latest/part1/challenges.html
  6. Darkmoon team. Configuration C01 results page in Darkmoon-Benchmarks. github.com/ASCIT31/Darkmoon-Benchmarks/blob/main/studies/llm-pentest-juice-shop-2026/results/configs/C01.md

Next
Run it against your own lab

Darkmoon is open source (GPL-3.0) and self hosted. Clone it, point it at a target you own, and read every line.