qbert Posted November 7, 2011 Report Posted November 7, 2011 Ok,ce este aceasta "Uid Web Authentification"?Este un sistem de autentificare bazat de un uid(Unique Identification Number),in cazul nostru,adresa mac.Schema de mai jos incearca sa explice cam cum lucreaza acest sistem:Mai pe scurt,se ruleaza un executabil din calculatorul administratorului,executabilul trimite adresa mac catre serverul mysql si initializeaza o sesiune valabila un minut,timp in care mac adressul trebuie verificat din interfata web.Daca adresa mac si ip-urile coincid,atunci area de administrare ar trebui sa fie deschisa.Ok,de ce avem nevoie?Pai,eu am ales sa scriu exe-ul in php si sa il compilez cu bamcompiler,un compiler php=>exe destul de misto,partea nasoala ar fi ca,compileaza php 4.4.4.Site-ul bamcompile este Bambalam PHP EXE Compiler/Embedder 1.21 - Free php to exe converter!.Pasul urmator ar fi sa creezi o baza de date sau foloseste una deja creata,pentru ca nu avem nevoie decat de un tabel de genul asta:Pasul urmator ar fi sa scriem interfata web,deci:<?//pentru ca bamcompile compileaza doar cod php 4 si nu avem la dispozitie functia date_time_set,trebuie sa standardizam timpul dintre client si server.//functia de mai jos transforma orele si minutele in secunde,pentru o comparare a intervalelor de timp mai usoara.function time_in_seconds($string){ $string = explode(':',$string); $string[0] = $string[0] * 3600; $string[1] = $string[1] * 60; $time_in_seconds = $string[0] + $string[1] + $string[2]; $time_in_seconds = (int)$time_in_seconds; return $time_in_seconds;}if(isset($_GET['servertime'])){ print date('h:i:s');}//mysql connection$sql_con = mysql_connect("localhost","root","");if(!$sql_con){ die('Could not connect: ' . mysql_error());}mysql_select_db("test1234", $sql_con);//sectiunea asta primeste date de la executabil si insereaza datele in mysqlif(isset($_GET['insert'])){ $ip = $_SERVER['REMOTE_ADDR']; $date = date('m.d.y'); $time = $_GET['time']; $key = $_GET['key']; $sql = mysql_query("INSERT INTO uid_log (ip , date , time , mac) VALUES ('$ip' , '$date' , '$time', '$key')");}//aceasta sectiune face verificarea intre adresa mac trimisa de user si cea stocata in baza de dateif(isset($_POST['extract'])){ $count = mysql_num_rows(mysql_query("SELECT * FROM uid_log"));//////loadam ultima intrare in tabel $sql_query = mysql_query("SELECT * FROM uid_log where id=$count"); while($row = mysql_fetch_array($sql_query)){ if($row['mac'] == '00-1D-6A-96-5F-FC' && $row['ip'] == $_SERVER['REMOTE_ADDR'] // vedem daca adresele mac si ip-urile coincid && time_in_seconds($row['time']) + 60 > time_in_seconds(date('h:i:s')) ){//deasemenea verificam daca nu a trecut un minut de cand intrarea in tabel s-a facut echo '<center>Welcome!</center><br/>'; } else{ print '<center>Go away!</center>';}}}print ' <center> <form action="'. $_SERVER["PHP_SELF"] .'" method="post"> <input type="radio" name="extract" style="visibility:hidden" checked="checked" /> <input type="submit" value="Login"> </form> </center>';?>Apoi codul ce urmeaza sa fie compilat:<?$string = file_get_contents('http://localhost/hid/simple.php?servertime=a');//intai de toate,trebuie sa terminam procesul de standardizare a timpului $pattern = '/[0-9]+:[0-9]+:[0-9]/';preg_match($pattern,$string,$match);exec("getmac", $output);//preluarea adresei mac$output = implode(" " , $output);preg_match_all('/[a-zA-Z-0-9]+-[a-zA-Z-0-9]+-[a-zA-Z-0-9]+-[a-zA-Z-0-9]+-[a-zA-Z-0-9]+-[a-zA-Z-0-9]{2}/',$output,$macmatch);//cu niste ajutor de la un reg ex$url = 'http://localhost/hid/simple.php?insert=true&time=' . $match[0] . '&key=' . $macmatch[0][max(array_map("count" , $macmatch)) - 1];if(max(array_map('count' , $macmatch)) > 1){ print 'you have more than 2 network adapters and I have no idea which one is the right one';}else{ file_get_contents($url);//si pasam datele catre mysql print 'Data submited';}?>In acest exemplu am preluat adresa mac,dar o metoda si mai sigura ar fi preluarea id-urilor hardware,doar ca pentru a face asta e nevoie de lucru cu api-urile windows sau cu un dll ca asta: Unique hardware ID extractor|Extract real hard drive/disk and CPU serial number. Volume Partition Serial Number, Partition Serial Number, Hardware serial number|Extracts unique serial numbers from your computer's hardware .Problema ar fi lucrul cu ole/com in php pe windows,care este cam futere.Pentru a compila codul de mai sus,du-te in dir-ul unde este localizat bamcompile si foloseste comanda:bamcompile numele_la_php.php numele_la_exe.exePentru mai multe optiuni de compilare,citeste readme.txt.Mentionez ca sistemul de autentificare este prezentat ca si concept si ca inainte de a implementa un sistem ca aceasta,ar trebui luata in considerare si o eventuala transimise a datelor prin post,poate criptate,deasemenea,datele din tabel ar trebui stocate criptat,iar pentru o masura de securitate in plus,un sistem auxiliar/principal bazat pe user:pass ar fi recomandat.Sper ca ati inteles ceva. 1 Quote
Paul4games Posted November 7, 2011 Report Posted November 7, 2011 Nu am pucat sa ma uit calumea peste codul sursa dar daca acesta autentificare se face daor pe baza de mac, macul se poate schimba si ai putea sa te loghezi ca alt user, la fel si cu hardwareid, ai putea sa generezi uun fel de uid din macul actual&combinat cu ip-ul&browserul&alte chestii de genul ca sa nu ai nevoie de api-uri si chestii de genul. Quote
qbert Posted November 7, 2011 Author Report Posted November 7, 2011 Nu am pucat sa ma uit calumea peste codul sursa dar daca acesta autentificare se face daor pe baza de mac, macul se poate schimba si ai putea sa te loghezi ca alt user, la fel si cu hardwareid, ai putea sa generezi uun fel de uid din macul actual&combinat cu ip-ul&browserul&alte chestii de genul ca sa nu ai nevoie de api-uri si chestii de genul.Inainte de a spoofa ip&mac,mai intai trebuie sa le aflii,daca atacatorul nu are date despre administrator,de unde le ia?Sa zicem ca de mac & ip face rost,dar de hardware id de unde mai face?Pe langa asta,mai trebuie sa afle si arhitectura fisierului unde sunt trimise. Quote
Paul4games Posted November 7, 2011 Report Posted November 7, 2011 Inainte de a spoofa ip&mac,mai intai trebuie sa le aflii,daca atacatorul nu are date despre administrator,de unde le ia?Sa zicem ca de mac & ip face rost,dar de hardware id de unde mai face?Pe langa asta,mai trebuie sa afle si arhitectura fisierului unde sunt trimise.DA eu inteleg ce spui tu, daor ti-am spus iar de ip/max se paote face rost de harware id e mai greu dar dupa cum ai spus sa il implementezi in php iti cam bati capul degeaba..... Quote