![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%) ![]() ![]() |
Witam!
w obliczu pewnego problemu (braku SSL) na darmowych serwerach wartoby pomyslec nad obejsciem tego problemu. Otoz mznaby za pomoca javascriptu generowac zhaszowany (md5) ciag zawierajacy login haslo itd. i porownywac go na serwerze z tam zhaszowanym. Tyleko jak do haszowania doda sie czas (dla wikszego bezpieczenstwa) to taki pakiet informacji musialby docierac do serwera natychmiast, wiec mazna to z kolei obejsc poprzez wygenerowanie na serwerze kilku(nastu) md5 i kilejno je porownujemy z tym co przegladarka wslala do serwera. Ale to tez daje wznoosc na kilka sekund i w dodatu obarcza serwer obliczeniami. plik index.php: [php:1:10ee9802fc]<?php <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Logowanie</title> <script type="text/javascript" src="login.js"></script> <script type="text/javascript"> var czas=<?php print(time()."rn")?> setInterval('czas++',1000) </script> </head> <body> <form onsubmit="return send(this.login.value, this.pwd.value, czas, 'frm')"> Login: <input type="text" name="login"><br> Hasło: <input type="password" name="pwd"><br> <input type="submit" value="Zaloguj"> </form> <form action="login.php" method="post" name="frm"> <input type="hidden" name="s"> </form> </body> </html> ?>[/php:1:10ee9802fc] plik login.php [php:1:10ee9802fc]<?php <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Logowanie</title> </head> <body> <?php // definiujemy poprawny login i hasło $login='test'; $haslo='xyz123'; // pobieramy aktualny znacznik czasu $czas=time(); // wykonujemy pętlę sprawdzającą poprawność przesłanej sumy MD5 for($i=0; $i<15; $i++){ if(md5($login.$haslo.($czas-$i)) == $_POST['s']){ print("Podany login i hasło są poprawne !");break; } } // jeżeli przesłana suma MD5 jest niepoprawna, wyświetlamy stosowną informację if($i==15)print("Brak autoryzacji !<br><a href='java script:history.go(-1)'>Spróbuj jeszcze raz</a>"); ?> </body> </html> ?>[/php:1:10ee9802fc] plik login.js Kod // SecureLogin 1.1 by Michal Grzechowiak (C) 2003
function y(n){var s='',h='0123456789abcdef',i=0 for(i;i<4;)s+=h.charAt((n>>(i*8+4))&15)+h.charAt((n>>(i++*8))&15);return s} function k(s){var l=s.length,n=((l+8)>>6)+1,b=[],i=0 for(i;i<n*16;)b[i++]=0;for(i=0;i<l;i++)b[i>>2]|=s.charCodeAt(i)<<((i%4)*8) b[i>>2]|=128<<((i%4)*8);b[n*16-2]=l*8;return b} function u(x,y){var l=(x&0xFFFF)+(y&0xFFFF),m=(x>>16)+(y>>16)+(l>>16);return (m<<16)|(l&0xFFFF)} function r(n,c){return (n<<c)|(n>>>(32-c))} function m(q,a,b,x,s,t){return u(r(u(u(a,q),u(x,t)),s),b)} function f(a,b,c,d,x,s,t){return m((b&c)|((~b)&d),a,b,x,s,t)} function g(a,b,c,d,x,s,t){return m((b&d)|(c&(~d)),a,b,x,s,t)} function h(a,b,c,d,x,s,t){return m(b^c^d,a,b,x,s,t)} function i(a,b,c,d,x,s,t){return m(c^(b|(~d)),a,b,x,s,t)} function md5(s){ var x=k(s),a=1732584193,b=-271733879,c=-1732584194,d=271733878,j,o for(j=0;j<x.length;j+=16){ o=[a,b,c,d] a=f(a,b,c,d,x[j+0],7,-680876936) d=f(d,a,b,c,x[j+1],12,-389564586) c=f(c,d,a,b,x[j+2],17,606105819) b=f(b,c,d,a,x[j+3],22,-1044525330) a=f(a,b,c,d,x[j+4],7,-176418897) d=f(d,a,b,c,x[j+5],12,1200080426) c=f(c,d,a,b,x[j+6],17,-1473231341) b=f(b,c,d,a,x[j+7],22,-45705983) a=f(a,b,c,d,x[j+8],7,1770035416) d=f(d,a,b,c,x[j+9],12,-1958414417) c=f(c,d,a,b,x[j+10],17,-42063) b=f(b,c,d,a,x[j+11],22,-1990404162) a=f(a,b,c,d,x[j+12],7,1804603682) d=f(d,a,b,c,x[j+13],12,-40341101) c=f(c,d,a,b,x[j+14],17,-1502002290) b=f(b,c,d,a,x[j+15],22,1236535329) a=g(a,b,c,d,x[j+1],5,-165796510) d=g(d,a,b,c,x[j+6],9,-1069501632) c=g(c,d,a,b,x[j+11],14,643717713) b=g(b,c,d,a,x[j+0],20,-373897302) a=g(a,b,c,d,x[j+5],5,-701558691) d=g(d,a,b,c,x[j+10],9,38016083) c=g(c,d,a,b,x[j+15],14,-660478335) b=g(b,c,d,a,x[j+4],20,-405537848) a=g(a,b,c,d,x[j+9],5,568446438) d=g(d,a,b,c,x[j+14],9,-1019803690) c=g(c,d,a,b,x[j+3],14,-187363961) b=g(b,c,d,a,x[j+8],20,1163531501) a=g(a,b,c,d,x[j+13],5,-1444681467) d=g(d,a,b,c,x[j+2],9,-51403784) c=g(c,d,a,b,x[j+7],14,1735328473) b=g(b,c,d,a,x[j+12],20,-1926607734) a=h(a,b,c,d,x[j+5],4,-378558) d=h(d,a,b,c,x[j+8],11,-2022574463) c=h(c,d,a,b,x[j+11],16,1839030562) b=h(b,c,d,a,x[j+14],23,-35309556) a=h(a,b,c,d,x[j+1],4,-1530992060) d=h(d,a,b,c,x[j+4],11,1272893353) c=h(c,d,a,b,x[j+7],16,-155497632) b=h(b,c,d,a,x[j+10],23,-1094730640) a=h(a,b,c,d,x[j+13],4,681279174) d=h(d,a,b,c,x[j+0],11,-358537222) c=h(c,d,a,b,x[j+3],16,-722521979) b=h(b,c,d,a,x[j+6],23,76029189) a=h(a,b,c,d,x[j+9],4,-640364487) d=h(d,a,b,c,x[j+12],11,-421815835) c=h(c,d,a,b,x[j+15],16,530742520) b=h(b,c,d,a,x[j+2],23,-995338651) a=i(a,b,c,d,x[j+0],6,-198630844) d=i(d,a,b,c,x[j+7],10,1126891415) c=i(c,d,a,b,x[j+14],15,-1416354905) b=i(b,c,d,a,x[j+5],21,-57434055) a=i(a,b,c,d,x[j+12],6,1700485571) d=i(d,a,b,c,x[j+3],10,-1894986606) c=i(c,d,a,b,x[j+10],15,-1051523) b=i(b,c,d,a,x[j+1],21,-2054922799) a=i(a,b,c,d,x[j+8],6,1873313359) d=i(d,a,b,c,x[j+15],10,-30611744) c=i(c,d,a,b,x[j+6],15,-1560198380) b=i(b,c,d,a,x[j+13],21,1309151649) a=i(a,b,c,d,x[j+4],6,-145523070) d=i(d,a,b,c,x[j+11],10,-1120210379) c=i(c,d,a,b,x[j+2],15,718787259) b=i(b,c,d,a,x[j+9],21,-343485551) a=u(a,o[0]);b=u(b,o[1]);c=u(c,o[2]);d=u(d,o[3])}return y(a)+y(b)+y(c)+y(d)} function send(q,w,x,v){with(document.forms[v])s.value=md5(q+w+x),submit();return!1} Moje pytanie czy jest jakis sposob by ominac te niedogodnosc generowania wielu md5 na serwerze |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 127 Pomógł: 0 Dołączył: 19.11.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat Wątek dotyczył tego, jak dokonać autoryzacji po HTTP bez SSL nie przesyłając hasła przy każdym logowaniu.
Zgadza się sam taki algorytm przedstawiłem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Cytat [*]jeśli włamywacz przechwyci ciąg znaków zakodowany MD5 i login, to nic nie zdziała, bowiem ciąg znaków wygenerowany po stronie serwera będzie inny ze względu na inny adres IP włamywacza
[*]jeśli włamywacz będzie chciał sam wygenerować ciąg znaków, to też nic nie zdziała, bowiem musiałby znać hasło użytkownika Pamiętaj że zna funkcję przy pomocy której zaciemniany jest ciąg (jak sam piszesz jest w JS), zna też dane wejściowe (hasło i obecność jego własnego IP w formularzu jest jednoznaczna). Ja po przeanalizowaniu takiego algorytmu i posiadaniu danych testowych (np. z podsłuchu) zabrałbym się za złamanie hasła metodą brutal force, podstawiając kolejne hasła do algorytmu obliczającego MD5 z IP i hasła. Zauważ, że wystarczy mieć podsłuchane dane przesyłane w relacji klient -> serwer. W mojej wersji z liczbą losową przesyłaną z serwera do klienta atakujący ma ciut trudniej bo musi najpier podsłuchać transmisję serwer -> klient a potem odpowiadającą jej klient -> serwer (jeśli zmienna losowa zostanie usunięta z formularza, bo jeśli będzie w formularzu to wystarczy tylko 2-gi etap). Mając te dane też może przeprowadzić atak brutal force. Jedyny zysk jest taki, że nie ułatwia im się życia (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) W wersji z IP atakujący może jeszcze ustawić świadomie takie samo IP jak ofiara i wtedy wystarczy że wyśle takiego samego POST-a z formularza. (o tym pisałeś). Nie potrzebuje wtedy nawet brutal force. Cytat Warto jednak pamiętać, że SSL umożliwia nie tylko kodowanie transmisji, ale także weryfikację czy dany serwis jest rzeczywiście tym serwisem, za który się podaje. Bez SSL łatwo wprowadzić użytkownika w błąd, na przykład z pomocą wykrytego niedawno błędu w Internet Explorerze.
Z SSL-em też swego czasu dało się przeprowadzić atak MiM na IE. Cytat Nie rozumiem jednak co mają do tego liczby losowe i w jaki sposób ich brak niszczy ten algorytm :?
PIsałem to w nocy - miałem na myśli osłabia. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 21:02 |