How coercion works
Various Windows services expose RPC methods that, when called, cause the server to reach back out and authenticate — typically over SMB — to a caller-supplied UNC path. Thecoerce_plus NetExec module bundles multiple such techniques into a single sweep:
- PetitPotam — Abuses the EFSRPC interface (
MS-EFSR) to trigger outbound authentication. - PrintSpooler — Uses the Windows Print Spooler RPC (
MS-RPRN)RpcRemoteFindFirstPrinterChangeNotificationcall. - DFSCoerce — Abuses the Distributed File System Replication (
MS-DFSNM)NetrDfsAddStandaloneRootcall. - Additional methods bundled in the
coerce_plusmodule are attempted in the same sweep.
ALWAYS=true set, the module continues trying all remaining methods even after one succeeds — ensuring every supported coercion path is exercised and maximising the chance of catching an authentication event.
Request parameters
The UI submits toPOST /api/coerce/run:
| Field | Required | Description |
|---|---|---|
target | Yes | IP or hostname of the target host to coerce. Supports a single IP, CIDR, or newline/space-separated list. |
listener | Recommended | Your machine’s IP address. The target will authenticate to this address. Auto-filled from the Network Info bar. |
username | No | Domain username for authenticated coercion. Leave empty for unauthenticated null session. |
password | No | Password for the supplied username. |
domain | No | Domain name. Auto-populated from the Network Info bar if not provided. |
always | No | When true, passes ALWAYS=true to the module — all methods are attempted regardless of earlier successes. Enabled by default in the UI. |
method | No | Restrict to a single coercion method by name. Leave empty to run all available methods. |
Credentials are optional. An unauthenticated null session (
-u '' -p '') is used when no username is supplied, which is sufficient for PetitPotam on many unpatched systems.The ALWAYS=true flag
WithoutALWAYS=true, the coerce_plus module stops after it receives a successful authentication response — meaning only the first working coercion method fires. With ALWAYS=true, every method in the list is executed in sequence regardless of earlier results.
This matters in practice because:
- Different methods succeed against different patch levels.
- You may want hashes from multiple coercion paths for comparison.
- Listener capture may miss the first event; later methods provide a second chance.
ALWAYS=true by default.
Multi-target support
Paste multiple IP addresses (newline- or space-separated) into the target field to coerce a range of hosts in a single run. Alternatively, populate your scope in DATA → Scope and use the From Database option to load targets automatically.Running coerce
Start Responder
Go to LAYER2 → Responder and start Responder on the interface facing the target network (e.g.
eth0 or tun0). Responder will capture any incoming NTLMv2 authentication triggered by the coercion.Set the target
Enter the DC IP or any target host you want to coerce. For a domain controller, use its IP directly. You can enter multiple IPs separated by newlines.
Verify listener IP
The listener field is auto-populated from the Network Info bar. Confirm it matches the interface Responder is listening on.
Configure methods
All coercion methods are checked by default. Leave the Method field empty to run all of them.
ALWAYS=true is enabled by default.Enter credentials (optional)
Supply domain credentials if the target requires authentication. For null session coercion, leave the credential fields empty.
Command built by the backend
For an authenticated run with all methods andALWAYS=true:
shlex.quote on all variable fields.
Live cancellation
Click Kill while coerce is running to abort the operation. The UI aborts the fetch loop and callsPOST /api/scans/kill with the scan_id. The backend runs pkill -f coerce_plus and marks the scan record as killed in the database.
If the underlying
netexec process continues after the kill request, check DATA → Scan History for the scan status. Inspect running processes manually if needed.Output file
Results are written to a timestamped file:Workflow: coerce a DC for hash capture
Start Responder on eth0 or tun0
Ensure Responder is listening on the same interface your listener IP belongs to.
Set target to DC IP, listener to your IP
The DC will authenticate back to your machine when coerced.
Check Responder output for the machine hash
Responder captures the incoming NTLMv2 hash from the DC machine account (e.g.
DC01$).