interactsh
Async client for polling out-of-band interaction servers. Generate unique URLs, inject them into payloads, and correlate DNS/HTTP interactions back to the original probe. Used for detecting blind XSS, SSRF, SQL injection, and other vulnerabilities where the target makes outbound requests.
use ;
async
Why this exists
Blind vulnerabilities require out-of-band detection. You inject a URL into a payload. If the target is vulnerable, it makes a request back to that URL. Most tools either lack OOB detection entirely or embed hardcoded interactsh logic that cannot be reused.
This crate provides an async client that handles URL generation with cryptographic nonces, correlation ID management, and interaction polling. It works with public interactsh servers or self-hosted instances.
URL generation
Each generated URL contains:
- A correlation ID (configurable length, default 14 chars)
- A unique nonce (configurable length, default 16 chars)
- The server hostname
The combination ensures global uniqueness while letting you correlate interactions back to specific probes.
let url = client.generate_url?;
// URL format: {correlation_id}{nonce}.{server}
// Example: abc123def456ghi.oast.pro
Context tracking
Attach metadata to URLs for later correlation:
let context = new
.with_attribute
.with_attribute;
let url = client.generate_url?;
When polling returns interactions, the context is restored from the nonce mapping.
Polling
The poll() method retrieves all interactions for your correlation ID:
let interactions = client.poll.await?;
for item in interactions
Unknown interactions (wrong correlation ID or forgotten nonces) are filtered out automatically.
Configuration
use ClientConfig;
let config = ClientConfig ;
Load from TOML:
let config = from_toml_str?;
Error handling
Errors are typed by stage:
ConfigProblem::Empty— Missing required fieldsConfigProblem::MustBeGreaterThanZero— Invalid length settingsTransportStage::Send— Network failureTransportStage::Timeout— Request timeoutTransportStage::ReadBody— Response body read failure
Self-hosted servers
Point at your own interactsh instance:
let config = ClientConfig ;
Contributing
Pull requests are welcome. There is no such thing as a perfect crate. If you find a bug, a better API, or just a rough edge, open a PR. We review quickly.
License
MIT. Copyright 2026 CORUM COLLECTIVE LLC.