Skip to content

Commit

Permalink
Merge pull request #467 from AlexAQ972/master
Browse files Browse the repository at this point in the history
Add support for MQTT v3.1.1 and v5.0
  • Loading branch information
phillip-stephens authored Jan 27, 2025
2 parents 42e619e + e85d25d commit 00852fd
Show file tree
Hide file tree
Showing 13 changed files with 564 additions and 0 deletions.
9 changes: 9 additions & 0 deletions integration_tests/mqtt/cleanup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/usr/bin/env bash

set +e

echo "mqtt/cleanup: Tests cleanup for mqtt"

CONTAINER_NAME=zgrab_mqtt

docker stop $CONTAINER_NAME
6 changes: 6 additions & 0 deletions integration_tests/mqtt/mosquitto.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
listener 1883 0.0.0.0

listener 8883 0.0.0.0
protocol mqtt
certfile /mosquitto/server.pem
keyfile /mosquitto/server.key
23 changes: 23 additions & 0 deletions integration_tests/mqtt/multiple.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
[mqtt]
name="mqtt-tls"
trigger="mqtt-tls"
port=8883
tls=true

[mqtt]
name="mqtt-tls-v5"
trigger="mqtt-tls-v5"
port=8883
tls=true
v5=true

[mqtt]
name="mqtt"
trigger="mqtt"
port=1883

[mqtt]
name="mqtt-v5"
trigger="mqtt-v5"
port=1883
v5=true
20 changes: 20 additions & 0 deletions integration_tests/mqtt/server.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDOzCCAiOgAwIBAgIUS+JTI5jiO1C0AgqSuFgB1P9wS8swDQYJKoZIhvcNAQEL
BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAgFw0yNDA5MjUwMzIwNTNaGA8yMDUy
MDIxMDAzMjA1M1owRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx
ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAKO/vB4nZjhbXcSMuIpl65aCK6zI6EtX2m5CrnJh
fRChp9MJV3OesPV93rcM2Vd+grf8qTw77TLcglYcSuHvBHfVbHaCnBx0z5ogYozR
EiuNV/hxTgfJdhQVN5WwGvRJe0pb7RaLtz4PF8rHJlTitQw37uGmOsW4bBZU1F6B
Nz/Os9BPLBBBnQvHUQmmp/aGJBga0mRRW3VFFOt7XgLJR2PR9jCTQZstleudSddj
SRemVvfm0zcsIO4IPsCKdkUMh4+eW3H0cc2oFggIDz72+uUYnyxtOx1vv7RzVETJ
BwMG/VDnfNZ5lozTKhlKZhVyVijy3ObMax8pLXixJcKrqc0CAwEAAaMhMB8wHQYD
VR0OBBYEFP6DHoFBdNVmHwc6LZnLwcDcKnvzMA0GCSqGSIb3DQEBCwUAA4IBAQA9
VRDbEAFWmqKq+LPRqGmjiqGE0rTOsoKSDWn0Zsre31H2vsXy8BUW69rjhwMXEONl
5ybZCHnU8GLawFzrVQJnuV77XhIDuJhIz81guy0K872YcrNuhlIS7ahxXJszwgPe
Tp313rJKUA44DIuF18WjWjwQL8bU80xiJJcyuR2mViOFgcfIABmSzvvMx8nHxp7W
C9woea6TMamq7GQmIky9ZVy7OcfOSCygK0TU6Y2qNcIuKl4xtvY07msGFLifXp6s
A9A4aS610tqPNInh5zokI2m/y7nvCq7BA9n+5HvMKJcxW2G+AU7R7IFJctsPL07g
1MDuvzVplpxKk3tkj8Ou
-----END CERTIFICATE-----
16 changes: 16 additions & 0 deletions integration_tests/mqtt/server.csr
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICijCCAXICAQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx
ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAKO/vB4nZjhbXcSMuIpl65aCK6zI6EtX2m5CrnJh
fRChp9MJV3OesPV93rcM2Vd+grf8qTw77TLcglYcSuHvBHfVbHaCnBx0z5ogYozR
EiuNV/hxTgfJdhQVN5WwGvRJe0pb7RaLtz4PF8rHJlTitQw37uGmOsW4bBZU1F6B
Nz/Os9BPLBBBnQvHUQmmp/aGJBga0mRRW3VFFOt7XgLJR2PR9jCTQZstleudSddj
SRemVvfm0zcsIO4IPsCKdkUMh4+eW3H0cc2oFggIDz72+uUYnyxtOx1vv7RzVETJ
BwMG/VDnfNZ5lozTKhlKZhVyVijy3ObMax8pLXixJcKrqc0CAwEAAaAAMA0GCSqG
SIb3DQEBCwUAA4IBAQCPropLZOaRaCD+iSGS304DRO6ysO8D2UW9T8CKqcbI6mOp
b8Wx2ENXXxuhSIpF3xe+yqpPOQmxph+lYnlewqVFWKRY91xIX07iMQ4bQHXKiWTs
IUQYRDbiLPq4sLgKdUdD41SoLhRBLGySX0/27hBlMQ0dZz92jTLOAYL06oqdtcJE
q/v3HVKlGiPkPiuFljbxBwI142ceFAWCctTb7N+6a0W/HioZPhKXLfGMcEHyNCQ7
XwMQW5DSp4S7J4FseDkxLIxcbYYCxpi3jHFx+eYPerZ5TobE6QZHQeWLj8mcrNwu
mrL6CFlKde7F+xmb3e/tPfUTE+NxNdWzPGTjov2h
-----END CERTIFICATE REQUEST-----
28 changes: 28 additions & 0 deletions integration_tests/mqtt/server.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCjv7weJ2Y4W13E
jLiKZeuWgiusyOhLV9puQq5yYX0QoafTCVdznrD1fd63DNlXfoK3/Kk8O+0y3IJW
HErh7wR31Wx2gpwcdM+aIGKM0RIrjVf4cU4HyXYUFTeVsBr0SXtKW+0Wi7c+DxfK
xyZU4rUMN+7hpjrFuGwWVNRegTc/zrPQTywQQZ0Lx1EJpqf2hiQYGtJkUVt1RRTr
e14CyUdj0fYwk0GbLZXrnUnXY0kXplb35tM3LCDuCD7AinZFDIePnltx9HHNqBYI
CA8+9vrlGJ8sbTsdb7+0c1REyQcDBv1Q53zWeZaM0yoZSmYVclYo8tzmzGsfKS14
sSXCq6nNAgMBAAECggEABtiZUNls2KZZQUJw5LhmJSDEGrE7pQrDQyDekkGpLOzV
S2l0kozr8ReWHCkZXSMY7ABQQwhuXlYBzP/Z0aBgm3H82ueTB02K8HKyLBkBnXiH
WQfDr2eo3CYW8NcwCU6ZLP6y5uJogtu2ru+slpfz4dLk1eJRSrrvKe/aASl92dkF
Y8UHh2Fw1Vctf/yND/hNiUefKhfwqVhbwOHZnDZ96ww878bHFumxrhBS6+DNFyIN
NrGsHWZ+NUS5/jpRu9kw/TRTtvXQzt18jIfHt9t1awyoxUX0fqtKlWKn2JvjZcP/
5udjY5LT1Jyx80e1LFotCFNYo3SKLNS4ci7047S8gQKBgQDRJ6WSr9DrEjTkRvK4
yUZj+0JEQbNCiZm7cOxNUMLw8OB2lMd5/qNYGKsa1kq0vCpkkLrLN8MVZOIanXIW
ENnZdtvb7/Io4MkS0yIkIIPfhP4YyQRGmkKVn/vBY9meqDj9KVtUiSHl0VebnR3N
4QKjvFK+sOIkOXwG/baKp7SCaQKBgQDIbKQPD6AjU6NZx16gpXXMq9+dTC830cmE
tvO8ye73wNmU6M8/ys7zedAVMtO5XK98/ASHJmhVjhtfSHA0RpxdhcOIizWBquGu
7jvZ9iocos5NZuR9++in9hRsFIiiII9u4PrwVznZJZIdP9mV9Pba7SaRbd0LWOLY
2TZ89XD3xQKBgHukKlb6pFAyZR4Favsd0QTNxbC//g55dW2/JZHXCkaQvsCa1wkh
JMKxYoTs5SDOk2j7vdDgV+zPxHHjXUv6Di5l+zabM9ZCe9srAOXGau65mdRhEKwE
CRSWjKcYNc96tqXBywHAR0+qX1XYnYPVXlAYxfmAa07qxI0FcuGonibxAoGBAILv
rtKEE8tgdcROYnyy+92Fn6YEwohGDtAcMenxRqQnIj6NRfBYD5Gy0AU5WmarrZ4K
iu68Ycca+rjp+xu70aWroM2QnJkkySHeU82Wa3afygV5JedEbn9kXX0qgQTiHrKC
Wo4vfgRl7iobr4uvKKJn8h1qV9F09WZTqaxDMNU9AoGACTw9ZiKtrW+5jS1ucLdl
49gE6QPH3+JnQPqazguLF9OoCOyw69lHdzu/S77Yag4W5M+N8dBCRNF/lOfCbtJc
eIeSFMdJOq97GlsK6QompySHlKlq13u17Jot0x82VPJt1vUuGTrS8qrM5QDKWxZw
skYVITHcfYVzVgxC9JIIKGg=
-----END PRIVATE KEY-----
48 changes: 48 additions & 0 deletions integration_tests/mqtt/server.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCjv7weJ2Y4W13E
jLiKZeuWgiusyOhLV9puQq5yYX0QoafTCVdznrD1fd63DNlXfoK3/Kk8O+0y3IJW
HErh7wR31Wx2gpwcdM+aIGKM0RIrjVf4cU4HyXYUFTeVsBr0SXtKW+0Wi7c+DxfK
xyZU4rUMN+7hpjrFuGwWVNRegTc/zrPQTywQQZ0Lx1EJpqf2hiQYGtJkUVt1RRTr
e14CyUdj0fYwk0GbLZXrnUnXY0kXplb35tM3LCDuCD7AinZFDIePnltx9HHNqBYI
CA8+9vrlGJ8sbTsdb7+0c1REyQcDBv1Q53zWeZaM0yoZSmYVclYo8tzmzGsfKS14
sSXCq6nNAgMBAAECggEABtiZUNls2KZZQUJw5LhmJSDEGrE7pQrDQyDekkGpLOzV
S2l0kozr8ReWHCkZXSMY7ABQQwhuXlYBzP/Z0aBgm3H82ueTB02K8HKyLBkBnXiH
WQfDr2eo3CYW8NcwCU6ZLP6y5uJogtu2ru+slpfz4dLk1eJRSrrvKe/aASl92dkF
Y8UHh2Fw1Vctf/yND/hNiUefKhfwqVhbwOHZnDZ96ww878bHFumxrhBS6+DNFyIN
NrGsHWZ+NUS5/jpRu9kw/TRTtvXQzt18jIfHt9t1awyoxUX0fqtKlWKn2JvjZcP/
5udjY5LT1Jyx80e1LFotCFNYo3SKLNS4ci7047S8gQKBgQDRJ6WSr9DrEjTkRvK4
yUZj+0JEQbNCiZm7cOxNUMLw8OB2lMd5/qNYGKsa1kq0vCpkkLrLN8MVZOIanXIW
ENnZdtvb7/Io4MkS0yIkIIPfhP4YyQRGmkKVn/vBY9meqDj9KVtUiSHl0VebnR3N
4QKjvFK+sOIkOXwG/baKp7SCaQKBgQDIbKQPD6AjU6NZx16gpXXMq9+dTC830cmE
tvO8ye73wNmU6M8/ys7zedAVMtO5XK98/ASHJmhVjhtfSHA0RpxdhcOIizWBquGu
7jvZ9iocos5NZuR9++in9hRsFIiiII9u4PrwVznZJZIdP9mV9Pba7SaRbd0LWOLY
2TZ89XD3xQKBgHukKlb6pFAyZR4Favsd0QTNxbC//g55dW2/JZHXCkaQvsCa1wkh
JMKxYoTs5SDOk2j7vdDgV+zPxHHjXUv6Di5l+zabM9ZCe9srAOXGau65mdRhEKwE
CRSWjKcYNc96tqXBywHAR0+qX1XYnYPVXlAYxfmAa07qxI0FcuGonibxAoGBAILv
rtKEE8tgdcROYnyy+92Fn6YEwohGDtAcMenxRqQnIj6NRfBYD5Gy0AU5WmarrZ4K
iu68Ycca+rjp+xu70aWroM2QnJkkySHeU82Wa3afygV5JedEbn9kXX0qgQTiHrKC
Wo4vfgRl7iobr4uvKKJn8h1qV9F09WZTqaxDMNU9AoGACTw9ZiKtrW+5jS1ucLdl
49gE6QPH3+JnQPqazguLF9OoCOyw69lHdzu/S77Yag4W5M+N8dBCRNF/lOfCbtJc
eIeSFMdJOq97GlsK6QompySHlKlq13u17Jot0x82VPJt1vUuGTrS8qrM5QDKWxZw
skYVITHcfYVzVgxC9JIIKGg=
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDOzCCAiOgAwIBAgIUS+JTI5jiO1C0AgqSuFgB1P9wS8swDQYJKoZIhvcNAQEL
BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAgFw0yNDA5MjUwMzIwNTNaGA8yMDUy
MDIxMDAzMjA1M1owRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx
ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAKO/vB4nZjhbXcSMuIpl65aCK6zI6EtX2m5CrnJh
fRChp9MJV3OesPV93rcM2Vd+grf8qTw77TLcglYcSuHvBHfVbHaCnBx0z5ogYozR
EiuNV/hxTgfJdhQVN5WwGvRJe0pb7RaLtz4PF8rHJlTitQw37uGmOsW4bBZU1F6B
Nz/Os9BPLBBBnQvHUQmmp/aGJBga0mRRW3VFFOt7XgLJR2PR9jCTQZstleudSddj
SRemVvfm0zcsIO4IPsCKdkUMh4+eW3H0cc2oFggIDz72+uUYnyxtOx1vv7RzVETJ
BwMG/VDnfNZ5lozTKhlKZhVyVijy3ObMax8pLXixJcKrqc0CAwEAAaMhMB8wHQYD
VR0OBBYEFP6DHoFBdNVmHwc6LZnLwcDcKnvzMA0GCSqGSIb3DQEBCwUAA4IBAQA9
VRDbEAFWmqKq+LPRqGmjiqGE0rTOsoKSDWn0Zsre31H2vsXy8BUW69rjhwMXEONl
5ybZCHnU8GLawFzrVQJnuV77XhIDuJhIz81guy0K872YcrNuhlIS7ahxXJszwgPe
Tp313rJKUA44DIuF18WjWjwQL8bU80xiJJcyuR2mViOFgcfIABmSzvvMx8nHxp7W
C9woea6TMamq7GQmIky9ZVy7OcfOSCygK0TU6Y2qNcIuKl4xtvY07msGFLifXp6s
A9A4aS610tqPNInh5zokI2m/y7nvCq7BA9n+5HvMKJcxW2G+AU7R7IFJctsPL07g
1MDuvzVplpxKk3tkj8Ou
-----END CERTIFICATE-----
27 changes: 27 additions & 0 deletions integration_tests/mqtt/setup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/env bash

echo "mqtt/setup: Tests setup for mqtt"

CONTAINER_TAG="eclipse-mosquitto"
CONTAINER_NAME="zgrab_mqtt"

# If the container is already running, use it.
if docker ps --filter "name=$CONTAINER_NAME" | grep -q $CONTAINER_NAME; then
echo "mqtt/setup: Container $CONTAINER_NAME already running -- nothing to setup"
exit 0
fi

DOCKER_RUN_FLAGS="--rm --name $CONTAINER_NAME -td -v ./mosquitto.conf:/mosquitto/config/mosquitto.conf -v ./server.pem:/mosquitto/server.pem -v ./server.key:/mosquitto/server.key"

# If it is not running, try launching it -- on success, use that.
echo "mqtt/setup: Trying to launch $CONTAINER_NAME..."
if ! docker run $DOCKER_RUN_FLAGS $CONTAINER_TAG; then
echo "eclipse-mosquitto launch fail"

#echo "mqtt/setup: Building docker image $CONTAINER_TAG..."
# If it fails, build it from ./container/Dockerfile
#docker build -t $CONTAINER_TAG ./container
# Try again
#echo "mqtt/setup: Launching $CONTAINER_NAME..."
#docker run $DOCKER_RUN_FLAGS $CONTAINER_TAG
fi
31 changes: 31 additions & 0 deletions integration_tests/mqtt/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env bash

set -e
MODULE_DIR=$(dirname $0)
ZGRAB_ROOT=$(git rev-parse --show-toplevel)
ZGRAB_OUTPUT=$ZGRAB_ROOT/zgrab-output

mkdir -p $ZGRAB_OUTPUT/mqtt

CONTAINER_NAME=zgrab_mqtt

OUTPUT_FILE=$ZGRAB_OUTPUT/mqtt/mqtt.json

echo "mqtt/test: Tests runner for mqtt"
# TODO FIXME: Add any necessary flags or additional tests
# echo -e ",target,mqtt
# ,target,mqtt-tls
# ,target,mqtt-v5
# ,target,mqtt-tls-v5" | docker run --rm -i -v ./multiple.ini:/multiple.ini --link $CONTAINER_NAME:target zgrab2_runner multiple -c /multiple.ini> $OUTPUT_FILE
#CONTAINER_NAME=$CONTAINER_NAME $ZGRAB_ROOT/docker-runner/docker-run.sh mqtt --v5 >> $OUTPUT_FILE
CONTAINER_NAME=$CONTAINER_NAME $ZGRAB_ROOT/docker-runner/docker-run.sh mqtt > $ZGRAB_OUTPUT/mqtt/default.json
CONTAINER_NAME=$CONTAINER_NAME $ZGRAB_ROOT/docker-runner/docker-run.sh mqtt --v5 > $ZGRAB_OUTPUT/mqtt/mqtt_v5.json
CONTAINER_NAME=$CONTAINER_NAME $ZGRAB_ROOT/docker-runner/docker-run.sh mqtt --tls -p 8883 > $ZGRAB_OUTPUT/mqtt/mqtt_tls.json
CONTAINER_NAME=$CONTAINER_NAME $ZGRAB_ROOT/docker-runner/docker-run.sh mqtt --tls --v5 -p 8883 > $ZGRAB_OUTPUT/mqtt/mqtt_tls_v5.json

# Dump the docker logs
echo "mqtt/test: BEGIN docker logs from $CONTAINER_NAME [{("
docker logs --tail all $CONTAINER_NAME
echo ")}] END docker logs from $CONTAINER_NAME"

# TODO: If there are any other relevant log files, dump those to stdout here.
7 changes: 7 additions & 0 deletions modules/mqtt.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package modules

import "github.com/zmap/zgrab2/modules/mqtt"

func init() {
mqtt.RegisterModule()
}
Loading

0 comments on commit 00852fd

Please sign in to comment.