Skip to content

Commit 09024d1

Browse files
authored
Merge pull request #2986 from blacklanternsecurity/preset-naming-standardization
Preset naming standardization / tag cleanup
2 parents 9e28b27 + 3650dcc commit 09024d1

219 files changed

Lines changed: 1933 additions & 1788 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ from bbot.modules.base import BaseModule
191191
class my_module(BaseModule):
192192
watched_events = ["DNS_NAME"]
193193
produced_events = ["EMAIL_ADDRESS"]
194-
flags = ["passive", "safe", "email-enum"]
194+
flags = ["passive", "email-enum"]
195195
meta = {
196196
"description": "Query example.com for email addresses",
197197
"created_date": "2025-01-01",
@@ -275,21 +275,23 @@ produced_events = ["OPEN_TCP_PORT"]
275275
```
276276

277277
##### `flags` (list)
278-
Tags that describe the module's behavior. Must include at least one safety flag (`safe` or `aggressive`) and one activity flag (`passive` or `active`).
278+
Tags that describe the module's behavior. Must include at least one activity flag (`passive` or `active`). Must also include `safe`, `loud`, or `invasive` (or a combination of `loud` and `invasive`).
279279

280280
Common flags:
281281
- `passive` / `active` - whether the module touches the target directly
282-
- `safe` / `aggressive` - risk level
282+
- `safe` - non-intrusive and non-destructive
283+
- `loud` - generates a large amount of network traffic
284+
- `invasive` - intrusive or potentially destructive
283285
- `subdomain-enum` - participates in subdomain enumeration
284-
- `web-basic` - basic web scanning
286+
- `web` - basic web scanning
285287
- `email-enum` - email discovery
286288

287289
```python
288290
# crt.py - queries a third-party API, never touches the target
289-
flags = ["subdomain-enum", "passive", "safe"]
291+
flags = ["subdomain-enum", "passive"]
290292

291293
# sslcert.py - connects directly to target ports
292-
flags = ["affiliates", "subdomain-enum", "email-enum", "active", "safe", "web-basic"]
294+
flags = ["affiliates", "subdomain-enum", "email-enum", "active", "web"]
293295
```
294296

295297
##### `meta` (dict)
@@ -797,7 +799,7 @@ from bbot.modules.templates.subdomain_enum import subdomain_enum
797799

798800

799801
class crt(subdomain_enum):
800-
flags = ["subdomain-enum", "passive", "safe"]
802+
flags = ["subdomain-enum", "passive"]
801803
watched_events = ["DNS_NAME"]
802804
produced_events = ["DNS_NAME"]
803805
meta = {

README.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -144,16 +144,16 @@ output_modules:
144144

145145
```bash
146146
# run a light web scan against www.evilcorp.com
147-
bbot -t www.evilcorp.com -p web-basic
147+
bbot -t www.evilcorp.com -p web
148148

149149
# run a heavy web scan against www.evilcorp.com
150-
bbot -t www.evilcorp.com -p web-thorough
150+
bbot -t www.evilcorp.com -p web-heavy
151151
```
152152

153-
<!-- BBOT WEB-BASIC PRESET EXPANDABLE -->
153+
<!-- BBOT WEB PRESET EXPANDABLE -->
154154

155155
<details>
156-
<summary><b><code>web-basic.yml</code></b></summary>
156+
<summary><b><code>web.yml</code></b></summary>
157157

158158
```yaml
159159
description: Quick web scan
@@ -162,43 +162,43 @@ include:
162162
- iis-shortnames
163163

164164
flags:
165-
- web-basic
165+
- web
166166

167167
```
168168

169169
</details>
170170

171-
<!-- END BBOT WEB-BASIC PRESET EXPANDABLE -->
171+
<!-- END BBOT WEB PRESET EXPANDABLE -->
172172

173-
<!-- BBOT WEB-THOROUGH PRESET EXPANDABLE -->
173+
<!-- BBOT WEB-HEAVY PRESET EXPANDABLE -->
174174

175175
<details>
176-
<summary><b><code>web-thorough.yml</code></b></summary>
176+
<summary><b><code>web-heavy.yml</code></b></summary>
177177

178178
```yaml
179179
description: Aggressive web scan
180180

181181
include:
182-
# include the web-basic preset
183-
- web-basic
182+
# include the web preset
183+
- web
184184

185185
flags:
186-
- web-thorough
186+
- web-heavy
187187

188188
```
189189

190190
</details>
191191

192-
<!-- END BBOT WEB-THOROUGH PRESET EXPANDABLE -->
192+
<!-- END BBOT WEB-HEAVY PRESET EXPANDABLE -->
193193

194194
### 5) Everything Everywhere All at Once
195195

196196
```bash
197197
# everything everywhere all at once
198-
bbot -t evilcorp.com -p kitchen-sink --allow-deadly
198+
bbot -t evilcorp.com -p kitchen-sink
199199

200200
# roughly equivalent to:
201-
bbot -t evilcorp.com -p subdomain-enum cloud-enum code-enum email-enum spider web-basic paramminer dirbust-light web-screenshots --allow-deadly
201+
bbot -t evilcorp.com -p subdomain-enum cloud-enum code-enum email-enum spider web paramminer dirbust-light web-screenshots
202202
```
203203

204204
<!-- BBOT KITCHEN-SINK PRESET EXPANDABLE -->
@@ -215,7 +215,7 @@ include:
215215
- code-enum
216216
- email-enum
217217
- spider
218-
- web-basic
218+
- web
219219
- paramminer
220220
- dirbust-light
221221
- web-screenshots

bbot/cli.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -168,16 +168,6 @@ async def _main():
168168
sys.exit(0)
169169
return
170170

171-
# deadly modules (no scan required yet)
172-
deadly_modules = [
173-
m for m in baked_preset.scan_modules if "deadly" in baked_preset.preloaded_module(m).get("flags", [])
174-
]
175-
if deadly_modules and not options.allow_deadly:
176-
log.hugewarning(f"You enabled the following deadly modules: {','.join(deadly_modules)}")
177-
log.hugewarning("Deadly modules are highly intrusive")
178-
log.hugewarning("Please specify --allow-deadly to continue")
179-
return False
180-
181171
try:
182172
scan = Scanner(preset=baked_preset)
183173
except (PresetAbortError, ValidationError) as e:
@@ -241,6 +231,24 @@ async def _main():
241231
f'YOUR TARGET CONTAINS A CLOUD DOMAIN: "{event.host}". You\'re in for a wild ride!'
242232
)
243233

234+
# warn about loud/invasive modules
235+
loud_modules = []
236+
invasive_modules = []
237+
for m in scan.preset.scan_modules:
238+
flags = scan.preset.preloaded_module(m).get("flags", [])
239+
if "loud" in flags:
240+
loud_modules.append(m)
241+
if "invasive" in flags:
242+
invasive_modules.append(m)
243+
if loud_modules:
244+
log.hugewarning(
245+
f"LOUD modules enabled: {','.join(loud_modules)}. These generate a lot of traffic. To exclude, use -ef loud"
246+
)
247+
if invasive_modules:
248+
log.hugewarning(
249+
f"INVASIVE modules enabled: {','.join(invasive_modules)}. These may be intrusive or destructive. To exclude, use -ef invasive"
250+
)
251+
244252
if not options.yes:
245253
log.hugesuccess(f"Scan ready. Press enter to execute {scan.name}")
246254
input()

0 commit comments

Comments
 (0)