@namch/agent-assistant 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -539
- package/agents/backend-engineer.md +0 -8
- package/agents/brainstormer.md +0 -6
- package/agents/business-analyst.md +0 -5
- package/agents/database-architect.md +0 -6
- package/agents/debugger.md +0 -6
- package/agents/designer.md +0 -5
- package/agents/devops-engineer.md +0 -7
- package/agents/docs-manager.md +0 -6
- package/agents/frontend-engineer.md +0 -7
- package/agents/game-engineer.md +0 -7
- package/agents/mobile-engineer.md +0 -7
- package/agents/performance-engineer.md +0 -7
- package/agents/planner.md +0 -6
- package/agents/project-manager.md +0 -6
- package/agents/researcher.md +0 -5
- package/agents/reviewer.md +0 -6
- package/agents/scouter.md +0 -6
- package/agents/security-engineer.md +0 -7
- package/agents/tech-lead.md +0 -7
- package/agents/tester.md +0 -5
- package/cli/README.md +19 -10
- package/documents/business/business-features.md +1 -1
- package/documents/business/business-prd.md +4 -4
- package/documents/knowledge-architecture.md +1 -1
- package/documents/knowledge-domain.md +1 -1
- package/documents/knowledge-overview.md +14 -29
- package/documents/knowledge-source-base.md +14 -14
- package/package.json +1 -1
- package/rules/QUICK-REFERENCE.md +4 -1
- package/rules/SKILL-DISCOVERY.md +37 -14
- package/skills/active-directory-attacks/SKILL.md +383 -0
- package/skills/active-directory-attacks/references/advanced-attacks.md +382 -0
- package/skills/agent-evaluation/SKILL.md +64 -0
- package/skills/agent-memory-mcp/SKILL.md +82 -0
- package/skills/agent-memory-systems/SKILL.md +67 -0
- package/skills/agent-tool-builder/SKILL.md +53 -0
- package/skills/ai-agents-architect/SKILL.md +90 -0
- package/skills/ai-product/SKILL.md +54 -0
- package/skills/ai-wrapper-product/SKILL.md +273 -0
- package/skills/api-documentation-generator/SKILL.md +484 -0
- package/skills/api-fuzzing-bug-bounty/SKILL.md +433 -0
- package/skills/api-security-best-practices/SKILL.md +907 -0
- package/skills/autonomous-agent-patterns/SKILL.md +761 -0
- package/skills/autonomous-agents/SKILL.md +68 -0
- package/skills/aws-penetration-testing/SKILL.md +405 -0
- package/skills/aws-penetration-testing/references/advanced-aws-pentesting.md +469 -0
- package/skills/azure-functions/SKILL.md +42 -0
- package/skills/backend-dev-guidelines/SKILL.md +342 -0
- package/skills/backend-dev-guidelines/resources/architecture-overview.md +451 -0
- package/skills/backend-dev-guidelines/resources/async-and-errors.md +307 -0
- package/skills/backend-dev-guidelines/resources/complete-examples.md +638 -0
- package/skills/backend-dev-guidelines/resources/configuration.md +275 -0
- package/skills/backend-dev-guidelines/resources/database-patterns.md +224 -0
- package/skills/backend-dev-guidelines/resources/middleware-guide.md +213 -0
- package/skills/backend-dev-guidelines/resources/routing-and-controllers.md +756 -0
- package/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +336 -0
- package/skills/backend-dev-guidelines/resources/services-and-repositories.md +789 -0
- package/skills/backend-dev-guidelines/resources/testing-guide.md +235 -0
- package/skills/backend-dev-guidelines/resources/validation-patterns.md +754 -0
- package/skills/broken-authentication/SKILL.md +476 -0
- package/skills/bullmq-specialist/SKILL.md +57 -0
- package/skills/bun-development/SKILL.md +691 -0
- package/skills/burp-suite-testing/SKILL.md +380 -0
- package/skills/cloud-penetration-testing/SKILL.md +501 -0
- package/skills/cloud-penetration-testing/references/advanced-cloud-scripts.md +318 -0
- package/skills/computer-use-agents/SKILL.md +315 -0
- package/skills/content-creator/SKILL.md +248 -0
- package/skills/content-creator/assets/content_calendar_template.md +99 -0
- package/skills/content-creator/references/brand_guidelines.md +199 -0
- package/skills/content-creator/references/content_frameworks.md +534 -0
- package/skills/content-creator/references/social_media_optimization.md +317 -0
- package/skills/content-creator/scripts/brand_voice_analyzer.py +185 -0
- package/skills/content-creator/scripts/seo_optimizer.py +419 -0
- package/skills/context-window-management/SKILL.md +53 -0
- package/skills/conversation-memory/SKILL.md +61 -0
- package/skills/copy-editing/SKILL.md +439 -0
- package/skills/copywriting/SKILL.md +225 -0
- package/skills/crewai/SKILL.md +243 -0
- package/skills/discord-bot-architect/SKILL.md +277 -0
- package/skills/dispatching-parallel-agents/SKILL.md +180 -0
- package/skills/email-sequence/SKILL.md +925 -0
- package/skills/email-systems/SKILL.md +54 -0
- package/skills/ethical-hacking-methodology/SKILL.md +466 -0
- package/skills/executing-plans/SKILL.md +76 -0
- package/skills/file-path-traversal/SKILL.md +486 -0
- package/skills/finishing-a-development-branch/SKILL.md +200 -0
- package/skills/frontend-dev-guidelines/SKILL.md +359 -0
- package/skills/frontend-dev-guidelines/resources/common-patterns.md +331 -0
- package/skills/frontend-dev-guidelines/resources/complete-examples.md +872 -0
- package/skills/frontend-dev-guidelines/resources/component-patterns.md +502 -0
- package/skills/frontend-dev-guidelines/resources/data-fetching.md +767 -0
- package/skills/frontend-dev-guidelines/resources/file-organization.md +502 -0
- package/skills/frontend-dev-guidelines/resources/loading-and-error-states.md +501 -0
- package/skills/frontend-dev-guidelines/resources/performance.md +406 -0
- package/skills/frontend-dev-guidelines/resources/routing-guide.md +364 -0
- package/skills/frontend-dev-guidelines/resources/styling-guide.md +428 -0
- package/skills/frontend-dev-guidelines/resources/typescript-standards.md +418 -0
- package/skills/gcp-cloud-run/SKILL.md +288 -0
- package/skills/git-pushing/SKILL.md +33 -0
- package/skills/git-pushing/scripts/smart_commit.sh +19 -0
- package/skills/github-workflow-automation/SKILL.md +846 -0
- package/skills/html-injection-testing/SKILL.md +498 -0
- package/skills/idor-testing/SKILL.md +442 -0
- package/skills/inngest/SKILL.md +55 -0
- package/skills/javascript-mastery/SKILL.md +645 -0
- package/skills/kaizen/SKILL.md +730 -0
- package/skills/langfuse/SKILL.md +238 -0
- package/skills/langgraph/SKILL.md +287 -0
- package/skills/linux-privilege-escalation/SKILL.md +504 -0
- package/skills/llm-app-patterns/SKILL.md +760 -0
- package/skills/metasploit-framework/SKILL.md +478 -0
- package/skills/multi-agent-brainstorming/SKILL.md +256 -0
- package/skills/neon-postgres/SKILL.md +56 -0
- package/skills/nextjs-supabase-auth/SKILL.md +56 -0
- package/skills/nosql-expert/SKILL.md +111 -0
- package/skills/pentest-checklist/SKILL.md +334 -0
- package/skills/pentest-commands/SKILL.md +438 -0
- package/skills/plaid-fintech/SKILL.md +50 -0
- package/skills/planning-with-files/SKILL.md +211 -0
- package/skills/planning-with-files/examples.md +202 -0
- package/skills/planning-with-files/reference.md +218 -0
- package/skills/planning-with-files/scripts/check-complete.sh +44 -0
- package/skills/planning-with-files/scripts/init-session.sh +120 -0
- package/skills/planning-with-files/templates/findings.md +95 -0
- package/skills/planning-with-files/templates/progress.md +114 -0
- package/skills/planning-with-files/templates/task_plan.md +132 -0
- package/skills/privilege-escalation-methods/SKILL.md +333 -0
- package/skills/production-code-audit/SKILL.md +540 -0
- package/skills/prompt-caching/SKILL.md +61 -0
- package/skills/prompt-engineering/SKILL.md +171 -0
- package/skills/prompt-library/SKILL.md +322 -0
- package/skills/rag-engineer/SKILL.md +90 -0
- package/skills/rag-implementation/SKILL.md +63 -0
- package/skills/react-ui-patterns/SKILL.md +289 -0
- package/skills/red-team-tools/SKILL.md +310 -0
- package/skills/scanning-tools/SKILL.md +589 -0
- package/skills/shodan-reconnaissance/SKILL.md +503 -0
- package/skills/slack-bot-builder/SKILL.md +264 -0
- package/skills/smtp-penetration-testing/SKILL.md +500 -0
- package/skills/social-content/SKILL.md +807 -0
- package/skills/software-architecture/SKILL.md +75 -0
- package/skills/sql-injection-testing/SKILL.md +448 -0
- package/skills/sqlmap-database-pentesting/SKILL.md +400 -0
- package/skills/ssh-penetration-testing/SKILL.md +488 -0
- package/skills/stripe-integration/SKILL.md +69 -0
- package/skills/subagent-driven-development/SKILL.md +240 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +20 -0
- package/skills/subagent-driven-development/implementer-prompt.md +78 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tavily-web/SKILL.md +36 -0
- package/skills/telegram-bot-builder/SKILL.md +254 -0
- package/skills/test-driven-development/SKILL.md +371 -0
- package/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/skills/test-fixing/SKILL.md +119 -0
- package/skills/top-web-vulnerabilities/SKILL.md +543 -0
- package/skills/trigger-dev/SKILL.md +67 -0
- package/skills/twilio-communications/SKILL.md +295 -0
- package/skills/upstash-qstash/SKILL.md +68 -0
- package/skills/verification-before-completion/SKILL.md +139 -0
- package/skills/voice-agents/SKILL.md +68 -0
- package/skills/voice-ai-development/SKILL.md +302 -0
- package/skills/windows-privilege-escalation/SKILL.md +496 -0
- package/skills/wireshark-analysis/SKILL.md +497 -0
- package/skills/wordpress-penetration-testing/SKILL.md +485 -0
- package/skills/workflow-automation/SKILL.md +68 -0
- package/skills/xss-html-injection/SKILL.md +499 -0
- package/skills/zapier-make-patterns/SKILL.md +67 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: react-ui-patterns
|
|
3
|
+
description: Modern React UI patterns for loading states, error handling, and data fetching. Use when building UI components, handling async data, or managing UI states.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# React UI Patterns
|
|
7
|
+
|
|
8
|
+
## Core Principles
|
|
9
|
+
|
|
10
|
+
1. **Never show stale UI** - Loading spinners only when actually loading
|
|
11
|
+
2. **Always surface errors** - Users must know when something fails
|
|
12
|
+
3. **Optimistic updates** - Make the UI feel instant
|
|
13
|
+
4. **Progressive disclosure** - Show content as it becomes available
|
|
14
|
+
5. **Graceful degradation** - Partial data is better than no data
|
|
15
|
+
|
|
16
|
+
## Loading State Patterns
|
|
17
|
+
|
|
18
|
+
### The Golden Rule
|
|
19
|
+
|
|
20
|
+
**Show loading indicator ONLY when there's no data to display.**
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// CORRECT - Only show loading when no data exists
|
|
24
|
+
const { data, loading, error } = useGetItemsQuery();
|
|
25
|
+
|
|
26
|
+
if (error) return <ErrorState error={error} onRetry={refetch} />;
|
|
27
|
+
if (loading && !data) return <LoadingState />;
|
|
28
|
+
if (!data?.items.length) return <EmptyState />;
|
|
29
|
+
|
|
30
|
+
return <ItemList items={data.items} />;
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
// WRONG - Shows spinner even when we have cached data
|
|
35
|
+
if (loading) return <LoadingState />; // Flashes on refetch!
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Loading State Decision Tree
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
Is there an error?
|
|
42
|
+
→ Yes: Show error state with retry option
|
|
43
|
+
→ No: Continue
|
|
44
|
+
|
|
45
|
+
Is it loading AND we have no data?
|
|
46
|
+
→ Yes: Show loading indicator (spinner/skeleton)
|
|
47
|
+
→ No: Continue
|
|
48
|
+
|
|
49
|
+
Do we have data?
|
|
50
|
+
→ Yes, with items: Show the data
|
|
51
|
+
→ Yes, but empty: Show empty state
|
|
52
|
+
→ No: Show loading (fallback)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Skeleton vs Spinner
|
|
56
|
+
|
|
57
|
+
| Use Skeleton When | Use Spinner When |
|
|
58
|
+
|-------------------|------------------|
|
|
59
|
+
| Known content shape | Unknown content shape |
|
|
60
|
+
| List/card layouts | Modal actions |
|
|
61
|
+
| Initial page load | Button submissions |
|
|
62
|
+
| Content placeholders | Inline operations |
|
|
63
|
+
|
|
64
|
+
## Error Handling Patterns
|
|
65
|
+
|
|
66
|
+
### The Error Handling Hierarchy
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
1. Inline error (field-level) → Form validation errors
|
|
70
|
+
2. Toast notification → Recoverable errors, user can retry
|
|
71
|
+
3. Error banner → Page-level errors, data still partially usable
|
|
72
|
+
4. Full error screen → Unrecoverable, needs user action
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Always Show Errors
|
|
76
|
+
|
|
77
|
+
**CRITICAL: Never swallow errors silently.**
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
// CORRECT - Error always surfaced to user
|
|
81
|
+
const [createItem, { loading }] = useCreateItemMutation({
|
|
82
|
+
onCompleted: () => {
|
|
83
|
+
toast.success({ title: 'Item created' });
|
|
84
|
+
},
|
|
85
|
+
onError: (error) => {
|
|
86
|
+
console.error('createItem failed:', error);
|
|
87
|
+
toast.error({ title: 'Failed to create item' });
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// WRONG - Error silently caught, user has no idea
|
|
92
|
+
const [createItem] = useCreateItemMutation({
|
|
93
|
+
onError: (error) => {
|
|
94
|
+
console.error(error); // User sees nothing!
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Error State Component Pattern
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
interface ErrorStateProps {
|
|
103
|
+
error: Error;
|
|
104
|
+
onRetry?: () => void;
|
|
105
|
+
title?: string;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const ErrorState = ({ error, onRetry, title }: ErrorStateProps) => (
|
|
109
|
+
<div className="error-state">
|
|
110
|
+
<Icon name="exclamation-circle" />
|
|
111
|
+
<h3>{title ?? 'Something went wrong'}</h3>
|
|
112
|
+
<p>{error.message}</p>
|
|
113
|
+
{onRetry && (
|
|
114
|
+
<Button onClick={onRetry}>Try Again</Button>
|
|
115
|
+
)}
|
|
116
|
+
</div>
|
|
117
|
+
);
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Button State Patterns
|
|
121
|
+
|
|
122
|
+
### Button Loading State
|
|
123
|
+
|
|
124
|
+
```tsx
|
|
125
|
+
<Button
|
|
126
|
+
onClick={handleSubmit}
|
|
127
|
+
isLoading={isSubmitting}
|
|
128
|
+
disabled={!isValid || isSubmitting}
|
|
129
|
+
>
|
|
130
|
+
Submit
|
|
131
|
+
</Button>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Disable During Operations
|
|
135
|
+
|
|
136
|
+
**CRITICAL: Always disable triggers during async operations.**
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
// CORRECT - Button disabled while loading
|
|
140
|
+
<Button
|
|
141
|
+
disabled={isSubmitting}
|
|
142
|
+
isLoading={isSubmitting}
|
|
143
|
+
onClick={handleSubmit}
|
|
144
|
+
>
|
|
145
|
+
Submit
|
|
146
|
+
</Button>
|
|
147
|
+
|
|
148
|
+
// WRONG - User can tap multiple times
|
|
149
|
+
<Button onClick={handleSubmit}>
|
|
150
|
+
{isSubmitting ? 'Submitting...' : 'Submit'}
|
|
151
|
+
</Button>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Empty States
|
|
155
|
+
|
|
156
|
+
### Empty State Requirements
|
|
157
|
+
|
|
158
|
+
Every list/collection MUST have an empty state:
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
// WRONG - No empty state
|
|
162
|
+
return <FlatList data={items} />;
|
|
163
|
+
|
|
164
|
+
// CORRECT - Explicit empty state
|
|
165
|
+
return (
|
|
166
|
+
<FlatList
|
|
167
|
+
data={items}
|
|
168
|
+
ListEmptyComponent={<EmptyState />}
|
|
169
|
+
/>
|
|
170
|
+
);
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Contextual Empty States
|
|
174
|
+
|
|
175
|
+
```tsx
|
|
176
|
+
// Search with no results
|
|
177
|
+
<EmptyState
|
|
178
|
+
icon="search"
|
|
179
|
+
title="No results found"
|
|
180
|
+
description="Try different search terms"
|
|
181
|
+
/>
|
|
182
|
+
|
|
183
|
+
// List with no items yet
|
|
184
|
+
<EmptyState
|
|
185
|
+
icon="plus-circle"
|
|
186
|
+
title="No items yet"
|
|
187
|
+
description="Create your first item"
|
|
188
|
+
action={{ label: 'Create Item', onClick: handleCreate }}
|
|
189
|
+
/>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Form Submission Pattern
|
|
193
|
+
|
|
194
|
+
```tsx
|
|
195
|
+
const MyForm = () => {
|
|
196
|
+
const [submit, { loading }] = useSubmitMutation({
|
|
197
|
+
onCompleted: handleSuccess,
|
|
198
|
+
onError: handleError,
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
const handleSubmit = async () => {
|
|
202
|
+
if (!isValid) {
|
|
203
|
+
toast.error({ title: 'Please fix errors' });
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
await submit({ variables: { input: values } });
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
return (
|
|
210
|
+
<form>
|
|
211
|
+
<Input
|
|
212
|
+
value={values.name}
|
|
213
|
+
onChange={handleChange('name')}
|
|
214
|
+
error={touched.name ? errors.name : undefined}
|
|
215
|
+
/>
|
|
216
|
+
<Button
|
|
217
|
+
type="submit"
|
|
218
|
+
onClick={handleSubmit}
|
|
219
|
+
disabled={!isValid || loading}
|
|
220
|
+
isLoading={loading}
|
|
221
|
+
>
|
|
222
|
+
Submit
|
|
223
|
+
</Button>
|
|
224
|
+
</form>
|
|
225
|
+
);
|
|
226
|
+
};
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Anti-Patterns
|
|
230
|
+
|
|
231
|
+
### Loading States
|
|
232
|
+
|
|
233
|
+
```typescript
|
|
234
|
+
// WRONG - Spinner when data exists (causes flash)
|
|
235
|
+
if (loading) return <Spinner />;
|
|
236
|
+
|
|
237
|
+
// CORRECT - Only show loading without data
|
|
238
|
+
if (loading && !data) return <Spinner />;
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Error Handling
|
|
242
|
+
|
|
243
|
+
```typescript
|
|
244
|
+
// WRONG - Error swallowed
|
|
245
|
+
try {
|
|
246
|
+
await mutation();
|
|
247
|
+
} catch (e) {
|
|
248
|
+
console.log(e); // User has no idea!
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// CORRECT - Error surfaced
|
|
252
|
+
onError: (error) => {
|
|
253
|
+
console.error('operation failed:', error);
|
|
254
|
+
toast.error({ title: 'Operation failed' });
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Button States
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
// WRONG - Button not disabled during submission
|
|
262
|
+
<Button onClick={submit}>Submit</Button>
|
|
263
|
+
|
|
264
|
+
// CORRECT - Disabled and shows loading
|
|
265
|
+
<Button onClick={submit} disabled={loading} isLoading={loading}>
|
|
266
|
+
Submit
|
|
267
|
+
</Button>
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## Checklist
|
|
271
|
+
|
|
272
|
+
Before completing any UI component:
|
|
273
|
+
|
|
274
|
+
**UI States:**
|
|
275
|
+
- [ ] Error state handled and shown to user
|
|
276
|
+
- [ ] Loading state shown only when no data exists
|
|
277
|
+
- [ ] Empty state provided for collections
|
|
278
|
+
- [ ] Buttons disabled during async operations
|
|
279
|
+
- [ ] Buttons show loading indicator when appropriate
|
|
280
|
+
|
|
281
|
+
**Data & Mutations:**
|
|
282
|
+
- [ ] Mutations have onError handler
|
|
283
|
+
- [ ] All user actions have feedback (toast/visual)
|
|
284
|
+
|
|
285
|
+
## Integration with Other Skills
|
|
286
|
+
|
|
287
|
+
- **graphql-schema**: Use mutation patterns with proper error handling
|
|
288
|
+
- **testing-patterns**: Test all UI states (loading, error, empty, success)
|
|
289
|
+
- **formik-patterns**: Apply form submission patterns
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Red Team Tools and Methodology
|
|
3
|
+
description: This skill should be used when the user asks to "follow red team methodology", "perform bug bounty hunting", "automate reconnaissance", "hunt for XSS vulnerabilities", "enumerate subdomains", or needs security researcher techniques and tool configurations from top bug bounty hunters.
|
|
4
|
+
metadata:
|
|
5
|
+
author: zebbern
|
|
6
|
+
version: "1.1"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Red Team Tools and Methodology
|
|
10
|
+
|
|
11
|
+
## Purpose
|
|
12
|
+
|
|
13
|
+
Implement proven methodologies and tool workflows from top security researchers for effective reconnaissance, vulnerability discovery, and bug bounty hunting. Automate common tasks while maintaining thorough coverage of attack surfaces.
|
|
14
|
+
|
|
15
|
+
## Inputs/Prerequisites
|
|
16
|
+
|
|
17
|
+
- Target scope definition (domains, IP ranges, applications)
|
|
18
|
+
- Linux-based attack machine (Kali, Ubuntu)
|
|
19
|
+
- Bug bounty program rules and scope
|
|
20
|
+
- Tool dependencies installed (Go, Python, Ruby)
|
|
21
|
+
- API keys for various services (Shodan, Censys, etc.)
|
|
22
|
+
|
|
23
|
+
## Outputs/Deliverables
|
|
24
|
+
|
|
25
|
+
- Comprehensive subdomain enumeration
|
|
26
|
+
- Live host discovery and technology fingerprinting
|
|
27
|
+
- Identified vulnerabilities and attack vectors
|
|
28
|
+
- Automated recon pipeline outputs
|
|
29
|
+
- Documented findings for reporting
|
|
30
|
+
|
|
31
|
+
## Core Workflow
|
|
32
|
+
|
|
33
|
+
### 1. Project Tracking and Acquisitions
|
|
34
|
+
|
|
35
|
+
Set up reconnaissance tracking:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Create project structure
|
|
39
|
+
mkdir -p target/{recon,vulns,reports}
|
|
40
|
+
cd target
|
|
41
|
+
|
|
42
|
+
# Find acquisitions using Crunchbase
|
|
43
|
+
# Search manually for subsidiary companies
|
|
44
|
+
|
|
45
|
+
# Get ASN for targets
|
|
46
|
+
amass intel -org "Target Company" -src
|
|
47
|
+
|
|
48
|
+
# Alternative ASN lookup
|
|
49
|
+
curl -s "https://bgp.he.net/search?search=targetcompany&commit=Search"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 2. Subdomain Enumeration
|
|
53
|
+
|
|
54
|
+
Comprehensive subdomain discovery:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Create wildcards file
|
|
58
|
+
echo "target.com" > wildcards
|
|
59
|
+
|
|
60
|
+
# Run Amass passively
|
|
61
|
+
amass enum -passive -d target.com -src -o amass_passive.txt
|
|
62
|
+
|
|
63
|
+
# Run Amass actively
|
|
64
|
+
amass enum -active -d target.com -src -o amass_active.txt
|
|
65
|
+
|
|
66
|
+
# Use Subfinder
|
|
67
|
+
subfinder -d target.com -silent -o subfinder.txt
|
|
68
|
+
|
|
69
|
+
# Asset discovery
|
|
70
|
+
cat wildcards | assetfinder --subs-only | anew domains.txt
|
|
71
|
+
|
|
72
|
+
# Alternative subdomain tools
|
|
73
|
+
findomain -t target.com -o
|
|
74
|
+
|
|
75
|
+
# Generate permutations with dnsgen
|
|
76
|
+
cat domains.txt | dnsgen - | httprobe > permuted.txt
|
|
77
|
+
|
|
78
|
+
# Combine all sources
|
|
79
|
+
cat amass_*.txt subfinder.txt | sort -u > all_subs.txt
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. Live Host Discovery
|
|
83
|
+
|
|
84
|
+
Identify responding hosts:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# Check which hosts are live with httprobe
|
|
88
|
+
cat domains.txt | httprobe -c 80 --prefer-https | anew hosts.txt
|
|
89
|
+
|
|
90
|
+
# Use httpx for more details
|
|
91
|
+
cat domains.txt | httpx -title -tech-detect -status-code -o live_hosts.txt
|
|
92
|
+
|
|
93
|
+
# Alternative with massdns
|
|
94
|
+
massdns -r resolvers.txt -t A -o S domains.txt > resolved.txt
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 4. Technology Fingerprinting
|
|
98
|
+
|
|
99
|
+
Identify technologies for targeted attacks:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# Whatweb scanning
|
|
103
|
+
whatweb -i hosts.txt -a 3 -v > tech_stack.txt
|
|
104
|
+
|
|
105
|
+
# Nuclei technology detection
|
|
106
|
+
nuclei -l hosts.txt -t technologies/ -o tech_nuclei.txt
|
|
107
|
+
|
|
108
|
+
# Wappalyzer (if available)
|
|
109
|
+
# Browser extension for manual review
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 5. Content Discovery
|
|
113
|
+
|
|
114
|
+
Find hidden endpoints and files:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Directory bruteforce with ffuf
|
|
118
|
+
ffuf -ac -v -u https://target.com/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt
|
|
119
|
+
|
|
120
|
+
# Historical URLs from Wayback
|
|
121
|
+
waybackurls target.com | tee wayback.txt
|
|
122
|
+
|
|
123
|
+
# Find all URLs with gau
|
|
124
|
+
gau target.com | tee all_urls.txt
|
|
125
|
+
|
|
126
|
+
# Parameter discovery
|
|
127
|
+
cat all_urls.txt | grep "=" | sort -u > params.txt
|
|
128
|
+
|
|
129
|
+
# Generate custom wordlist from historical data
|
|
130
|
+
cat all_urls.txt | unfurl paths | sort -u > custom_wordlist.txt
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 6. Application Analysis (Jason Haddix Method)
|
|
134
|
+
|
|
135
|
+
**Heat Map Priority Areas:**
|
|
136
|
+
|
|
137
|
+
1. **File Uploads** - Test for injection, XXE, SSRF, shell upload
|
|
138
|
+
2. **Content Types** - Filter Burp for multipart forms
|
|
139
|
+
3. **APIs** - Look for hidden methods, lack of auth
|
|
140
|
+
4. **Profile Sections** - Stored XSS, custom fields
|
|
141
|
+
5. **Integrations** - SSRF through third parties
|
|
142
|
+
6. **Error Pages** - Exotic injection points
|
|
143
|
+
|
|
144
|
+
**Analysis Questions:**
|
|
145
|
+
- How does the app pass data? (Params, API, Hybrid)
|
|
146
|
+
- Where does the app talk about users? (UID, UUID endpoints)
|
|
147
|
+
- Does the site have multi-tenancy or user levels?
|
|
148
|
+
- Does it have a unique threat model?
|
|
149
|
+
- How does the site handle XSS/CSRF?
|
|
150
|
+
- Has the site had past writeups/exploits?
|
|
151
|
+
|
|
152
|
+
### 7. Automated XSS Hunting
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# ParamSpider for parameter extraction
|
|
156
|
+
python3 paramspider.py --domain target.com -o params.txt
|
|
157
|
+
|
|
158
|
+
# Filter with Gxss
|
|
159
|
+
cat params.txt | Gxss -p test
|
|
160
|
+
|
|
161
|
+
# Dalfox for XSS testing
|
|
162
|
+
cat params.txt | dalfox pipe --mining-dict params.txt -o xss_results.txt
|
|
163
|
+
|
|
164
|
+
# Alternative workflow
|
|
165
|
+
waybackurls target.com | grep "=" | qsreplace '"><script>alert(1)</script>' | while read url; do
|
|
166
|
+
curl -s "$url" | grep -q 'alert(1)' && echo "$url"
|
|
167
|
+
done > potential_xss.txt
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 8. Vulnerability Scanning
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# Nuclei comprehensive scan
|
|
174
|
+
nuclei -l hosts.txt -t ~/nuclei-templates/ -o nuclei_results.txt
|
|
175
|
+
|
|
176
|
+
# Check for common CVEs
|
|
177
|
+
nuclei -l hosts.txt -t cves/ -o cve_results.txt
|
|
178
|
+
|
|
179
|
+
# Web vulnerabilities
|
|
180
|
+
nuclei -l hosts.txt -t vulnerabilities/ -o vuln_results.txt
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### 9. API Enumeration
|
|
184
|
+
|
|
185
|
+
**Wordlists for API fuzzing:**
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
# Enumerate API endpoints
|
|
189
|
+
ffuf -u https://target.com/api/FUZZ -w /usr/share/seclists/Discovery/Web-Content/api/api-endpoints.txt
|
|
190
|
+
|
|
191
|
+
# Test API versions
|
|
192
|
+
ffuf -u https://target.com/api/v1/FUZZ -w api_wordlist.txt
|
|
193
|
+
ffuf -u https://target.com/api/v2/FUZZ -w api_wordlist.txt
|
|
194
|
+
|
|
195
|
+
# Check for hidden methods
|
|
196
|
+
for method in GET POST PUT DELETE PATCH; do
|
|
197
|
+
curl -X $method https://target.com/api/users -v
|
|
198
|
+
done
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 10. Automated Recon Script
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
#!/bin/bash
|
|
205
|
+
domain=$1
|
|
206
|
+
|
|
207
|
+
if [[ -z $domain ]]; then
|
|
208
|
+
echo "Usage: ./recon.sh <domain>"
|
|
209
|
+
exit 1
|
|
210
|
+
fi
|
|
211
|
+
|
|
212
|
+
mkdir -p "$domain"
|
|
213
|
+
|
|
214
|
+
# Subdomain enumeration
|
|
215
|
+
echo "[*] Enumerating subdomains..."
|
|
216
|
+
subfinder -d "$domain" -silent > "$domain/subs.txt"
|
|
217
|
+
|
|
218
|
+
# Live host discovery
|
|
219
|
+
echo "[*] Finding live hosts..."
|
|
220
|
+
cat "$domain/subs.txt" | httpx -title -tech-detect -status-code > "$domain/live.txt"
|
|
221
|
+
|
|
222
|
+
# URL collection
|
|
223
|
+
echo "[*] Collecting URLs..."
|
|
224
|
+
cat "$domain/live.txt" | waybackurls > "$domain/urls.txt"
|
|
225
|
+
|
|
226
|
+
# Nuclei scanning
|
|
227
|
+
echo "[*] Running Nuclei..."
|
|
228
|
+
nuclei -l "$domain/live.txt" -o "$domain/nuclei.txt"
|
|
229
|
+
|
|
230
|
+
echo "[+] Recon complete!"
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## Quick Reference
|
|
234
|
+
|
|
235
|
+
### Essential Tools
|
|
236
|
+
|
|
237
|
+
| Tool | Purpose |
|
|
238
|
+
|------|---------|
|
|
239
|
+
| Amass | Subdomain enumeration |
|
|
240
|
+
| Subfinder | Fast subdomain discovery |
|
|
241
|
+
| httpx/httprobe | Live host detection |
|
|
242
|
+
| ffuf | Content discovery |
|
|
243
|
+
| Nuclei | Vulnerability scanning |
|
|
244
|
+
| Burp Suite | Manual testing |
|
|
245
|
+
| Dalfox | XSS automation |
|
|
246
|
+
| waybackurls | Historical URL mining |
|
|
247
|
+
|
|
248
|
+
### Key API Endpoints to Check
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
/api/v1/users
|
|
252
|
+
/api/v1/admin
|
|
253
|
+
/api/v1/profile
|
|
254
|
+
/api/users/me
|
|
255
|
+
/api/config
|
|
256
|
+
/api/debug
|
|
257
|
+
/api/swagger
|
|
258
|
+
/api/graphql
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### XSS Filter Testing
|
|
262
|
+
|
|
263
|
+
```html
|
|
264
|
+
<!-- Test encoding handling -->
|
|
265
|
+
<h1><img><table>
|
|
266
|
+
<script>
|
|
267
|
+
%3Cscript%3E
|
|
268
|
+
%253Cscript%253E
|
|
269
|
+
%26lt;script%26gt;
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
## Constraints
|
|
273
|
+
|
|
274
|
+
- Respect program scope boundaries
|
|
275
|
+
- Avoid DoS or fuzzing on production without permission
|
|
276
|
+
- Rate limit requests to avoid blocking
|
|
277
|
+
- Some tools may generate false positives
|
|
278
|
+
- API keys required for full functionality of some tools
|
|
279
|
+
|
|
280
|
+
## Examples
|
|
281
|
+
|
|
282
|
+
### Example 1: Quick Subdomain Recon
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
subfinder -d target.com | httpx -title | tee results.txt
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Example 2: XSS Hunting Pipeline
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
waybackurls target.com | grep "=" | qsreplace "test" | httpx -silent | dalfox pipe
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Example 3: Comprehensive Scan
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
# Full recon chain
|
|
298
|
+
amass enum -d target.com | httpx | nuclei -t ~/nuclei-templates/
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
## Troubleshooting
|
|
302
|
+
|
|
303
|
+
| Issue | Solution |
|
|
304
|
+
|-------|----------|
|
|
305
|
+
| Rate limited | Use proxy rotation, reduce concurrency |
|
|
306
|
+
| Too many results | Focus on specific technology stacks |
|
|
307
|
+
| False positives | Manually verify findings before reporting |
|
|
308
|
+
| Missing subdomains | Combine multiple enumeration sources |
|
|
309
|
+
| API key errors | Verify keys in config files |
|
|
310
|
+
| Tools not found | Install Go tools with `go install` |
|