Files
fortra-impacket/examples/mqtt_check.py
T
Gabriel Gonzalez ae0ec300f8 Techdebt examples bootstrapping v2 (#1928)
* Standardized examples logger init method

* Fixing missing import

* Standardized examples init_ldap_session function #1

* Calling new shared function _ldap3_kerberos_login from example addcomputer

* Removed considering -debug in each example. Now it's handled in utils.

* Standardized EMPTY_LM_HASH in impacket.examples.utils

* Unify parse_identity function (phase 1)

* Standardized parse_identity

* Renamed "_ldap3_kerberos_login" to "ldap3_kerberos_login" (as it is called from outside)

* Standardize "logger" init in regsecrets.py

* Standardized LDAP login into a single function in utils.py:ldap_login
2025-03-26 22:58:39 -03:00

87 lines
2.8 KiB
Python
Executable File

#!/usr/bin/env python
# Impacket - Collection of Python classes for working with network protocols.
#
# Copyright Fortra, LLC and its affiliated companies
#
# All rights reserved.
#
# This software is provided under a slightly modified version
# of the Apache Software License. See the accompanying LICENSE file
# for more information.
#
# Description:
# Simple MQTT example aimed at playing with different login options. Can be converted into a account/password
# brute forcer quite easily.
#
# Author:
# Alberto Solino (@agsolino)
#
# Reference for:
# MQTT and Structure
#
from __future__ import print_function
import argparse
import logging
import sys
from impacket import version
from impacket.examples import logger
from impacket.examples.utils import parse_target
from impacket.mqtt import CONNECT_ACK_ERROR_MSGS, MQTTConnection
class MQTT_LOGIN:
def __init__(self, username, password, target, options):
self._options = options
self._username = username
self._password = password
self._target = target
if self._username == '':
self._username = None
def run(self):
mqtt = MQTTConnection(self._target, int(self._options.port), self._options.ssl)
if self._options.client_id is None:
clientId = ' '
else:
clientId = self._options.client_id
mqtt.connect(clientId, self._username, self._password)
logging.info(CONNECT_ACK_ERROR_MSGS[0])
if __name__ == '__main__':
print(version.BANNER)
parser = argparse.ArgumentParser(add_help=False,
description="MQTT login check")
parser.add_argument("--help", action="help", help='show this help message and exit')
parser.add_argument('target', action='store', help='[[domain/]username[:password]@]<targetName>')
parser.add_argument('-client-id', action='store', help='Client ID used when authenticating (default random)')
parser.add_argument('-ssl', action='store_true', help='turn SSL on')
parser.add_argument('-port', action='store', default='1883', help='port to connect to (default 1883)')
parser.add_argument('-debug', action='store_true', help='Turn DEBUG output ON')
parser.add_argument('-ts', action='store_true', help='Adds timestamp to every logging output')
try:
options = parser.parse_args()
except Exception as e:
logging.error(str(e))
sys.exit(1)
# Init the example's logger theme
logger.init(options.ts, options.debug)
domain, username, password, address = parse_target(options.target)
check_mqtt = MQTT_LOGIN(username, password, address, options)
try:
check_mqtt.run()
except Exception as e:
if logging.getLogger().level == logging.DEBUG:
import traceback
traceback.print_exc()
logging.error(e)