-
Notifications
You must be signed in to change notification settings - Fork 1
FAQ
IndustrialXPL-Forge (IXF) is a Python-native security assessment and exploitation framework for Operational Technology (OT), Industrial Control Systems (ICS), SCADA, HMI, PLC, RTU, DCS, and IIoT environments. It provides 1190+ modules covering CVE exploits, protocol abuse, default credential testing, MITRE ATT&CK for ICS sweeps, and offline SAST analysis of PLC code.
No. IXF is purpose-built for OT/ICS environments. Where Metasploit covers general IT exploitation, IXF specializes in industrial protocols (Modbus, S7comm, DNP3, IEC 104, OPC UA, EtherNet/IP), ICS-specific CVEs, and OT-specific assessment frameworks (IEC 62443, NIST 800-82r3, MITRE ATT&CK for ICS). All core modules are native Python — no Metasploit installation required.
IXF is intended exclusively for authorized security testing, research, and education. Using it against systems you do not own or have explicit written permission to test is illegal in most jurisdictions. OT/ICS systems control critical physical infrastructure — unauthorized access can cause physical harm, equipment damage, and service disruption.
Most modules work without elevated privileges. Some require elevated access:
- Installing NSE scripts to
/usr/share/nmap/scripts/(Linux:sudo, Windows: Run as Administrator) - Sending raw Layer 2 frames (e.g.
ethercat_master_spoof,goose_spoofing_injection) requires raw socket access - Creating log files in protected directories
Python 3.9 or later. Tested on 3.9, 3.10, 3.11, 3.12, 3.13. Python 3.14 support pending when stable.
# Check PATH includes pip scripts directory
python -m pip show industrialxpl-forge | grep Location
# Run directly
python -m industrialxplOn Windows, ensure %LOCALAPPDATA%\Programs\Python\PythonXX\Scripts\ is in PATH.
Upgrade to v1.0.12 or later:
pip install --upgrade industrialxpl-forgeThis was a Windows readline bug fixed in v1.0.12.
Scapy is a Tier 1 dependency and should install automatically. If missing:
pip install scapyOn Windows, Scapy may also require Npcap.
pymodbus is a Tier 2 optional dependency for live Modbus modules:
pip install industrialxpl-forge[ot]pip install industrialxpl-forge[full]ixf > vendors siemens
ixf > search siemens
ixf > search CVE-2021-22681
simulate=True is the default for every module. Just run without changing anything:
ixf > use scanners/ics/modbus_detect
ixf > set target 192.168.1.100
ixf > run
[SIMULATE MODE — no packets sent]
...
ixf > set simulate false
ixf > set destructive true
ixf > run
[DESTRUCTIVE MODE — requires confirmation]
...
ixf > set port 5020
Create a file with one IP per line and use file://:
ixf > set target file:///opt/targets.txt
ixf > run
[multi] Target: 192.168.1.1
[multi] Target: 192.168.1.2
Or use MITRE tactic sweeps with CIDR:
ixf > ttp T0843 192.168.1.0/24
ixf > report json
[+] Report saved: ixf_report_20260601_153045.json
ixf > ttp T0866 192.168.1.100 --output results.json
-
./industrialxpl.log— rotating session log (500 KB max) -
./.log/destructive_ops_YYYY-MM-DD.log— destructive operation audit log -
~/.ixf_history— command history
1190+ modules as of v1.0.13:
- 486 CVE modules
- 159 exploit modules (protocol, PLC, SCADA, MES)
- 34 credential modules
- 31 scanner modules
- 18 assessment modules
- 26 malware TTP modules
See Module Development. The minimal template is:
from industrialxpl.core.exploit import Exploit, OptBool, OptIP, OptPort, mute, DestructiveGate
class Exploit(Exploit):
__info__ = { "name": "...", "cve": "N/A", "impact": "HIGH", ... }
target = OptIP("", "Target IP")
simulate = OptBool(True, "Simulate")
@mute
def check(self): ...
def run(self): ...python -c "
from industrialxpl.core.exploit.utils import import_exploit
obj = import_exploit('industrialxpl.modules.cve.myvendor.my_module')()
print(obj.get_info()['name'])
obj.run() # runs in simulate mode
"- Level A: Full end-to-end PoC — exploits the vulnerability and demonstrates impact
- Level B: Version check/fingerprint — identifies if the target is likely vulnerable based on service version
96 out of 103 techniques = 93% as of v1.0.13.
ixf > mitre-coverage
TOTAL: 96/103 (93%)
ixf > mitre-all 192.168.1.100
This runs all 74 mapped techniques in simulate mode only.
ixf > mitre-report layer
[+] Layer saved: ixf_mitre_layer_20260601.json
Open at: https://mitre-attack.github.io/attack-navigator/
OpenAI (gpt-4o), Anthropic (claude-3-5-sonnet), Google Gemini (gemini-2.5-flash), DeepSeek (deepseek-chat), Grok (grok-2-latest).
export GOOGLE_AI_STUDIO_API_KEY=AIzaSy...
ixfOr inside the shell:
ixf > llm-key gemini AIzaSyBGaoio...
IXF applies sanitization before sending: credentials, public IPs, hostnames, and binary blobs are redacted. Only sanitized content is sent to the LLM. See SAST / LLM Analysis for details.
Structured Text (ST), Ladder Diagram (LD), Function Block Diagram (FBD), Instruction List (IL), Sequential Function Chart (SFC), Siemens SCL/AWL/STL, Rockwell L5X, ABB AP1, CODESYS project files.
# Linux (may need sudo)
python tools/nse_install.py --install
# Windows (may need Administrator)
python tools/nse_install.py --install
# Or inside IXF shell
ixf > nse installYes — the .nse files are stored in industrialxpl/resources/nse_scripts/. Copy them manually to your Nmap scripts directory after installing Nmap.
| Platform | Path |
|---|---|
| Linux (apt) | /usr/share/nmap/scripts/ |
| Linux (source) | /usr/local/share/nmap/scripts/ |
| macOS (Homebrew) | /opt/homebrew/share/nmap/scripts/ |
| Windows | C:\Program Files (x86)\Nmap\scripts\ |
python -c "from industrialxpl.core.exploit.utils import index_modules; print(len(index_modules()))"If 0, the package data may not have been installed correctly:
pip install --force-reinstall industrialxpl-forgeCheck that target is set:
ixf > show options
ixf > set target 192.168.1.100
Linux: sudo python tools/nse_install.py --install
Windows: Run terminal as Administrator
pip install pysnmp>=6.1 scapy>=2.5Note: pysnmp v4.x is incompatible with Python 3.12+. Use pysnmp 6.1+.
pyreadline3 should be installed automatically on Windows. If not:
pip install pyreadline3>=3.4Back to Index