View Single Post
Old 23-06-2019, 14:09   #675
andreacos92
Member
 
Iscritto dal: Nov 2007
Messaggi: 293
Decriptare informazioni VoIP/password supervisor con nuovi firmware

[Preambolo]
Come saprete, con l'introduzione della nuova interfaccia grafica dei nuovi firmware, Zyxel ci ha regalato anche pagine criptate laddove prima si poteva leggere tutto in chiaro.

Mi riferisco soprattutto alle pagine per visualizzare le informazioni relative al VoIP (in particolare la password altrimenti illeggibile) che si raggiunge da
Codice:
http://192.168.1.1/cgi-bin/SIP?oid=RDM_OID_VOICE_LINE_SIP
E mi riferisco anche alla pagina che contiene le informazioni sulle password, utile per visualizzare le password di default generate dallo specifico firmware che abbiamo caricato in quel momento, a prescindere da quali siano le attuali password funzionanti, che possono essere state cambiate da noi precedentemente in firmware precedenti all'aggiornamento, o salvate su ROM-D. La pagina si raggiunge da
Codice:
http://192.168.1.1/cgi-bin/login?oid=RDM_OID_ZY_LOG_CFG_GP_ACCOUNT
Entrambe vanno aperte in un altro tab del browser dopo essersi loggati, per la prima basta loggarsi come admin, per la seconda serve accedere già come supervisor.

Con i nuovi firmware le suddette pagine non visualizzano più i dati in chiaro, ma delle stringhe alfanumeriche apparentemente incomprensibili, che il buon @Yramrag è però riuscito a decriptare. I crediti per il metodo vanno tutti a lui, da qui in avanti mi limito a riportare i passaggi per la decriptazione in ambiente Windows, in modo (spero) abbastanza chiaro e semplificato.
[/Preambolo]

Metodo testato su firmware no brand V5.13(ABNY.2)C0.
Funziona anche per il VMG8823-B50B, firmware V5.13(ABEJ.5)C0, mini-guida originale qui.
Nell'esempio pratico di seguito faccio riferimento alla pagina dei dati del VoIP, loggandomi con admin. É importante che una volta loggati, non scada la sessione, quindi o modificate il valore di Idle Timeout dell'utente oppure utilizzate il workaround di aprire la pagina delle statistiche xDSL e di impostare un Refresh Interval in modo da far aggiornare la pagina in automatico ogni tot secondi. Ovviamente lasciate questo tab sempre aperto e dimenticatevelo per il momento.

In un altro tab del browser apriamo l'indirizzo
Codice:
http://192.168.1.1/cgi-bin/SIP?oid=RDM_OID_VOICE_LINE_SIP
e ci apparirà il nostro bel contenuto criptato, qualcosa del tipo
Codice:
{
   "content": "+\/dpLj3cz2BzYiBxdEuxyeZExJBfnkxE3ZK5ycYPKWMOadXXgwsuQfvu1f3kM0THYyqbWpb\/dKzzWMWDRGXuhswR9osS87q0hn3u09xlQsDtRheTQxHrSlv\/lSVNkAL2QDJ+ZHIv6UH5dhGZBzwxLwGW7kOI+MhJRTvDFzKHrrBdBVodqkcD\/e\/2qmUdlQN6rdWY6EjNsgzpL\/EzPDuMK7eiQ3ybDy60HvMbmz2sFToRkzgkANoWG2h2uYWowA451+Kc\/VbEp1MEg\/rZuKOSf0amRIuWlDS2qqtYdi7SKUUyXQuCiERymQI8jvO46dsaDXZUwSt\/EiHXy5r6yooZNIOIFvK+aPuQ5MQrsI1rSjyAZ5dzfrCLsyMyod2EaSmg5vkMzCSovdlQB7I6VG4itolku+2GFS8NFaHEH4My4HFoKsCqSUwzv6nVAbK6HvsyYGBg2T2OBP+XJwnC086LNCEAITzUD+DT6H1vWq4gMhAI5ALnUzaoeWQHOAJ4XUgNGGp0JqB2XeRqjY2yq6Gs8jE+f7v+Qhhouq8\/61XAiUMz4FmRMDDZWMUgVPtGcZqTz+ukIckNRPjIrcW9PyBFaQLoELFB1p2\/QwBVbfgm+9TurLuj33Su8h+gFqNEeUNtHbk1O76rkM20a+bs6\/sthguuRaYOetirmrMqWF6E4jIxxUAQPtX3qtGE55u03GH8MFTLc1u5N24+n4bVlcRWEv2fpyVeaBFyuu2yqn9yBHOOpxa5hk4kYnVT8ohAhVxNWTWO5l1\/kJF2UZEY2DuPp1SE0\/uFprZn2AlnMZ4UOoK1O7wY4xPJtTh\/dZ3zTkwpIUjMnUCxDWWAAqaHPXISOLtqV9qF9LQnT5azNo6jcZCps0dW1KEgt6CBaGqstGz+XRppqQSYnLfvXFs5snLkrvnebWUlk0HGpXBOv7aR7dhwxMd12g5p2Mm0H5JsK6PsSq\/XMxMEMvPmqSN30ery5XcoUKSh6hTYeG\/aJ1o9\/lvlKAubY+++Qus6RTjGCukrTDdcyNCXYs9Zkk73RRLbCYEU12puJBrPwYJn9Oa85rAQExOs1FmH0ig55EnXd+I4HdAzBxY1e3YlcpOK7CYBwH30X\/rUraRi\/2rCoVr3D1lCY5KafHSacWuD0ZZjhFnH+u5K+ZPJhocfgEl1qmltFEDbTT0y\/35mJTnaUBvzjq287g1HjVgdBV7LvPIryxsPRBWxy9KwjwXdwRr9e1YnW+rzfjdBHSktFB+OcOrcyIcMtUXXKXfRD6aTebUL9pPCkDTv5BMxHIC6uaN6m\/3mJniDx5PW3dzMZkP42i6WUljed6k8ci2NoaYy3JiLT2zvFpG3rB1iJIOkL54o0gXpAF84hh8DL2fFPg0+JJObXzos\/svu0OiyGvNolPQseZRo1M8uHyMlBdVxHNew9hQLFGx+85aynP2iYlm9\/xA5OjPOZgl7T2+JLjD2uHUjRtJAwUJWHPvXP0PMxcD3Fc5tl65LArkOeZEHsDoleNURrVa\/9gvUmaQ==",
   "iv": "x0SZURKGbFoD5RwEvFyAV5AnNrdfXFTEoSZ\/d3DnHzg="
 }
Il content è il "contenuto", ovvero i dati che dobbiamo effettivamente decriptare, IV sta invece per "Initialization Vector" (giusto per dare un nome a cose apparentemente senza senso ).
Anche se fate un refresh di questa pagina, le stringhe criptate cambiano ma il risultato finale decriptato non cambia, finchè rimanete loggati.

Per prima cosa ci serve trovare l'AesKey, che è la "chiave" utilizzata per decriptare la robaccia sopra. Si trova facilmente dai cooke di Chrome mentre siete su una pagina dell'interfaccia del router (Tasto F12 - DevTools / Application / Storage / Local Storage / http://192.168.1.1 -> AesKey)



Copiate la AesKey
Codice:
J50syoOSyDeiFAgMupiBNmcerv/hxSp47RbW15yWJSA=
Essa va convertita da base64 ad esadecimale, e prima di farlo togliete gli eventuali caratteri "\" (da notare la direzione, e da non confondere "\" con "/"). Fatelo anche "a mano" se ci sono, tanto la stringa è corta. Nel mio caso non ce ne sono.
Per convertirla ho usato un convertitore online, questo per la precisione, e il risultato della mia stringa convertita in esadecimale sarà
Codice:
279d2cca8392c837a214080cba988136671eaeffe1c52a78ed16d6d79c962520
Questa è la AesKey "finita", devono essere 64 caratteri. Copiatela da qualche parte, va benissimo un .txt provvisorio.
Se volete, potete fare un check del numero di caratteri qui.


Ora passiamo al "trattamento" dell'IV (Initialization Vector).
Anche esso fa depurato dei "\" (anche qui, fate prima a fare a mano, vista l'esigua lunghezza) e poi convertito con il solito convertitore online da base64 a esadecimale.
Otteniamo qualcosa del tipo
Codice:
c744995112866c5a03e51c04bc5c8057902736b75f5c54c4a1267f7770e71f38
Che è sempre da 64 caratteri, controllate come sopra se volete. Di questi 64 ce ne servono solo i primi 32, ovvero esattamente la prima metà.
Ora, o piazzate il cursore alla fine della stringa ed eliminate gli ultimi 32 uno per uno, oppure copiate l'intera stringa da 64 su un file .txt (il classico Blocco Note di Windows) all'inizio di una riga e mettete il cursore in modo che sotto a destra vi esca "Linea x, colonna 33" e poi date Invio. Dovreste aver diviso la stringa in esattamente due metà, a noi serve la prima, che sarà quindi
Codice:
c744995112866c5a03e51c04bc5c8057
Questo è l'IV finale che useremo in seguito, anche qui tenetelo da parte.


Ci rimane solo il content.
Copio tutta la parte in blu (quindi escluse le virgolette " " a inizio e fine) e la incollo in un file .txt nuovo (non usate quello di prima).
Mettete il cursore all'inizio della stringa, prima del primo carattere, e cliccate su Modifica -> Sostituisci, nella casella Trova inserite il carattere "\", mentre nella casella successiva lasciate vuoto, e premete su Sostituisci tutto



Avremo così eliminato tutti i "\" dalla nostra stringa.
(Fortunatamente abbiamo già finito, e non serve dividerla a metà o metterla su righe da 64 caratteri come andrebbe fatto normalmente per una decodifica con OpenSSL, grazie ad un parametro che inseriremo poi in riga di comando.)
Salviamo questo file .txt come content.b64, quindi modificandone l'estensione (non deve essere un .txt).


Abbiamo adesso tutti gli input in ingresso per il software di decodifica, che sarà openSSL.
Il codice è open source, ma ufficialmente non ci sono binari eseguibili per Windows. Fortunatamente, ufficiosamente esistono e si possono scaricare da questa pagina.
Ammetto di essere andato un po' a caso anche io nella versione da scaricare, vi metto quindi il link diretto della versione esatta che ho utilizzato io: win64.
Se qualcuno ha ancora una SO a 32 bit, dovrebbe essere questa (non provata) win32.

Scaricate lo .zip ed estraetelo sul Desktop, per facilità rinonimate la cartella estratta in "openssl". Mettete all'interno della cartella anche il nostro file content.b64 creato prima, deve trovarsi nella stessa directory del file eseguibile openssl.exe.

Aprite ora il Prompt dei comandi e cambiate la directory spostandovi nella cartella appena estratta, dovreste inserire qualcosa del tipo
Codice:
cd C:\Users\Andrea\Desktop\openssl
e dare Invio nel prompt.

Se vi siete spostati nella nuova directory senza problemi, rimane ora da dare il comando magico
Codice:
openssl enc -aes-256-cbc -d -base64 -A -iv c744995112866c5a03e51c04bc5c8057 -K 279d2cca8392c837a214080cba988136671eaeffe1c52a78ed16d6d79c962520 -in content.b64 -out content.decoded
e dare Invio. Ovviamente sostituite IV e AesKey con quelli da voi trovati precedentemente.
Se il tutto va senza errori, il prompt non restituisce nessun messaggio di output, ma nella cartella openssl dovreste ritrovarvi il file content.decoded, che potremo aprire con Blocco Note o WordPad, e nel quale troveremo tutto il contenuto decifrato che nei firmware precedenti era direttamente leggibile in chiaro


Si può fare la stessa cosa per vedere le password di default, loggandosi come supervisor come detto a inizio post (un paio d'ore fa praticamente ).

Ringrazio ancora @Yramrag, sia per trovato questo metodo, sia per avermi seguito in privato per poterlo riprodurre anche per noi comuni mortali


EDIT:
Boh mi è uscita quasi più lunga questa che la guida alla sbrandizzazione
Mi chiedo se io sia solo inutilmente prolisso oppure anche esaustivo e dettagliato
Io, nel dubbio, mi bannerei per indotta sonnolenza

Ultima modifica di andreacos92 : 23-06-2019 alle 14:39.
andreacos92 è offline   Rispondi citando il messaggio o parte di esso