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ások
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ő:
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:
Szerk.: rosszul mondtam, 8 karakter alatt (a 7-es még az első felébe megy)
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:
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)
Namost a jelszót erre átütve a
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):
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.
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:
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.