Articolul hacking php!

Salutări!
Orice am spus despre plusurile PHP, cel puțin un defect serios pe care îl are cu siguranță: tema hacking-ului script-urilor php este într-un fel slab aprinsă în runet. Toți spun doar că acest lucru este un lucru foarte neetanșe, rezultând argumente stupide, cum ar fi „în cazul în care nu variabile verificate, serverul web ca root, dar versiunea plină de găuri.“ Între timp, pe PHP au trecut o mulțime de site-uri, și mulți folosesc nici un script-uri originale și standard de soluții, care adesea alunecă prin vulnerabilități. Despre ei, atunci, de fapt, vor fi discutate.







Acesta este unul dintre cele mai populare motoare de site-uri cu o mulțime de oportunități: de la postarea de articole și știri cu posibilitatea de discuție de către cititori (ca pe xakep.ru) înainte de automatizarea afișării bannerelor. Puterea produsului poate fi evaluată în funcție de volumul utilității: se cântărește arhiva cu cea mai recentă versiune a motorului. Acesta cântărește. 1.21mb! Dar există doar scripturi, fișiere text.

Cu toate acestea, în cazul în care există o mulțime de cod, există o mulțime de bug-uri. De la apariția php-nuke, acesta a găsit atât de multe găuri pe care orice ciocan va obvazivuetsya;). Și vulnerabilitățile sunt toate - în ceea ce privește selecția: aici tu și DoS, executarea comenzilor și a jocurilor cu cereri SQL, obținerea drepturilor de administrator și executarea oricărui cod php.

Timp de doi ani de existență a motorului au existat un număr mare de versiuni, proiectul, este necesar să se acorde credit, este susținut perfect și, probabil, Francisco scrie excelent în PHP. Nu, este adevărat, în ciuda găurilor KUCHU, kaklbasit SUCH proiect pentru 380 de ore - este cool;).

Totul sa dovedit a fi în setările php - funcția „înveliș fopen Url“ Am fost oprit (când am configurat php, prin inerție taie toate opțiunile inutile mine). În majoritatea serverelor, caracteristica este activată, deci probabil că nu veți avea probleme. Dar chiar și în cazul meu, am căutat cu ușurință discul - $ file = c: winntwin.ini. Firește, dacă mașina este sub * nix, acest lucru nu va funcționa - "/" este tăiat de la începutul liniei $ file. Acum, despre scenariul distructiv, despre ce să scrie acolo. O întrebare filosofică, dar încă mai dau câteva dezvoltări:

Simplu și gustos, deși poți merge mai departe:

$ a = sistem (comanda $);
echo "$ a";
?>

Acest cod, după cum înțelegeți, va executa o comandă de la comanda variabilă $ pe server.
De exemplu, astfel:

În PHP, există doi operatori - necesită și includ, care citesc și execută codul din fișierul specificat. Acest lucru vă permite să creați funcții reutilizabile și constante într-un fișier separat și le numim în celelalte scenarii. (De multe ori pentru comoditatea de configurare script-ul, toate setările sale sunt stocate într-un script mic, în cazul în care acestea se pot edita cu ușurință o persoană care nu cunoaște limba, fără teama de a deteriora codul de bază. Sau, de exemplu, este foarte convenabil pentru a include piese html'ya nu pentru a scrie de multe ori la fel elemente.)

Funcțiile, după cum vedeți, sunt utile pentru coderi și pentru hackeri;). Care este diferența dintre include (); și necesită (); Este invizibil, dar fundamental: necesită (); Acesta este pur și simplu înlocuit în timpul interpretării de către codul din fișierul specificat, și include (); calculează și execută codul într-un fișier extern de fiecare dată când este detectată o declarație de includere. Acest lucru permite ca funcția să fie utilizată în bucle, ceea ce ar fi imposibil atunci când este necesar. Și mai mult. La executare, aceste funcții returnează valori - dacă a existat o problemă, falsă, dacă totul este OK, atunci este adevărat. Diferența este că, dacă începeți cu cererea, scriptul va fi oprit, dacă se utilizează includerea, executarea acestuia va continua. Astfel, este necesar, în general, să fie echivalent cu codul:

În general, funcția sistemului execută orice comandă de pe server, returnând rezultatul executării acestuia. Pe ea, întâmplător, multe bug-uri se bazează. De exemplu, codul următor este adesea folosit pentru a trimite poștă electronică:







Toate;). Acum, că piper patch motorul buggy, va avea un backdoor, prin care puteți încă o dată site-ul lomanut;) Cu toate acestea, un timp scurt, se va lucra - în cazul în care ardeiul nu este un cretin, apoi, după a doua deface, el arata serverul de web jurnalele și instantaneu fuzioneze; . (((Dar întotdeauna există o șansă ca el, fie nu are acces la jurnalele (admini scrie trimite jurnalele de ea, (), sau fără creier.

Descrierea: În versiunile anterioare ale motorului, s-au folosit nume de tabele statice (cum ar fi mesaje, autori). Este clar că prezența lor în baza de date este foarte probabilă și pentru a evita confuzia, numele se adaugă acum un prefix din variabila $ prefix, definită în scriptul de configurare config.php. Interogarea SQL către baza de date în acest caz arată astfel:

mysql_query ("Prefixul UPDATE $."
counter = counter + 1 unde sid = $ sid ")

După cum puteți vedea, există un apel la mainfile.php, care, la rândul său, sună la fișierul de configurare. Nu avem nevoie de acest lucru, avem nevoie de prefixul $ pentru a fi liberi, și ne-am putea pune propria noastră cerere acolo. Acest lucru se face pur și simplu - variabilele definite $ mainfile, $ TID, $ sid și a pus $ cerere de prefix (isset funcția (), este utilizat pentru a determina faptul important - se determină dacă o variabilă, adică, de exemplu, dacă utilizatorul a completat într-un este domeniul). Ce trebuie să puneți în prefixul $? De exemplu, aici sunt: ​​autorii stabiliți pwd = 'coolpass'; update nuke.
Astfel, interogarea executată va fi după cum urmează:

Autorii UPDATE au setat pwd = 'coolpass'; actualizare nuke_stories SET counter = counter + 1 unde sid = $ sid "), care va schimba parolele tuturor administratorilor pentru a" coolpass ".

(Apropo, pregătesc în prezent un material despre două tehnologii folosite în mod frecvent pentru hacking scripturi: CSS și SQL injection, în care îți spun cum să faci toate cele de mai sus.);)

Opisalovo: Hmm. gaura este la fel de veche ca lumea, dar programatorul despre asta din anumite motive nu a crezut. Ei bine, înțelegeți-o;).

Am citit orice fișier disponibil pentru acest utilizator. De exemplu, puteți citi scriptul de configurare și puteți extrage de acolo parola în baza de date, care poate coincide cu parola de pe serverul FTP cu site-ul și așa mai departe. Imaginați-vă că verificarea $ l pentru ".." nu este deloc. Chiar ma supărat - ei bine, nu știi cum să scrii, nu scrie. Nu, ei se urcă și chiar își afișează creațiile pe afișaj public - nu este clar de ce?

Admin;)
Vulnerabil Versiuni: 0.4.02 (ultima)
Diagnostic: Obțineți drepturi administrative
Xploit: acces cookie = ok

Opisalovo: Sincer, când am citit despre acest bug, m-am ruginit timp de aproximativ cinci minute, după care am oftat din nou. Iată cât de mult și ce ar trebui să beau pentru a identifica administratorul "cookie-ului de acces" cu valoarea "ok"? Nu, dacă ar fi fost un scenariu privat, original - oriunde s-ar fi dus, pentru că puteți afla doar despre bug-ul, uitându-vă la codul său, nu veți afla din afară. Dar, după ce toate silabilele de proiect sunt postate pe site, găsirea acestei nuanțe este o afacere de cinci minute. Vezi pentru tine:

Xoops - un alt motor ghinionist, suficient, mi sa părut funcțional, atât de comun; Găuri în ea am găsit, nu atât de mult - în primul rând, produsul este destul de tânăr, și în al doilea rând, programatorii au gândit la securitate atunci când scriu, dar, aparent, nu pentru mult timp.

Descriere: În scriptul userinfo.php nu există nici o verificare pentru caracterele speciale din variabila $ uid, care este utilizată în interogarea SQL, care vă permite să jucați cu interogări SQL, să modificați sau să ștergeți date;).

Este distractiv? Să mergem!
Dacă ați pus $ uid "7545 $", atunci PHP va raporta o eroare:
-tăiată
.
MySQL Eroare de interogare: SELECT u. *, S. * FROM x_users u, x_users_status s WHERE
u.uid = 7545 $ ȘI u.uid = s.uid
Numărul de eroare: 1064
Mesaj de eroare: Aveți o eroare în sintaxa SQL lângă '; ȘI u.uid = s.uid "la linia 1
.
-tăiată

Acest lucru ajută foarte mult - puteți vedea cum funcționează interogarea sql, care vă permite să vă închideți;)! Ei bine, de exemplu. Aici și așa:

$ uid = 2; actualizare x_users password = 'coolpass'; selectați * x_de utilizatori unde uid = '1'

Acum interogarea SQL trimisă arată astfel:

SELECT u. *, S. * FROM x_users u, x_users_status s WHERE

u.uid = 2; actualizare x_users password = 'coolpass'; selectați * x_de utilizatori unde uid = '1'

Este clar că în loc de "update x_users". Poate fi orice SQL-request, dreptul de a executa care este utilizatorul curent sql.

Acest paragraf este dedicat celor care NU Știu cum să caute site-uri vulnerabile. Dacă nu sunteți unul dintre ei - săriți aceste linii, nu veți pierde nimic. Ei bine, atunci. Să începem cu elementele de bază. Ce este un scenariu? În plus față de rularea unui program de pe server, este doar un fișier. Și ca orice fișier care funcționează pe site, hyperlink-urile de la alte pagini duc la asta.

P.S.
Ți-am spus despre trei motoare importante ale site-ului. Le-am arătat prin exemplul lor vulnerabilitatea cea mai tipică pentru php - să ia orice script scurgeri php de la bug-ul, probabil că vor fi exact aceleași găuri. Sper că nu luați articolul ca un ghid pentru scripting, dar înțelegeți că hacking-ul PHP nu este mai puțin interesant decât perl;).

P.P.S. Toate bug-urile au fost testate pe serverul web Apache local cu winNT cu versiunea a treia PHP atașată.
Mult noroc;)







Articole similare

Trimiteți-le prietenilor: