offensive-ctf/ics-ctf/SKILL.md
Lab/CTF: ICS/OT protocol challenges; Modbus, DNP3, BACnet, S7, OPC UA, MQTT, PLC/HMI data, registers/coils, safe read-only reasoning.
npx skillsauth add aeondave/malskill ics-ctfInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Solve industrial-control and OT protocol lab tasks by treating traffic and process state as evidence first, then selecting the smallest safe action that proves the objective.
Load these as decision engines when their domain appears:
network-technique for PCAP, protocol, and service exposure analysis.forensic-technique for evidence handling, timelines, and artifact preservation.wireless-technique for RF, serial-over-radio, or fieldbus captures crossing into wireless analysis.reversing-technique for PLC program blocks, firmware, protocol clients, or custom encoders.python-patterns for parsers, register decoders, and safe replay harnesses.Use tool families based on the evidence, not habit:
wireshark, tcpdump, tshark, and zeek for protocol carving, conversations, timing, display filters (modbus.func_code, s7comm, dnp3, bacapp, cip, opcua, mqtt), and CSV/JSON field export.pymodbus, modbus-cli, mbtget, QModMaster, and ModbusPal for Modbus read/write, function-code abuse (FC 1–6, 15, 16, 8, 43), coil/register sweeps, and lab simulation.python-snap7, snap7-server, plcscan, and s7scan for Siemens S7 enumeration (rack/slot, SZL, DB reads) and lab targets.opcua-asyncio, FreeOpcUa, and OPCUaScanner for OPC UA endpoint enumeration, anonymous-policy detection, node browse, and read/write.mosquitto_pub/mosquitto_sub, mqtt-pwn, mosquitto-clients, MQTT Explorer/MQTTX, Scapy MQTT layer, MQTTSA, and the Wireshark mqtt + sparkplug dissectors for topic enumeration (#, $SYS/#), retained-message inspection, Sparkplug B (Eclipse Tahu / pysparkplug) decoding, broker fingerprinting (Mosquitto/EMQX/HiveMQ/VerneMQ/NanoMQ) and auth probing. Always pair with the adjacent dashboard port (EMQX 18083, HiveMQ 8080, Node-RED 1880, OpenPLC 8080, Home Assistant 8123) — it is usually the real entry point.can-utils (candump, cansniffer, cansend, cangen) for CAN bus capture, periodic-frame analysis, and replay against virtual vcan interfaces.jq, pandas, and Python scripts for endian, scaling, timestamp, register-table transformations, and CSV-from-pcap decoding pipelines.nmap OT NSE scripts (modbus-discover, s7-info, enip-info, bacnet-info, mqtt-subscribe, opcua-info) only against authorized isolated labs; passive PCAP analysis is preferred when artifacts are enough.binwalk, ghidra, radare2, and strings when the task includes PLC firmware, engineering-project exports, or custom protocol binaries.saleae-logic-2 when a capture includes serial, CAN, or fieldbus waveforms rather than decoded network traffic.modbus.func_code == 16 for write-multiple-registers events. Check BOTH register/reference number AND register value fields — flag-style data is often hidden in the address, transaction ID, or unit ID instead of the value.dnp3.Who-Is/I-Am). Filter: bacapp plus service choice.s7comm plus s7comm.param.func. Pair with plcscan/s7scan for lab enumeration and python-snap7 for DB reads.enip and cip.None policy = anonymous), node IDs, and Browse/Read/Write services. Filter: opcua.mqtt. Try wildcard subscriptions # and $SYS/# when broker access is authorized; grab $SYS/broker/version + clients/total + retained messages/count first.spBv1.0/<group>/<NBIRTH|NDATA|NCMD|DBIRTH|DDATA|DCMD>/<edge>[/<device>] with Protobuf payload signals an Ignition / Cirrus Link / EMQX Neuron / Node-RED bridge. Capture an NBIRTH/DBIRTH first to resolve alias→tag, then treat DCMD writes as actuator writes (Modbus FC 5/6 equivalent). Bridges (Cirrus Link, EMQX Neuron, Node-RED, OpenPLC MQTT, Advantech/Moxa/HMS gateways) round-trip MQTT writes into Modbus/S7/OPC-UA — confirm with state-topic lag (~1 s) before assuming raw broker access reaches the PLC.mosquitto.conf and passwd_file if a host is in scope (auth_plugin, bridge_*, acl_file, allow_anonymous); hashes crack with hashcat (PBKDF2-SHA512 mode for 2.x, legacy SHA512+salt for 1.x). Pin findings to $SYS/broker/version and check vendor advisories (Mosquitto CVE-2017-7650 ACL pattern bypass, CVE-2024-3935 TLS DoS; EMQX/HiveMQ/VerneMQ banners similarly).candump/cansniffer for live data..acd/.l5x RSLogix/Studio 5000, .ap14/.zap14 TIA Portal, .pro/.projectarchive Codesys, .s7p/.ap13 Step7) carry ladder/ST source, tag names, network configuration, and sometimes credentials — grab them before native protocol attacks when the workstation is in scope.ettercap/bettercap + NetfilterQueue + Scapy filters — useful when direct write is logged but rewrite-in-transit is not.%Q/coils) are overwritten next PLC scan; setpoint writes (%M/holding registers consumed by ladder) persist. Forces override both regardless of ladder. Mode transitions (STOP/RUN/PROG/FAULT) are high-signal events — search PCAPs for them before chasing register writes.ABCD/CDAB/BADC/DCBA) by checking which order yields a plausible temperature/pressure/level, then solve EU = raw*scale + offset from two known HMI/historian points. Status registers pack 16 alarm bits — map each bit before claiming meaning..zap1x/.ap1x/.s7p archive, treat it like source code. Match TIA Portal major version + HSP to the CPU firmware, dump PLC + HMI tag tables to CSV, reverse OB1 networks in order, then load into PLCSim Advanced to drive inputs and watch DB/M evolution offline. The DB area is the cleanest write surface (setpoint changes leave no Q-image footprint); HMI buttons are usually thin proxies onto M bits. Basic/Comfort panels archive analog tags to internal SD and to the back-USB stick — pull both when you have physical access.1111 on a Unitronics PLC + HMI defacement + disabled upload/download → CyberAv3ngers/BAUXITE. COTP+S7comm session pushing an S7-300/400 to STOP without ladder upload → BAUXITE PLC_Controller.exe (Jul 2025). PowerShell that scans Modbus holding registers > threshold and overwrites in a loop → BAUXITE exploit.ps1 (Nov 2025). Sierra Wireless AirLink RV50/RV55 or cellular gateway as the only OT ingress + pure LOTL (netsh, wmic, ntdsutil, PortProxy, AD Explorer) on the EWS → VOLTZITE/Volt Typhoon. Ivanti edge CVE → AD creds → handoff → VOLTZITE → SYLVANITE broker chain. Trimble Cityworks unsafe-deserialization RCE + GIS data theft → KAMACITE/VOLTZITE prepositioning, flag lives in mapped asset metadata. MQTT C2 (1883/8883) on a fuel-management/Unitronics-adjacent gauge → IOCONTROL (Claroty Team82, Dec 2024). FortiGate SSL-VPN over Tor + interactive jump host + PsExec + nircmd screenshots of *SCADA*/*HIST* hosts + Rubeus Diamond Ticket + rsocx reverse SOCKS + FortiGate config theft with persistent admin re-add + GPO-pushed Scheduled Task running a Mersenne-Twister C++ wiper (DynoWiper) or an LLM-written PowerShell WriteRandomBytes wiper (LazyWiper) at SYSTEM, optionally finished by an iLO/IPMI-mounted Tiny Core Linux ISO dd-ing the RAID + dropping Intel RST metadata → Static Tundra / Berserk Bear / Ghost Blizzard / Dragonfly destructive archetype (CERT Polska 29 Dec 2025, first publicly documented destructive op by this cluster). See references/incidents.md for the full threat-group → CTF-pivot mapping, vendor/CVE landing pads (Unitronics, Sierra Wireless, Ivanti, Cityworks, BESS, Sophos, ATG), and the Path 1/2/3 attack-path templates.$SYS fingerprinting, anonymous/retained/LWT/ACL probing), Sparkplug B topic + payload model (Eclipse Tahu), Mosquitto/EMQX/HiveMQ/VerneMQ/NanoMQ specifics with CVE references, MQTT-to-PLC bridge stacks (Cirrus Link Ignition modules, EMQX Neuron, Node-RED, OpenPLC, Advantech/Moxa/HMS gateways), tool chain (mqtt-pwn, mosquitto-clients, MQTT Explorer/MQTTX, MQTTSA, Scapy, Cotopaxi), and curated CTF writeups (TryHackMe Bugged, AoC IoT/SCADA days) plus real-world case material (Akamai, Trend Micro, Claroty Team82, CISA ICS advisories).data-ai
Scoped routing: Linux operator; hosts, sessions, users, services, packages, logs, containers, SSH, network paths, privilege evidence.
development
Offensive methodology for ICS/OT/SCADA environments in authorized industrial penetration testing and red team operations. Use when assessing PLCs, RTUs, HMIs, engineering workstations, historians, or field devices running Modbus, DNP3, EtherNet/IP, S7comm/S7+, Profinet, IEC 60870-5-104, BACnet, or OPC-UA. Covers passive OT network enumeration, protocol-level device interrogation, PLC coil/register read-write attacks, HMI session exploitation, historian and engineering workstation compromise, and safe escalation rules for critical infrastructure scope. Does not cover: general IT network exploitation (network-technique), physical hardware interfaces UART/JTAG/SPI (hardware-technique), wireless sensor network attacks (wireless-technique), RF/SDR signal analysis (hardware-ctf or wireless-technique), or CTF-framed ICS lab tasks (ics-ctf).
tools
Offensive methodology for authorized game security assessments, game client security research, and game-adjacent penetration testing in real-world engagements. Use when assessing game clients for cheating vulnerabilities, testing anti-cheat effectiveness, auditing game server protocols for score manipulation or economic fraud, reverse engineering game DRM or license validation, analyzing game save file protection, or assessing game mod/plugin security. Covers: process memory scanning and manipulation (Cheat Engine methodology), game binary reversing for license and DRM bypass, game network protocol analysis and packet replay, anti-cheat mechanism analysis, save file format reversing and tampering, speed hack and value injection techniques. Does NOT cover: CTF game challenges (game-ctf), game engine source code auditing (web-exploit-technique or vuln-search-technique for the backend), or general binary exploitation (pwn-ctf or reversing-technique).
development
Auth assessment: hardware/embedded methodology; UART/JTAG/SWD/SPI/I2C, firmware extraction, boot/debug paths, embedded OS evidence.