attackstr
Grammar-driven security payload generation for scanners, fuzzers, and taint-aware tooling.
attackstr loads TOML grammars, expands contexts and variables deterministically, applies built-in or custom encodings, and returns payloads with source metadata. It is designed for crates.io use, not just the wider Santh workspace.
Features
- TOML grammar loading from strings or directories
- Configurable include/exclude/runtime filtering
- Built-in encoding transforms plus custom encoders
- Marker injection for taint-tracking payloads
- Streaming iterator API with
iter_payloads - Serde support across payload/config/grammar types
- Mutation helpers for lightweight evasive variants
Installation
[]
= "0.1"
Quick Start
use ;
let mut db = with_config;
db.load_toml?;
let payloads = db.payloads;
assert_eq!;
assert!;
# Ok::
Grammar Format
Each grammar defines:
[grammar]metadata[[contexts]]for prefix/suffix breakout wrappers[[techniques]]for templates[[encodings]]for final transforms[[variables]]-style arrays for substitution sets
Example:
[]
= "sql-basic"
= "sql-injection"
= "Foundational SQLi payloads"
= ["php", "node"]
[[]]
= "single-quoted"
= "'"
= "-- "
[[]]
= "boolean-tautology"
= "{prefix} OR {tautology} {suffix}"
= 0.95
= "(?i)sql|syntax|mysql"
[[]]
= "1=1"
= "'a'='a'"
[[]]
= "raw"
= "identity"
[[]]
= "url"
= "url_encode"
Iterator APIs
Use cached category access when you want slices:
use PayloadDb;
let mut db = new;
db.load_toml?;
let payloads = db.payloads;
assert_eq!;
# Ok::
Use streaming iteration when you want to avoid materializing the whole category:
use PayloadDb;
let mut db = new;
db.load_toml?;
let streamed: = db.iter_payloads.map.collect;
assert_eq!;
# Ok::
For in-memory payload sets, StaticPayloads supports iter() and iter_category() as well.
TOML Config End To End
PayloadConfigFile can load runtime behavior and grammar directories from TOML:
use PayloadDb;
let temp = tempdir?;
let grammar_dir = temp.path.join;
create_dir?;
write?;
write?;
let = load_config_and_grammars?;
assert!;
assert_eq!;
# Ok::
Custom Encodings
use PayloadDb;
let mut db = new;
db.register_encoding;
db.load_toml?;
assert_eq!;
# Ok::
Examples
Run the bundled examples:
Development
cargo fmtcargo checkcargo test
Contribution workflow is documented in CONTRIBUTING.md.
License
MIT