Auteur Sujet: Reverse Engineering : Nouveau système de génération de l'option 90 DHCP  (Lu 218278 fois)

0 Membres et 1 Invité sur ce sujet

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 96
Cacking: Nouveau système de génération de l'option 90 DHCP
« Réponse #60 le: 29 septembre 2018 à 12:50:28 »
Hello,

Tout d'abord, merci à tous pour ces informations qui m'ont permis de rapidement rétablir ma connexion :)

Petit pinaillage technique cela dit :
  • D'abord, il y a cette séquence d'octets définie en dur dans le binaire, je ne sais pas à quoi elle correspond : 1a0900000558010341 (1a est donc le type et 09 la taille)
  • Ensuite, un autre champ fixe dont la valeur est "A", peut-être une version de format... : 010341 (01 est le type, 03 est la taille, 41 est la valeur "A" en ASCII)
Cet "autre champ fixe dont la valeur est A" n'existe pas... ce 010341 fait partie de la valeur du champ précédent 1a0900000558010341 -- je crois que tu t'es emmêlé les pinceaux.
« Modifié: 29 septembre 2018 à 13:16:48 par xavierg »

twistdi

  • Abonné Orange Fibre
  • *
  • Messages: 23
Reverse Engineering : Nouveau système de génération de l'option 90 DHCP
« Réponse #61 le: 29 septembre 2018 à 15:35:12 »
Bonjour les jeunes

Depuis le changement de la chaîne, j'ai bien retrouvé internet mais pas la TV ni le téléphone. Je suis sur ERL3, dernier firmware avec la config livebox en support pour le téléphone et en ipV4.

Merci pour votre aide.

schusss

Hello,

Je me réponds à moi-même, j'avais modifié la chaîne longue aussi sur la partie téléphonie. Bizarre que l'identification ne soit pas la même sur les 2 branches.
Du coup, ça fonctionne nickel pour tout.

Merci encore.

Schusss

obinou

  • AS197422 Tetaneutral.net
  • Expert
  • *
  • Messages: 1 668
  • Montgesty (46150)
    • Tetaneutral.net
Reverse Engineering : Nouveau système de génération de l'option 90 DHCP
« Réponse #62 le: 29 septembre 2018 à 16:14:27 »
Mon authentification DHCP avec la chaîne courte (juste le "fti/xxx") a arrêté de fonctionner samedi 28 septembre à 8h10. J'ai généré une chaîne longue à partir de mon mot de passe, d'une chaine aléatoire de 16 octets et du hash MD5 et j'ai réussi à me connecter du premier coup en IPv4 et IPv6 depuis mon routeur Turris Omnia !


Bon, ben j'y ai eu droit ce ce matin, ce qui m'a valu un déplacement sur site. heureusement, j'avais mis la nouvelle conf préparée en commentaire...

Par contre, chez moi, la chaîne complète n'a PAS marché, j'ai dû remplacer

     option sendopts '0x4d:2b...33 0x5a:0000000000000000000000xxxxxxxxxxxxxxxxxxxxxx'

par

     option sendopts '0x4d:2b...33 0x5a:00000000000000000000001a0900000558010341010dxxxxxxxxxxxxxxxxxxxxxx'  .

Ca a marché sur le DGA4130.



La chaine complète avait été crée ainsi : (Je vous rassure j'ai changé login & mot de passe & mac ci-dessous )

#  Option 77 (0x4D) : 2b46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e4c697665626f7833 (valeur fixe ?)

#  Option 90 (0x5A) : Suite de champs <type><taille><data> , la taille incluant les data + les 2 octets de type et taille:   
#    0000000000000000000000 (valeur fixe) + 1a0900000558010341 (valeur fixe)  +                                                                                                               
#    010d + (username ppp avec  le fti/ sur 11 caracteres)  +                                                                                                                                 
#    3c12XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (ou les XX sont 16 octets aléatoire <RANDSTRING>) +                               
#    0313YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY (ou les YY sont une valeur calculée ainsi :  1 octet aléatoire <RANDCHAR>                                                                         
#                                           + hash MD5 de (RANDCHAR + PASSWORD + RANDSTRING), PASSWORD étant le pass ppp)                                                                   
#  Option 61 (0x3D) :01ZZZZZZZZZZZZ' ou les ZZ sont l'adresse MAC de la box.                                                                                                               
                                                                                                                                                                                             
#   username PPP  = fti/2222222
#   password PPP   = aaaaaaa
#                mac      = 58:92:44:E9:A0:22
#
#  Ce qui donne : (avec RANDCHAR = 'e' et RANDSTRING = 'f5y6n8e8u9spe8p9')
#                                                                                                                                                                                             

option sendopts '0x4d:2b46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e4c697665626f7833 \
0x5d:0x5a:00000000000000000000001a0900000558010341010d6674692f323232323232323c12663579366e386538753973706538703903136565 64373833663538373832666461316139393731386661323331663435353362\
0x3d:01589244e9a022

Et.... échec total , pas d'IP.

Pour calculer la valeur à placer dans 0313 , j'ai fait ainsi :
J'ai créé un fichier avec le contenu "eaaaaaaaf5y6n8e8u9spe8p9" (sans le 0x0a à la fin), puis :
     md5sum <fichier> | hexdump -C
Et j'ai pris les valeurs en hexa.

Ce que je comprends pas c'est que le préfixe 0313 implique d'avoir 17 octets : Le randchar + 16 octets de MD5 . Mais chez moi md5sum me donne 32 octets, pas 16...


Dans l'urgence j'ai remis la conf qui marchait (15 personnes étaient coupées , quand même) mais je compte me re-pencher sur la question et , pourquoi pas, faire un petit script qui calcule & affiche les valeurs.

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 96
Reverse Engineering : Nouveau système de génération de l'option 90 DHCP
« Réponse #63 le: 29 septembre 2018 à 16:24:37 »
Ce que je comprends pas c'est que le préfixe 0313 implique d'avoir 17 octets : Le randchar + 16 octets de MD5 . Mais chez moi md5sum me donne 32 octets, pas 16...
Un hash MD5 c'est 128 bits soit 16 bytes de 8 bits (un octet donc). Pour représenter un octet, il faut deux caractères hexa (0-9a-f); md5sum te donne 32 octets car il te donne 32 caractères hexa pour représenter ces 16 octets de données.

Si ça peut aider, j'utilise Python (SaltStack en fait) pour générer ma configuration DHCP ; voici les fonctions que j'utilise actuellement :
import os
import hashlib

def ord_chain(string, format = '%02x', delimiter = ':'):
    result = []
    for char in string:
        try:
            value = ord(char)
        except TypeError:
            value = char
        result.append(format % value)
    return delimiter.join(result)

def make_salt(length=16):
    return os.urandom(length)

def make_orange_hash(salt, password, byte=None):
    random_byte = os.urandom(1) if byte is None else byte
    md5_hasher = hashlib.md5()
    md5_hasher.update(random_byte)
    md5_hasher.update(password)
    md5_hasher.update(salt)
    return random_byte + md5_hasher.digest()

if __name__ == '__main__':
    # Test the "make_salt" function:
    print(ord_chain(make_salt(10)))
    # Test the "make_orange_hash" function:
    print(ord_chain(make_orange_hash('saltsaltsaltsalt', '_password', 'a')))

obinou

  • AS197422 Tetaneutral.net
  • Expert
  • *
  • Messages: 1 668
  • Montgesty (46150)
    • Tetaneutral.net
Reverse Engineering : Nouveau système de génération de l'option 90 DHCP
« Réponse #64 le: 29 septembre 2018 à 16:29:05 »
Un hash MD5 c'est 128 bits soit 16 bytes de 8 bits (un octet donc). Pour représenter un octet, il faut deux caractères hexa (0-9a-f); md5sum te donne 32 octets car il te donne 32 caractères hexa pour représenter ces 16 octets de données.

OK , donc j'ai fait de la merde :-) D'un coté ça rassure.

Mais ca veux dire au moins qu'Orange valide un minimum les champs.

alarig

  • AS204092 Association Grifon
  • Expert
  • *
  • Messages: 113
    • SwordArMor
Reverse Engineering : Nouveau système de génération de l'option 90 DHCP
« Réponse #65 le: 29 septembre 2018 à 16:41:57 »
Donc là, on a pas de réponse DHCP si on met pas le bon passwd, mais on en a une si on en met pas ? (ou j’ai raté un truc ?)

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 96
Reverse Engineering : Nouveau système de génération de l'option 90 DHCP
« Réponse #66 le: 29 septembre 2018 à 17:37:44 »
Donc là, on a pas de réponse DHCP si on met pas le bon passwd, mais on en a une si on en met pas ? (ou j’ai raté un truc ?)
Le mot de passe (champs salt 0x3c et hash 0x03) n'est pour le moment pas vérifié. Mais envoyer des champs avec des données non cohérentes (par exemple plus ou moins de données que ne l'indique la taille d'un champ) est généralement un bon moyen de voir ses requêtes DHCP purement et simplement ignorées.

obinou

  • AS197422 Tetaneutral.net
  • Expert
  • *
  • Messages: 1 668
  • Montgesty (46150)
    • Tetaneutral.net
Reverse Engineering : Nouveau système de génération de l'option 90 DHCP
« Réponse #67 le: 29 septembre 2018 à 17:45:19 »
Donc là, on a pas de réponse DHCP si on met pas le bon passwd, mais on en a une si on en met pas ? (ou j’ai raté un truc ?)

Je pense que xavier a raison : C'est pas tellement le mot de passe faux que le champ syntaxiquement incorrect qui a provoqué le rejet.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Reverse Engineering : Nouveau système de génération de l'option 90 DHCP
« Réponse #68 le: 29 septembre 2018 à 18:28:09 »
j'ai fait un générateur a la vite : https://jsfiddle.net/kgersen/3mnsc6wy/embedded/result/

C'est surement pas au point et je ne suis plus chez Orange pour tester. n’hésitez pas a le corriger et repartager.

mirtouf

  • Abonné Bbox fibre
  • *
  • Messages: 1 304
  • Chelles (77)
    • L'antre de la bête
Reverse Engineering : Nouveau système de génération de l'option 90 DHCP
« Réponse #69 le: 29 septembre 2018 à 18:38:49 »
Ya un bug avec https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js
ReferenceError: CryptoJS is not defined

zoc

  • Abonné Orange Fibre
  • *
  • Messages: 4 283
  • Antibes (06) / Mercury (73)
Reverse Engineering : Nouveau système de génération de l'option 90 DHCP
« Réponse #70 le: 29 septembre 2018 à 18:47:13 »
Ma contribution en bash avec un minimum de dépendances (dd+ md5sum + sed + cut), basé sur le script de @bob62 sur le tuto pour dd-wrt (mais je ne suis pas d'accord avec son implèmentation :P ). Pas testé mais ça devrait être bon...

#!/bin/bash

login='fti/abcdefg'
pass='hijklmn'

tohex() {
  for h in $(echo $1 | sed "s/\(.\)/\1 /g"); do printf %02x \'$h; done
}

addsep() {
  echo $(echo $1 | sed "s/\(.\)\(.\)/:\1\2/g")
}

r=$(dd if=/dev/urandom bs=1k count=1 2>&1 | md5sum | cut -c1-16)
id=${r:0:1}
h=3C12$(tohex ${r})0313$(tohex ${id})$(echo -n ${id}${pass}${r} | md5sum | cut -c1-32)

echo 00:00:00:00:00:00:00:00:00:00:00:1A:09:00:00:05:58:01:03:41:01:0D$(addsep $(tohex ${login})${h})
« Modifié: 29 septembre 2018 à 19:19:59 par zoc »

zoc

  • Abonné Orange Fibre
  • *
  • Messages: 4 283
  • Antibes (06) / Mercury (73)
Reverse Engineering : Nouveau système de génération de l'option 90 DHCP
« Réponse #71 le: 29 septembre 2018 à 18:48:40 »
@hoyohoyo toutes tes chaines font la même longueur...

C'est juste que le forum utilise une police proportionnelle...