
PoC Modbus TCP एक्सप्लॉइट जो सिम्युलेटेड PLCs में रीड-ओनली कॉइल्स पर स्पूफ की गई राइट्स का प्रदर्शन करता है और SCADA/ICS एक्सेस नियंत्रण खामियों को उजागर करता है।
# modbus_plc_sim.py - Simulated Modbus PLC with read‑only coils
from pymodbus.server.sync import StartTcpServer
from pymodbus.device import ModbusDeviceIdentification
from pymodbus.datastore import ModbusSequentialDataBlock
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext
store = ModbusSlaveContext(
di=ModbusSequentialDataBlock(0, [1]*100), # coils – should be read‑only
co=ModbusSequentialDataBlock(0, [0]*100), # discrete inputs
hr=ModbusSequentialDataBlock(0, [0]*100),
ir=ModbusSequentialDataBlock(0, [0]*100)
)
# Vulnerability: coil block (di) is writable via function code 5 (Write Single Coil) normally, but maybe misconfigured.
# To simulate a flaw, we'll allow writing to coils using function code 15 (Write Multiple Coils) even though they should be read‑only.
# The pymodbus default allows writing to coils. We'll just demo writing to a coil that is supposed to be safety‑critical.
context = ModbusServerContext(slaves=store, single=True)
StartTcpServer(context, address=("0.0.0.0", 5020))
एक औद्योगिक PLC उन कॉइल्स को एक्सपोज़ करता है जो केवल-पठनीय (रीड-ओनली) होने के लिए होती हैं (जैसे, अलार्म स्थितियाँ)। हालाँकि, कॉन्फ़िगरेशन त्रुटि के कारण, Modbus सर्वर उन कॉइल्स पर लेखन कमांड (फंक्शन कोड 5 या 15) स्वीकार करता है, जिससे हमलावर सुरक्षा प्रणालियों में हेरफेर कर सकता है।
pip install pymodbus
python modbus_plc_sim.py
python exploit_modbus_write.py