Skip to main content

A highly flexible Modbus tool made for penetration testers

Project description

Control Things Modbus

The goal of ctmodbus is to become the security professional's Swiss army knife for interacting with Modbus devices. Once completed, features will include support for:

  • RTU and ASCII versions of serial Modbus (DONE)
  • TCP and UDP versions of TCP/IP Modbus (DONE)
  • Client and server options (DONE in lib, server IN PROGRESS)
  • All standard Modbus functions (reads DONE, writes IN PROGRESS)
  • Arbitrary custom Modbus functions
  • Reading addresses specified in lists and ranges (DONE)
  • Interval based polling
  • Clone feature to quickly create base data for simulator
  • Proxy feature between two modbus endpoints
  • Export to cthistorian and database

Installation:

As long as you have git and Python 3.6 or later installed, all you should need to do is:

pip3 install ctmodbus

Examples of current user interface commands once you start ctmodbus:

> connect tcp:10.10.10.1                          # start a client session
> connect rtu:/dev/serial                         # works with serial too
> connect ascii:com2                              # and and windows
> connect udp:10.10.10.1:10502                    # even udp with custom ports
> read id                                         # read device identifiers
> read discrete_inputs 1                          # read coils and registers
> read coils 1,3,5,7                              # with comma separated values
> read input_register 5,10-30,90-99               # and ranges
> read holding_register 50 9                      # or start address and count
> write coils 128 0                               # write single values
> write coils 76 01101001                         # or multiple values
> write holding_register 1000 14302 188 305       # registers support int

Planned ui commands once complete:

> write holding_register 1000 "My name is Mud"    # and strings
> write holding_register 1400 DEADBEEF            # or raw hex
> poll holding_register 1-10,15-19 1              # poll registers every second
> tags add input1 input_register 1                # define tag names
> tags add config2 holding_register 50-69         # tags can define ranges
> tags add config3 holding_register 70 20         # and work with start & count
> read tags input1 config2 config3                # tags simplify reads & writes
> tags group configs config1 config2 config3      # create tag groups
> tags export saved.tags                          # export and share tags
> tags import saved.tags                          # import other's tags
> clone tcp:10.10.10.10 coils 1-100               # clone coils from a device
> clone tcp:10.10.10.10 all 1-100                 # or all types of values
> simulate tcp:127.0.0.1:10502                    # so you can later simulate
> proxy tcp:10.10.10.1:10502 rtu:com4             # proxy requests to device
> function 33 0000 DEADBEEF                       # send custom functions
> function 8 [0000-FFFF] 0000                     # brackets for enumeration
> function 8 [0000-00FF] (0000)5                  # parenths for random fuzzing
> raw 1234 0001 06 01 0000 0010                   # or full raw modbus payloads
> tunnel listen tcp::6666                         # setup modbus tunnel service
> tunnel connect tcp:10.1.1.1:6666                # connect from another comp
> tunnel send exfiltration.txt                    # send files through tunnel
> tunnel shell                                    # or open a terminal session
> historian tcp:10.1.1.1:9300                     # transactions to cthistorian

This tool is built upon these to key library:

Copyright 2020 Justin Searle

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ctmodbus-0.5.3.tar.gz (21.5 kB view details)

Uploaded Source

Built Distribution

ctmodbus-0.5.3-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

File details

Details for the file ctmodbus-0.5.3.tar.gz.

File metadata

  • Download URL: ctmodbus-0.5.3.tar.gz
  • Upload date:
  • Size: 21.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.9.1+ Linux/5.10.0-3-amd64

File hashes

Hashes for ctmodbus-0.5.3.tar.gz
Algorithm Hash digest
SHA256 5c70d0189c3823684c796f10fa9e71f2c5574f732f56016585fcb0b9289f3c43
MD5 b1e4fa6f257661cd21106447acafd4fb
BLAKE2b-256 9ae590b1431febfc143faa4443b2a4af1a08b8f04a6be39f1bd15ca4175867cf

See more details on using hashes here.

File details

Details for the file ctmodbus-0.5.3-py3-none-any.whl.

File metadata

  • Download URL: ctmodbus-0.5.3-py3-none-any.whl
  • Upload date:
  • Size: 21.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.9.1+ Linux/5.10.0-3-amd64

File hashes

Hashes for ctmodbus-0.5.3-py3-none-any.whl
Algorithm Hash digest
SHA256 586a2323368f2d093865e4cb672190ead8840ad1cafb2d02a62d1513e8ee6669
MD5 13f6df94d753b18fa5dd5c4cae8789ca
BLAKE2b-256 153504da9bfc04a8e8924528c711fef9f4cf639da66a266e0488d1f6d260c9f6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page