rtexit-method 0.1.16 → 0.1.18

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.
@@ -0,0 +1,319 @@
1
+ #!/bin/bash
2
+ # RTExit — Tool Verification Script
3
+ # Checks all tools referenced in RTExit skills are installed
4
+
5
+ RED='\033[0;31m'
6
+ GREEN='\033[0;32m'
7
+ YELLOW='\033[1;33m'
8
+ BLUE='\033[0;34m'
9
+ NC='\033[0m'
10
+
11
+ PASS=0
12
+ FAIL=0
13
+ WARN=0
14
+
15
+ check() {
16
+ local name="$1"
17
+ local cmd="$2"
18
+ if command -v "$cmd" &>/dev/null 2>&1; then
19
+ echo -e " ${GREEN}✓${NC} $name"
20
+ ((PASS++))
21
+ else
22
+ echo -e " ${RED}✗${NC} $name"
23
+ ((FAIL++))
24
+ fi
25
+ }
26
+
27
+ check_path() {
28
+ local name="$1"
29
+ local path="$2"
30
+ if [ -f "$path" ] || [ -d "$path" ]; then
31
+ echo -e " ${GREEN}✓${NC} $name"
32
+ ((PASS++))
33
+ else
34
+ echo -e " ${RED}✗${NC} $name"
35
+ ((FAIL++))
36
+ fi
37
+ }
38
+
39
+ check_python() {
40
+ local name="$1"
41
+ local module="$2"
42
+ if python3 -c "import $module" &>/dev/null 2>&1; then
43
+ echo -e " ${GREEN}✓${NC} $name"
44
+ ((PASS++))
45
+ else
46
+ echo -e " ${YELLOW}⚠${NC} $name — optional"
47
+ ((WARN++))
48
+ fi
49
+ }
50
+
51
+ echo ""
52
+ echo "═══════════════════════════════════════════"
53
+ echo " RTExit Tool Verification v3.0"
54
+ echo "═══════════════════════════════════════════"
55
+
56
+ # ── RECON & OSINT ─────────────────────────────
57
+ echo ""
58
+ echo -e "${BLUE}[ RECON & OSINT ]${NC}"
59
+ check "nmap" "nmap"
60
+ check "masscan" "masscan"
61
+ check "subfinder" "subfinder"
62
+ check "amass" "amass"
63
+ check "httpx" "httpx"
64
+ check "nuclei" "nuclei"
65
+ check "ffuf" "ffuf"
66
+ check "gobuster" "gobuster"
67
+ check "theHarvester" "theHarvester"
68
+ check "shodan" "shodan"
69
+ check "gau" "gau"
70
+ check "waybackurls" "waybackurls"
71
+ check "gowitness" "gowitness"
72
+ check "gitleaks" "gitleaks"
73
+ check "recon-ng" "recon-ng"
74
+ check "fierce" "fierce"
75
+ check "dnsrecon" "dnsrecon"
76
+ check "dnsenum" "dnsenum"
77
+ check "nbtscan" "nbtscan"
78
+ check "smbmap" "smbmap"
79
+ check "enum4linux" "enum4linux"
80
+ check_python "enum4linux-ng" "enum4linux_ng"
81
+ check_python "maigret" "maigret"
82
+ check_python "holehe" "holehe"
83
+ check_python "ghunt" "ghunt"
84
+ check_python "spiderfoot" "sflib"
85
+ check "h8mail" "h8mail"
86
+ check "crosslinked" "crosslinked"
87
+
88
+ # ── WEB APPLICATION ───────────────────────────
89
+ echo ""
90
+ echo -e "${BLUE}[ WEB APPLICATION ]${NC}"
91
+ check "sqlmap" "sqlmap"
92
+ check "ghauri" "ghauri"
93
+ check "dalfox" "dalfox"
94
+ check "nikto" "nikto"
95
+ check "wfuzz" "wfuzz"
96
+ check "whatweb" "whatweb"
97
+ check "wafw00f" "wafw00f"
98
+ check "testssl.sh" "testssl.sh"
99
+ check "mitmproxy" "mitmproxy"
100
+ check "arjun" "arjun"
101
+ check "x8" "x8"
102
+ check "smuggler" "smuggler"
103
+ check "jwt_tool" "jwt_tool"
104
+ check "grpcurl" "grpcurl"
105
+ check_python "graphw00f" "graphw00f"
106
+ check_python "clairvoyance" "clairvoyance"
107
+ check "zap" "zap"
108
+ check "interactsh-client" "interactsh-client"
109
+
110
+ # ── ACTIVE DIRECTORY ──────────────────────────
111
+ echo ""
112
+ echo -e "${BLUE}[ ACTIVE DIRECTORY ]${NC}"
113
+ check "impacket-psexec" "impacket-psexec"
114
+ check "impacket-secretsdump" "impacket-secretsdump"
115
+ check "impacket-GetUserSPNs" "impacket-GetUserSPNs"
116
+ check "impacket-GetNPUsers" "impacket-GetNPUsers"
117
+ check "certipy" "certipy"
118
+ check "evil-winrm" "evil-winrm"
119
+ check "bloodhound-python" "bloodhound-python"
120
+ check "kerbrute" "kerbrute"
121
+ check "netexec" "netexec"
122
+ check "responder" "responder"
123
+ check "mitm6" "mitm6"
124
+ check "coercer" "coercer"
125
+ check "pyrdp-mitm" "pyrdp-mitm"
126
+ check_python "donpapi" "DonPAPI"
127
+ check_path "NoPac" "/opt/noPac"
128
+ check_path "PKINITtools" "/opt/PKINITtools"
129
+ check_path "PetitPotam" "/opt/PetitPotam"
130
+
131
+ # ── CLOUD ─────────────────────────────────────
132
+ echo ""
133
+ echo -e "${BLUE}[ CLOUD ]${NC}"
134
+ check "aws" "aws"
135
+ check "kubectl" "kubectl"
136
+ check "pacu" "pacu"
137
+ check "roadrecon" "roadrecon"
138
+ check "pmapper" "pmapper"
139
+ check "prowler" "prowler"
140
+ check "stratus" "stratus"
141
+ check "teamfiltration" "teamfiltration"
142
+ check_python "scoutsuite" "ScoutSuite"
143
+ check "kube-hunter" "kube-hunter"
144
+ check "cloudlist" "cloudlist"
145
+ check "mapcidr" "mapcidr"
146
+
147
+ # ── PASSWORD & HASHES ─────────────────────────
148
+ echo ""
149
+ echo -e "${BLUE}[ PASSWORD & HASHES ]${NC}"
150
+ check "hashcat" "hashcat"
151
+ check "john" "john"
152
+ check "hydra" "hydra"
153
+ check "medusa" "medusa"
154
+ check "cewl" "cewl"
155
+ check "crunch" "crunch"
156
+ check "cupp" "cupp"
157
+ check "pypykatz" "pypykatz"
158
+ check_python "patator" "patator"
159
+ check "onesixtyone" "onesixtyone"
160
+
161
+ # ── POST-EXPLOITATION & C2 ────────────────────
162
+ echo ""
163
+ echo -e "${BLUE}[ POST-EXPLOITATION & C2 ]${NC}"
164
+ check "msfconsole" "msfconsole"
165
+ check "sliver-client" "sliver-client"
166
+ check "chisel" "chisel"
167
+ check "ligolo-proxy" "ligolo-proxy"
168
+ check "socat" "socat"
169
+ check "iodine" "iodine"
170
+ check_path "Empire" "/opt/Empire"
171
+ check_path "Villain" "/opt/Villain"
172
+ check_path "PoshC2" "/opt/PoshC2"
173
+ check_path "Atomic Red Team" "/opt/atomic-red-team/atomics"
174
+ check_path "Caldera" "/opt/caldera"
175
+
176
+ # ── NETWORK ───────────────────────────────────
177
+ echo ""
178
+ echo -e "${BLUE}[ NETWORK ]${NC}"
179
+ check "tcpdump" "tcpdump"
180
+ check "tshark" "tshark"
181
+ check "bettercap" "bettercap"
182
+ check "ettercap" "ettercap"
183
+ check "dsniff" "dsniff"
184
+ check "arpwatch" "arpwatch"
185
+ check "netsniff-ng" "netsniff-ng"
186
+ check "hping3" "hping3"
187
+ check "proxychains4" "proxychains4"
188
+ check "macchanger" "macchanger"
189
+ check "sslstrip" "sslstrip"
190
+
191
+ # ── EXPLOITATION ──────────────────────────────
192
+ echo ""
193
+ echo -e "${BLUE}[ EXPLOITATION ]${NC}"
194
+ check "searchsploit" "searchsploit"
195
+ check "phpggc" "phpggc"
196
+ check "beef-xss" "beef-xss"
197
+ check_path "SET" "/opt/setoolkit"
198
+ check "gophish" "gophish"
199
+ check_path "routersploit" "/opt/routersploit"
200
+ check "weevely" "weevely"
201
+ check_python "king-phisher" "king_phisher"
202
+
203
+ # ── BINARY ANALYSIS & RE ──────────────────────
204
+ echo ""
205
+ echo -e "${BLUE}[ BINARY ANALYSIS & REVERSE ENGINEERING ]${NC}"
206
+ check "gdb" "gdb"
207
+ check "radare2" "r2"
208
+ check "ghidra" "ghidra"
209
+ check "binwalk" "binwalk"
210
+ check "strings" "strings"
211
+ check "ltrace" "ltrace"
212
+ check "strace" "strace"
213
+ check "pwntools" "pwn"
214
+ check "floss" "floss"
215
+ check "objdump" "objdump"
216
+
217
+ # ── FUZZING ───────────────────────────────────
218
+ echo ""
219
+ echo -e "${BLUE}[ FUZZING ]${NC}"
220
+ check "afl-fuzz" "afl-fuzz"
221
+ check "radamsa" "radamsa"
222
+ check_python "boofuzz" "boofuzz"
223
+
224
+ # ── FORENSICS ─────────────────────────────────
225
+ echo ""
226
+ echo -e "${BLUE}[ FORENSICS ]${NC}"
227
+ check "foremost" "foremost"
228
+ check "dc3dd" "dc3dd"
229
+ check "testdisk" "testdisk"
230
+ check "bulk_extractor" "bulk_extractor"
231
+ check "exiftool" "exiftool"
232
+ check "vol" "vol"
233
+ check_path "volatility3" "/opt/volatility3"
234
+
235
+ # ── STEGANOGRAPHY ─────────────────────────────
236
+ echo ""
237
+ echo -e "${BLUE}[ STEGANOGRAPHY ]${NC}"
238
+ check "steghide" "steghide"
239
+ check "zsteg" "zsteg"
240
+ check "stegsolve" "stegsolve"
241
+ check "binwalk" "binwalk"
242
+ check "exiftool" "exiftool"
243
+ check_python "stegoveritas" "stegoveritas"
244
+
245
+ # ── MOBILE ────────────────────────────────────
246
+ echo ""
247
+ echo -e "${BLUE}[ MOBILE ]${NC}"
248
+ check "apktool" "apktool"
249
+ check "jadx" "jadx"
250
+ check "frida" "frida"
251
+ check "objection" "objection"
252
+ check "apkleaks" "apkleaks"
253
+ check "dex2jar" "dex2jar"
254
+ check_python "drozer" "drozer"
255
+ check "adb" "adb"
256
+ check "peirates" "peirates"
257
+ check "ScareCrow" "ScareCrow"
258
+ check "adb" "adb"
259
+
260
+ # ── CONTAINER & KUBERNETES ────────────────────
261
+ echo ""
262
+ echo -e "${BLUE}[ CONTAINER & KUBERNETES ]${NC}"
263
+ check "cdk" "cdk"
264
+ check "deepce" "deepce"
265
+ check "botb" "botb"
266
+ check "trivy" "trivy"
267
+ check "dive" "dive"
268
+ check "kubectl" "kubectl"
269
+ check "kube-hunter" "kube-hunter"
270
+ check_path "peirates" "/opt/peirates"
271
+
272
+ # ── EVASION & PAYLOAD GENERATION ─────────────
273
+ echo ""
274
+ echo -e "${BLUE}[ EVASION & PAYLOAD GENERATION ]${NC}"
275
+ check_path "Veil" "/opt/Veil"
276
+ check_path "macro_pack" "/opt/macro_pack"
277
+ check_path "Donut" "/opt/godonuts"
278
+ check_path "ScareCrow" "/opt/ScareCrow"
279
+ check "msfvenom" "msfvenom"
280
+ check_path "electronegativity" "/usr/local/bin/electronegativity"
281
+
282
+ # ── AI/LLM SECURITY ───────────────────────────
283
+ echo ""
284
+ echo -e "${BLUE}[ AI/LLM SECURITY ]${NC}"
285
+ check_python "garak" "garak"
286
+ check "promptfoo" "promptfoo"
287
+
288
+ # ── VOIP & HARDWARE ───────────────────────────
289
+ echo ""
290
+ echo -e "${BLUE}[ VOIP & HARDWARE/IOT ]${NC}"
291
+ check_path "sipvicious" "/opt/sipvicious"
292
+ check "rtpbreak" "rtpbreak"
293
+ check "pjsua" "pjsua"
294
+ check "openocd" "openocd"
295
+ check "flashrom" "flashrom"
296
+ check "avrdude" "avrdude"
297
+ check_path "ucsniff" "/opt/ucsniff"
298
+
299
+ # ── OSINT SPECIALIZED ─────────────────────────
300
+ echo ""
301
+ echo -e "${BLUE}[ OSINT SPECIALIZED ]${NC}"
302
+ check "interactsh-client" "interactsh-client"
303
+ check "chaos" "chaos"
304
+ check "cloudlist" "cloudlist"
305
+ check_python "h8mail" "h8mail"
306
+
307
+ # ── SUMMARY ───────────────────────────────────
308
+ echo ""
309
+ echo "═══════════════════════════════════════════"
310
+ echo -e " ${GREEN}✓ Passed: $PASS${NC} | ${RED}✗ Failed: $FAIL${NC} | ${YELLOW}⚠ Warnings: $WARN${NC}"
311
+ TOTAL=$((PASS + FAIL))
312
+ PCT=$((PASS * 100 / TOTAL))
313
+ echo -e " Coverage: ${GREEN}$PCT%${NC} ($PASS/$TOTAL tools)"
314
+ echo "═══════════════════════════════════════════"
315
+ echo ""
316
+
317
+ if [ $FAIL -gt 0 ]; then
318
+ echo -e "${YELLOW}Tip: Some tools install on first use. Run: apt-get install <tool> or pip3 install <tool>${NC}"
319
+ fi
@@ -1,48 +1,91 @@
1
- const { renderBanner } = require('../lib/banner');
2
- const { resolveRepoRoot, resolveTargetRoot } = require('../lib/paths');
3
- const { copyPackagedAssets } = require('../lib/copy-assets');
4
- const { writeUserConfig } = require('../lib/write-config');
5
- const { askInstallQuestions } = require('../lib/prompts');
6
- const { resolveSkillSet } = require('../lib/profiles');
7
-
8
- async function installCommand(options = {}) {
9
- const repoRoot = options.repoRoot || resolveRepoRoot();
10
- const cwd = options.cwd || process.cwd();
11
- const io = options.io || console;
12
- const promptAdapter = options.promptAdapter || askInstallQuestions;
13
-
14
- io.log(renderBanner());
15
-
16
- const answers = await promptAdapter({ cwd });
17
- if (!answers.confirmed) {
18
- io.log('RTExit install cancelled.');
19
- return;
20
- }
21
-
22
- const targetRoot = resolveTargetRoot(answers.targetDirectory);
23
-
24
- const ides = answers.ides && answers.ides.length ? answers.ides : ['agents'];
25
- const allowedSkills = resolveSkillSet(answers.profiles || ['all']);
26
- await copyPackagedAssets({ repoRoot, targetRoot, ides, allowedSkills });
27
- await writeUserConfig({
28
- targetRoot,
29
- answers: {
30
- language: answers.language,
31
- document_output_language: answers.document_output_language,
32
- },
33
- });
34
-
35
- const ideFolders = ides.map((ide) => {
36
- const map = { agents: '.agents/skills', claude: '.claude/skills', trae: '.trae/skills', codex: '.codex/skills' };
37
- return map[ide] || `.${ide}/skills`;
38
- });
39
-
40
- io.log('RTExit installed successfully.');
41
- io.log(`Skills installed: ${allowedSkills.size} skills into ${ideFolders.join(', ')}`);
42
- io.log('Next steps:');
43
- io.log('1. Open _rtexit/config.user.toml and complete client/project details');
44
- io.log('2. Open your AI IDE in this project');
45
- io.log('3. Start with rt-help');
46
- }
47
-
48
- module.exports = { installCommand };
1
+ const { renderBanner } = require('../lib/banner');
2
+ const { resolveRepoRoot, resolveTargetRoot } = require('../lib/paths');
3
+ const { copyPackagedAssets } = require('../lib/copy-assets');
4
+ const { writeUserConfig } = require('../lib/write-config');
5
+ const { askInstallQuestions } = require('../lib/prompts');
6
+ const { resolveSkillSet } = require('../lib/profiles');
7
+ const path = require('node:path');
8
+ const fs = require('node:fs');
9
+
10
+ async function installCommand(options = {}) {
11
+ const repoRoot = options.repoRoot || resolveRepoRoot();
12
+ const cwd = options.cwd || process.cwd();
13
+ const io = options.io || console;
14
+ const promptAdapter = options.promptAdapter || askInstallQuestions;
15
+
16
+ io.log(renderBanner());
17
+
18
+ const answers = await promptAdapter({ cwd });
19
+ if (!answers.confirmed) {
20
+ io.log('RTExit install cancelled.');
21
+ return;
22
+ }
23
+
24
+ const targetRoot = resolveTargetRoot(answers.targetDirectory);
25
+
26
+ const ides = answers.ides && answers.ides.length ? answers.ides : ['agents'];
27
+ const allowedSkills = resolveSkillSet(answers.profiles || ['all']);
28
+ await copyPackagedAssets({ repoRoot, targetRoot, ides, allowedSkills });
29
+ await writeUserConfig({
30
+ targetRoot,
31
+ answers: {
32
+ language: answers.language,
33
+ document_output_language: answers.document_output_language,
34
+ },
35
+ });
36
+
37
+ const ideFolders = ides.map((ide) => {
38
+ const map = { agents: '.agents/skills', claude: '.claude/skills', trae: '.trae/skills', codex: '.codex/skills' };
39
+ return map[ide] || `.${ide}/skills`;
40
+ });
41
+
42
+ const dockerComposePath = path.join(targetRoot, 'docker', 'docker-compose.yml');
43
+ const dockerInstalled = fs.existsSync(dockerComposePath);
44
+
45
+ io.log('');
46
+ io.log('════════════════════════════════════════════');
47
+ io.log(' RTExit installed successfully!');
48
+ io.log('════════════════════════════════════════════');
49
+ io.log('');
50
+ io.log(` Skills: ${allowedSkills.size} skills → ${ideFolders.join(', ')}`);
51
+ io.log('');
52
+
53
+ if (dockerInstalled) {
54
+ io.log(' ┌─ STEP 1: Start the Docker Lab ─────────────────────────────┐');
55
+ io.log(' │ │');
56
+ io.log(' │ cd docker │');
57
+ io.log(' │ docker compose up -d │');
58
+ io.log(' │ │');
59
+ io.log(' │ First run downloads ~4GB image. Subsequent starts: <5s │');
60
+ io.log(' └─────────────────────────────────────────────────────────────┘');
61
+ io.log('');
62
+ io.log(' ┌─ STEP 2: Enter the Shell ───────────────────────────────────┐');
63
+ io.log(' │ │');
64
+ io.log(' │ docker exec -it rtexit-kali bash │');
65
+ io.log(' │ │');
66
+ io.log(' │ 300+ tools ready. Your project is at /workspace │');
67
+ io.log(' └─────────────────────────────────────────────────────────────┘');
68
+ io.log('');
69
+ io.log(' ┌─ STEP 3: Configure & Start ─────────────────────────────────┐');
70
+ io.log(' │ │');
71
+ io.log(' │ 1. Edit _rtexit/config.user.toml (client/project info) │');
72
+ io.log(' │ 2. Open your AI IDE in this directory │');
73
+ io.log(' │ 3. Start with: rt-help │');
74
+ io.log(' │ │');
75
+ io.log(' └─────────────────────────────────────────────────────────────┘');
76
+ io.log('');
77
+ io.log(' Docker README: docker/README.md');
78
+ io.log(' Build locally: see docker/README.md → "Build Locally" section');
79
+ } else {
80
+ io.log(' Next steps:');
81
+ io.log(' 1. Edit _rtexit/config.user.toml with your engagement details');
82
+ io.log(' 2. Open your AI IDE in this project');
83
+ io.log(' 3. Start with rt-help');
84
+ }
85
+
86
+ io.log('');
87
+ io.log('════════════════════════════════════════════');
88
+ io.log('');
89
+ }
90
+
91
+ module.exports = { installCommand };
@@ -24,6 +24,7 @@ function getInstallEntries(ides = ['agents'], allowedSkills = null) {
24
24
  { type: 'path', value: 'packaged-assets/templates', target: 'templates' },
25
25
  { type: 'path', value: 'packaged-assets/resources', target: 'resources' },
26
26
  { type: 'path', value: 'packaged-assets/RTEXIT.md', target: 'RTEXIT.md' },
27
+ { type: 'path', value: 'packaged-assets/docker', target: 'docker' },
27
28
  ];
28
29
  }
29
30
 
@@ -99,6 +99,7 @@ const PROFILES = {
99
99
  'rt-ai-llm-security',
100
100
  'rt-crypto-attacks',
101
101
  'rt-exploit-fuzzing',
102
+ 'rt-exploit-graphql',
102
103
  ],
103
104
  },
104
105
 
@@ -204,13 +205,14 @@ const PROFILES = {
204
205
 
205
206
  specialist: {
206
207
  label: 'Specialist',
207
- description: 'SCADA/ICS, IoT, hardware, physical, social engineering, wireless',
208
+ description: 'SCADA/ICS, IoT, hardware, physical, social engineering, wireless, WiFi',
208
209
  skills: [
209
210
  'rt-exploit-scada',
210
211
  'rt-exploit-iot',
211
212
  'rt-hardware-hacking',
212
213
  'rt-exploit-wireless',
213
214
  'rt-wireless-rogue-ap',
215
+ 'rt-wifi-attacks',
214
216
  'rt-exploit-physical',
215
217
  'rt-exploit-phishing',
216
218
  'rt-exploit-vishing',
@@ -222,6 +224,36 @@ const PROFILES = {
222
224
  'rt-steganography',
223
225
  ],
224
226
  },
227
+
228
+ recon: {
229
+ label: 'Recon & OSINT',
230
+ description: 'OSINT, GitHub recon, subdomain enum, attack surface mapping',
231
+ skills: [
232
+ 'rt-active-recon',
233
+ 'rt-osint',
234
+ 'rt-shodan-recon',
235
+ 'rt-subdomain-enum',
236
+ 'rt-subdomain-takeover',
237
+ 'rt-wordlist-generation',
238
+ 'rt-attack-surface-map',
239
+ 'rt-github-recon',
240
+ 'rt-js-analysis',
241
+ 'rt-password-spray',
242
+ ],
243
+ },
244
+
245
+ devops: {
246
+ label: 'DevOps / IaC',
247
+ description: 'IaC misconfigs, Terraform, K8s YAML, CloudFormation, supply chain',
248
+ skills: [
249
+ 'rt-iac-misconfig',
250
+ 'rt-supply-chain',
251
+ 'rt-kubernetes',
252
+ 'rt-exploit-containers',
253
+ 'rt-serverless',
254
+ 'rt-github-recon',
255
+ ],
256
+ },
225
257
  };
226
258
 
227
259
  /**