gicaprazzz Posted October 13, 2008 Report Posted October 13, 2008 Dedicatie pentru Nytro.[offtopic: va rog sa nu va suparati pe mine ca am ceva cu Nytro si sa nu ma judecati dupa asta]Ma adresez aici in special celor care cunosc limbajul de interogare SQL si "tehnica" SQL Injection.Presupunem urmatoarea interogare SQL:Select * From users Where email = '$login_email' AND password = '$login_password'unde $login_email -> textul introdus de utilizator la logare in campul pentru e-mail, iar $login_password -> textul introdus in campul pentru parola.daca $login_password = ' or ''=', comanda rezultata va fi:Select * From users Where email = '$login_email' AND password = '' or ''='', deci conditia finala va deveni adevarata pentru orice e-mail, ceea ce inseamna ca ne putem autentifica fara a cunoaste parola corecta pentru emailul ales.Daca modificam interogarea SQL aftfel incat conditia sa fie falsa (ex: Select * From users Where email = '$login_email' AND password = '' AND 'x'='y') atunci nu vom reusi sa ne logam (evident interogarea nu va returna nici o inregistrare din tabel pentru care 'x'='y'). Gandindu-ne invers, putem sti sigur daca o anumita conditie pe care am pus-o in interogarea SQL este sau nu adevarata, verificand daca am reusit sa ne logam. In acest fel putem presupune si verifica anumite informatii privitoare la serverul SQL, la baza de date, la tabele... Trebuie doar sa modificam comanda SQL pentru a ne indica daca un anumit raspuns corespunde cu presupunerea facuta de noi.EXEMPLU. Dorim sa aflam versiunea unui server MySQL. Presupunem ca versiunea este 5.0.1.3 si modificam comanda SQL astfel:Select * From users Where email = 'gigel@mymail.com' AND password = 'parola_lui_gigel' AND version() = '5.0.1.3'presupunand ca exista userul gigel cu adresa specificata si ca parola este corecta, logarea va depinde de valoarea de adevar a expresiei version()='5.0.1.3'.Nu putem incerca insa toate combinatiile posibile de 1, 2, 3, 4, 5, 6, 7... caractere pentru a verifica un indicator precum versiunea. Un calcul simplu ne arata ca exista 26 * 2 litere (MARI + mici) + 10 cifre + aprox. 20 semne de punctuatie = 26 * 2 + 10 + 20 = 82 caractere. Astfel avem in total 82^1 moduri de a combina 1 caracter, 82^2 moduri de a combina 2 caractere, ... Inductia ne arata ca sunt in total 82^n moduri de a combina intre ele cele 82 caractere intr-un cuvant de lungime n. Astfe, pentru 5.0.1.3 am avea 82^7 incercari (numarul total), un numar aproape astronomic, care s-ar rasfrange intr-un timp de executie imens.Salvarea noastra in acest caz se numeste MID, o functie MySQL care extrage un subsir dintr-un sir de caractere. Sintaxa acestei functii este:MID(strEXPR text, intEXPR start, intEXPR length), cu urmatoarele semnificatii ale parametrilor:text - o expresie de tipul string din care dorim sa extragem un subsirstart - pozitia de la care incepem sa extragem caractere (1 reprezinta primul caracter din <<text>>)length - numarul de caractere extraseVom modifica comanda astfel incat sa gasim pe rand fiecare caracter din rezultatul de care avem nevoie (in acest caz version()):Select * From users Where email = 'gigel@mymail.com' AND password = 'parola_lui_gigel' AND Mid(version(),1,1) = '5'Select * From users Where email = 'gigel@mymail.com' AND password = 'parola_lui_gigel' AND Mid(version(),2,1) = '.'Select * From users Where email = 'gigel@mymail.com' AND password = 'parola_lui_gigel' AND Mid(version(),3,1) = '0'Select * From users Where email = 'gigel@mymail.com' AND password = 'parola_lui_gigel' AND Mid(version(),4,1) = '.'Select * From users Where email = 'gigel@mymail.com' AND password = 'parola_lui_gigel' AND Mid(version(),5,1) = '1'Select * From users Where email = 'gigel@mymail.com' AND password = 'parola_lui_gigel' AND Mid(version(),6,1) = '.'Select * From users Where email = 'gigel@mymail.com' AND password = 'parola_lui_gigel' AND Mid(version(),7,1) = '3'Toate aceste interogari sunt adevarate, observand ca primul caracter este '5', al doilea este '.', samd... Astfel, ceea ce ne ramae de facut este sa incercam pentru fiecare pozitie cele 82 de caractere posibile, avand astfel 82 * n incercari in total, un numar neinsemnat pe langa 82 ^ n.Voi completa cu cod sursa in momentul in care cineva va fi interesat. Voi propune si niste tehnici euristice de optimizare a procesului, dar doar in acelasi caz.Multumesc, Gica Prazzz [ce naspa suna numele...] Quote
Nytro Posted October 14, 2008 Report Posted October 14, 2008 Vai ce dragut din partea ta . Crezi sau nu ce ai scris tu aici stiam de foarte mult timp . La cat te-ai laudat ma asteptam la mult mai mult din partea ta . La asa tutorial nu vreau sa ma gandesc la programele tale ... Quote
gicaprazzz Posted October 15, 2008 Author Report Posted October 15, 2008 ma bucur ca stiai asta. dar stii sa o implementezi? Quote
Nytro Posted October 15, 2008 Report Posted October 15, 2008 Foarte probabil , dar nu am facut niciodata asa ceva si nici nu o sa fac . De ce ? Pentru ca eu fac numai keyloggere , cum ai spus . Quote
Nytro Posted October 15, 2008 Report Posted October 15, 2008 Normal ca nu am gagica , cui i-ar place un pitic , gras si plin de cosuri ca mine ? Plus ca sunt tocilar , stau toata ziua si invat sa fac keyloggere . Si nu ma asteptam de la unul ca tine sa foloseasca cuvinte ca "pula" . Esti prea ratat sa sti ce inseamna viata . Pentru tine viata inseamna matematica , fizica si algoritmi . Daca ai mai iesi din casa poate ai vedea si tu altceva in afara de coduri care nu contin variabile cu numele "pula" . Ramai la algoritmii tai , invata toata ziua sa te lauzi ca esti mai bun ca mine . Eu mai stau un scurt timp pe forumuri si ma tirez . Distractie placuta la toceala . A , pot sa te intreb ce medii ai la scoala ? Quote
gicaprazzz Posted October 15, 2008 Author Report Posted October 15, 2008 9.75. te-am suparat chiar asa de tare? ai zis ca vrei sa vezi cum programez eu. si ti-am aratat. si am facut si o observatie (in urma careia o sa mai iau un warn). Quote
Nytro Posted October 15, 2008 Report Posted October 15, 2008 9,75 ... Ce sa mai zic ... Cat timp pe zi stai si inveti ? Sincer imi pare rau de tine . Am vazut cum programezi si mi-am dat seama ca esti mult prea bun , nici nu ma compar cu tine . A , inca nu am spus , in viitor nu vreau sa fiu programator . Vreau ... Altceva . Pastrez pentru mine . Quote
gicaprazzz Posted October 15, 2008 Author Report Posted October 15, 2008 de ce-ti pare rau de mine? Quote
Nytro Posted October 15, 2008 Report Posted October 15, 2008 Nu mai conteaza . Imi cer scuze pentru atatea posturi inutile . ro_nytro daca vrei sa imi zici ceva . Quote
say3er. Posted November 13, 2011 Report Posted November 13, 2011 Nu am inteles nimic din tutorialul asta ID(strEXPR text, intEXPR start, intEXPR length ce drq is astea Quote