Password encoding

 ( martonmiklos | 2015. július 31., péntek - 12:09 )

Van egy Fisotech 16 960H DVR-ünk aminek az IP alapú képességeivel nem vagyok teljesen megelégedve.

A webes felülete activeX-ben van megírva. 64 biten nem működik sem a webes sem a standalone kliens.

Elkezdtem revengelni a protokollt, h.264-et tol ki, amit az mplayer visz ügyesen átpipolva.

Más is csinált már ilyet egy másfajta DVR-hez:
http://tanidvr.sourceforge.net/

Ha már szívtam vele sokat akkor megcsinálnám normálisan mint a fenti programot.

Egy problémám van: a jelszó nem plaintextben utazik az authentikáció során a DVR felé, hanem valahogy enkódolva, amit nem ismerek.
Kipróbáltam 3 féle jelszóval amikre az alábbi hasheket küldte:


Jelszó 123456789:
80 c2 28 e7 47 96 f8 33 68 a9 12 c1 4a 93 eb ea

Jelszó 123456
96 ab f6 de 40 aa 36 44 d7 16 ea 49 82 73 c2 11

Jelszó 12345
fc ef bc 94 21 e8 7e 1e d7 16 ea 49 82 73 c2 11

Nem vagyok expert a szakmában, de hátha valaki ránézésre vágja, hogy milyen kódolás ez.

Ha van valami ötletetek esetleg, akár a kliensprogram revengelésére (valószínűleg .NET-ben írták, legalábbis .NET-es DLL-ek vannak a mappájában) akkor azt is szívesen veszem.

Köszi!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Hossz alapjan md5nek tunik, lehet, hogy saltolva van valami fixxel.

--
|8]

Ha .NET, ezzel nézz bele: https://www.jetbrains.com/decompiler/

+1

Ha nincs kimondottan obfuszkálva, akkor meglepően könnyű kiolvasni a különféle algoritmusokat.

Továbbá még ez is egy lehetséges alternatíva: http://ilspy.net/

Köszi mindkét linket, beszámolok mire jutok vele.

Na a .NET-el mellélőttem. Van egy keygen.dll amiből többek közt az alábbi stringek kerültek elő:

D:\HoneyWell\RSDvrClient\Safe\Release\Keygen.pdb


  
    
      
        
      
    
  
  
    
      
    
  


A dotPeek szerint nem támogatott az ilSpy szerint pedig nem tartalmaz managed assemblyket.

Ez a pdb fájl, meg ez az assemblyinfos XML .NET-es cuccok felől rémlett, de úgy tűnik luftot rugtam vele.

a két utolsó sor annyira hasonlít (hacsak nem téves), hogy ez nem lehet valamilyen 'professzionális' algoritmus

Bizony elég nyanús, hogy inkább valamilyen karaktercserés trükk lesz, valamilyen alap sztringhez képest.

Mindenesetre elkezdeném - ha hagyja - azonos karakterekből álló jelszavakkal vallatni.

Ahhoz nem kell feltétlenül karaktercserés, az LM hash-nél 7 karakter alatt ugyanígy megegyezne a felső fele:

12345  AEBD4DE384C7EC43 AAD3B435B51404EE
123456 44EFCE164AB921CA AAD3B435B51404EE

Szerk.: rosszul mondtam, 8 karakter alatt (a 7-es még az első felébe megy)

12345    AEBD4DE384C7EC43 AAD3B435B51404EE
123456   44EFCE164AB921CA AAD3B435B51404EE
1234567  0182BD0BD4444BF8 AAD3B435B51404EE
12345678 0182BD0BD4444BF8 36077A718CCDF409
76543218 9EE0D521C88B2C76 36077A718CCDF409

Szerk 2.: Rejtett subscribe, mert érdekel

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Jogos - az LM is jó példa NevemTeve nem professzionális algoritmusára, még ha masszivabb is, mint a sufnis bitaritmetikázás.

Az újabb hsz-ek fényében azt mondanám, hogy 64-bit a blokkméret, viszont akkor ez nem annyira hash, hanem... hanem bármiféle kódolás, ami 64-bitenként működik

Ezeket is megadnád?

- 123457
- 123456780
- a legrövidebb valid jelszó?

Köszi!

--
Debian Linux rulez... :D

Holnap megvallatom. 0 hosszú jelszót nem enged azt tudom mert azt már próbáltam.

subs

Első körben ha ezeket megadnád kódolva, az segítene:

@, @@, @@@, @@@@, @@@@@, @@@@@@, @@@@@@@, @@@@@@@@
A, AA, AAA, AAAA, AAAAA, AAAAAA, AAAAAAA, AAAAAAAA
BBBBBBBB, CCCCCCCC, BBBBCCCC, CCCCBBBB, BBCCBBCC, CCBBCCBB, BCBCBCBC, CBCBCBCB

--

Holnap rápróbálok. Nem ígérem, hogy mindet végigpróbálom, mert csak képernyőbillentyűzeten lehet a gépen jelszót átütni, így kissé körülményes a próbálkozás.

Ha ez csak egy hash es a DVR nem akarja visszakodolni, csak osszehasonlitani egy letarolt ertekkel, akkor nem mukodne az, hogy sajat kliensbol csinalsz egy jelszo modositast, ahol a regi hashnek bekuldod hardcodeolva a mostanit, ujnak meg amit akarsz (hosszra egyezot)?

A desktop kliensben nem lehet jelszót változtatni, csak fizikailag hozzáférve egérrel képernyőbillentyűzeten.
Pontosabban az ActiveX-es webes UI-t még nem néztem részleteiben (az csak 32 bites Winen ment).

A standalone app egy lejelszavazott mdb fájlban (jelszót már levertem róla) tárolja a konfigot és a jelszó plaintextben tárolódik, így a próbálkozások kissé kényelmetlenek.

Vallattam kicsit:

@:
56 5d 83 9f 09 70 59 6a  d7 16 ea 49 82 73 c2 11

A:
2e dd 08 90 9a c3 3a 22  d7 16 ea 49 82 73 c2 11

AA:
65 4d cb 8d 78 ad 21 f0  d7 16 ea 49 82 73 c2 11

AAA:
94 a6 a3 8b 4f 35 19 ef  d7 16 ea 49 82 73 c2 11

AAAAAAAA:
4a e4 45 1e 36 2b 54 bb  d7 16 ea 49 82 73 c2 11

AAAAAAAAA:
4a e4 45 1e 36 2b 54 bb  2e dd 08 90 9a c3 3a 22

BBBBBBBB:
09 f3 e0 b9 06 e1 d4 57  d7 16 ea 49 82 73 c2 11

NevemTevének igaza van a 64-ről 64 bitre kódolással.

Annyi tűnt még fel, hogy az elkódolt tartalom 128 biten utazhat ugyanis a d7 16 ea 49 82 73 c2 11 sorozat még 2x ismétlődik ezek után.

Az látszik, hogy 8 bájtból lesz 8 bájt. A blokkok feltehetően nincsenek egymásra befolyással (ECB mode). Már 1 bit változása is az inputban majdnem a bitek felét megváltoztatja az outputban. Tehát nem full béna.

Azt feltétezem, hogy a csupa 0 inputból lesz d7 16 ea 49 82 73 c2 11. Ebben pl. az az érdekes, hogy a legfelső bit felváltva 1 és 0. Még látni pár ilyen szabályszerűséget, ami miatt viszonylag egyszerűbb, XOR alapú vagy hasonló algoritmus a tippem.

Ebből még nem jöttem rá a megoldásra. Egyrészt ki lehet generálni rengeteg input-output párost, hátha több szabályszerűséget is észreveszünk, vagy akár ki lehet generálni az összes párost, 64 bit esetén ez nem olyan rengeteg. Vagy a DLL-t kell visszafejteni.

--

Beüzemeltem az activeX-es felületet és azzal lehet jelszó váltani. A legjobb, hogy mindezt HTTP-n teszi, tehát lehet hegesztek össze valami toolt ami automatizáltan tudja átütni a jelszót meg megnyomkodni a streamet.

Egy dolog tűnt fel:
A DVR közvetlenül az autentikációs adatokat tartalmazó packet előtt küld egy XC012345 stringet tartalmazó packetet. (A DVR üzenetei vannak bentebb indentálva)

00000000  00 00 01 01 01 01 00 00  ff ff ff ff 00 00 00 00 ........ ........
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
    00000000  00 00 01 01 01 01 00 00  ab 00 00 00 08 00 00 00 ........ ........
    00000010  01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
    00000020  58 43 30 31 32 33 34 35                          XC012345       # ez lett it gyanús
00000020  00 00 01 01 00 00 00 00  ff ff ff ff 4c 00 00 00 ........ ....L...
00000030  01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
00000040  61 64 6d 69 6e 00 00 00  00 00 00 00 00 00 00 00 admin... ........
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
00000060  fa d8 5d 0e 46 47 60 2c  d7 16 ea 49 82 73 c2 11 ..].FG`, ...I.s..  # Ez a sor 
00000070  d7 16 ea 49 82 73 c2 11  d7 16 ea 49 82 73 c2 11 ...I.s.. ...I.s..  # és ez tartalmazza a jelszót
00000080  00 00 00 00 fa d8 5d 0e  46 47 60 2c             ......]. FG`,
    00000028  00 00 01 01 00 00 00 00  ab 00 00 00 00 00 00 00 ........ ........
    00000038  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
0000008C  00 00 01 01 06 00 00 00  ab 00 00 00 00 00 00 00 ........ ........
0000009C  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
    00000048  00 00 01 01 06 00 00 00  ab 00 00 00 00 00 00 00 ........ ........
    00000058  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........

Namost a jelszót erre átütve a

XC012345
fa d8 5d 0e 46 47 60 2c

Párt kapjuk. A jelszó tartalmától 2 bájtra pedig fixen ott van ez a sorozat (az alábbi dump az 12345 passworddel):

00000000  00 00 01 01 01 01 00 00  ff ff ff ff 00 00 00 00 ........ ........
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
    00000000  00 00 01 01 01 01 00 00  bb 00 00 00 08 00 00 00 ........ ........
    00000010  01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
    00000020  58 43 30 31 32 33 34 35                          XC012345 
00000020  00 00 01 01 00 00 00 00  ff ff ff ff 4c 00 00 00 ........ ....L...
00000030  01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
00000040  61 64 6d 69 6e 00 00 00  00 00 00 00 00 00 00 00 admin... ........
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
00000060  fc ef bc 94 21 e8 7e 1e  d7 16 ea 49 82 73 c2 11 ....!.~. ...I.s.. # jelszó 
00000070  d7 16 ea 49 82 73 c2 11  d7 16 ea 49 82 73 c2 11 ...I.s.. ...I.s.. # jelszó
00000080  00 00 00 00 fa d8 5d 0e  46 47 60 2c             ......]. FG`,
    00000028  00 00 01 01 00 00 00 00  bb 00 00 00 00 00 00 00 ........ ........
    00000038  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
0000008C  00 00 01 01 06 00 00 00  bb 00 00 00 00 00 00 00 ........ ........
0000009C  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
    00000048  00 00 01 01 06 00 00 00  bb 00 00 00 00 00 00 00 ........ ........
    00000058  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
000000AC  00 00 01 01 06 00 00 00  bb 00 00 00 00 00 00 00 ........ ........
000000BC  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
    00000068  00 00 01 01 06 00 00 00  bb 00 00 00 00 00 00 00 ........ ........
    00000078  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........
000000CC  00 00 01 01 01 00 00 00  bb 00 00 00 00 00 00 00 ........ ........
000000DC  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 ........ ........

Szerintem ez nem a kulcs, hanem egy challenge-response teszt, amit csak az tud megválaszolni, aki a jó kulccsal+algoritmussal kódolja a jelszót. A challenge-et ugyanúgy kódolja, ahogy a jelszót, ezért ismétlődik a kódolt rész. Biztonságilag nincs értelme, ha mindig ugyanaz a challenge, viszont arra jó, hogy kiszűri a hibásan működő kódoló algoritmust.

--

Ha a szokasos kinai TVT az OEM, akkor ne szorakozz a visszafejtessel. Van hozza telnet/ssh backdoor (is), amin keresztul jelszot cserelhetsz.

A felasználói jelszó megvan hozzá. A problémám onnan ered, hogy 64 bites Windowson az ActiveX-es néző nem megy, a kliensprogram meg fekete képet közvetít, illetve igényként felmerült az, hogy egy widgetszerű valamiben tolja a streameket felváltva. Linuxon pedig abszolút semmilyen lehetőség nincs. A stream TCP protokollon megy H.264-ben. A stream előtt van authentikáció ahol a jelszó elkódolva van kiküldve. Nem szeretnék jelszót belehardcodolni, illetve lehet más is hasznát venné ezért szeretném megcsinálni a jelszóenkódolást. Telnet ezen is nyitva van, de a jelszó/felhasználó nem azonos a felhasználói jelszóval.

A jelszóhoz generálás kitalálásához szerintem kellene egy link az activex controlra vagy az alkalmazásra.
Tegnap nézegettem egy kicsit, a manualja alapján egy HiSilicon hi3531-n alapuló kínai csoda (megtaláltam az egyik olasz tesóját) de az androidos appja (TMEye) alapján nem tűnt úgy mintha jelszót kódolna.
Az egyik klónhoz amihez találtam firmware-t is van benne törölhetetlen "super" user is (legalábbis a dumpból úgy tűnik (UserIsSuperKey,I am super user!)

A következő zip tartalmazza a CMS szoftvert illetve a feltelepített ActiveX-es okosságot. (A CMS felteszi azt is, csak ha valaki nem akar telepítgetni akkor így egyszerűbb lehet.)

https://dl.dropboxusercontent.com/u/4295670/DVR_pakk.zip

Az android app nagyon jó tipp, javat azért egyszerűbb revengelni.

Ez a vas Hisilicon HI3521 alapú, 16 csatornás, a PCB-n HI3521-DVR-354-V1.0 felirat. A UserIsSuperKey telneten nem jut be.

Idézet:
A UserIsSuperKey telneten nem jut be.

Az lehet, de a firmware-be amit találtam benne van az /etc/passwd-e hardcodolva a root pass. (bár nekem eleve az furcsa volt, hogy az init elindítja a telnetd-t :)). A zip-et meg megnézem mindjárt.

Ja, hogy a root pass a "UserIsSuperKey,I am super user!" string. Azt hittem csináltak egy UserIsSuperKey felhasználót és a másik fele a key. Majd lehet szétszedem és ha van soros és uboot prompt akkor tftp-n kiimádkozom belőle a rootfst és akkor lesz ehhez is backdoor.

Nem az a két string részlet a "strings /home/root/lib/libusers.so" kimenetéből. :)
A root pass-t nem néztem (johnnal), csak, hogy ott van a firmware képbe az /etc/passwd alatt a root és a password hashe.

Szerk.: Komolytalan jelszó volt egy i5-ös 10 perc alatt végzett vele, ha gondolod átküldöm privátba, bár mivel más a gyártó kétlem, hogy ott is ugyanaz van beállítva.

Ránéztem az activex controlra úgy tűnik vb.htm oldalt hívogat (google első találat, hogyan keressünk kamerákat az interneten google-val). De aztán jön egy kamera manuál ami úgy tűnik ugyanazt a szoftvert használja, mert a parameterek nevei is egyeznek az ocx-ben levőkkel, de az alapján csak basic http auth van:

http://login:password@ipaddress:port/command

Igen a vb.htm-en keresztül megy az ActiveX-es cucc bejelentkezése, konfigkezelése. A h.264 stream viszont a 8670-es porton megy, és szerintem nem szabvány RTSP, legalábbis VLC-t nem tudtam rávenni, hogy megegye, illetve a stream előtti authentikációban van benne a csatornaválasztás is.

Az eszköz tud egy QR kódot mutatni ami erre az APK-ra dob:
http://www.freeip.com/some_file/FreeIp.apk

Szétszedve úgy tűnik, hogy ez egy szerveren (http://heart.freeip.com ?) keresztül akarja a streamet áthúzni.

16 darab 'A' betu 2 egyforma darabkat ad?

--
The Bible is the longest set of Terms & Conditions ever.
So many people agree with it without knowing why.

16 karakteres jelszót nem tudok megadni :(.
Az ActiveX-es felület 8-at a fizikai 13-at enged.
A webeset esetleg tudnám bypassolni firebuggal mert a háttérben HTTP-t használ, de nem szeretném elhákolni (ki tudja nincs-e erősebb az ellenőrzés a bejelentkezésnél mint a jelszócserénél)

gemnon-nak köszönhetően telneten bejutottam az eszközre.

Megszereztem a nagyjából mindent (http-t és streamet is) kiszolgáló binárist és kicsapattam belőle a stringeket (közte megtalálható az XC012345 challange response key is).
Vannak ilyen vicces stringek benne mint:

xorOnly = true

illetve valószínűleg valahogy tud mjpeg-et is, mert a multipart JPEG header is megtalálható benne.

Elindultam az androidos irányba is, de az zsákutcának tűnik egyelőre, mert az csak egy kliens a freeip.com-on keresztüli valószínűleg STUN alapú streamelésnek. Amit meg nem működik gondolom azért, mert a gépbe behardcodolt heart.freeip.org nem elérhető.

Ha valakit esetleg érdekelne, a vas eladó lett:
https://hup.hu/node/165451

Sajnos nem jutottam a reveng végére: írtam egy "emulátort" amihez a gyári tool tud csatlakozni, illetve a gyári tool-ból megvan a dll ami az authentikációt intézi illetve csináltam egy wrappert a dll-hez ami tud végtelenülszer próbálkozni (van leaked SDK headerekkel hozzá).

A dll-t befűztem IDA-ba de az IDA és x86 ASM ismeretem gyér volt ahhoz, hogy rájöjjek, hogy konkrétan mit is csinál.