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. Toată lumea spune doar că este un lucru foarte neclar, ceea ce duce la argumente greșite, cum ar fi "dacă variabilele nu sunt verificate, serverul web este sub rădăcină, da versiunea este leaky. "Între timp, php-ul a trecut deja o mulțime de site-uri, iar mulți nu folosesc scenarii originale, ci soluții standard, care de multe ori 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 determinată de volumul intrării: arhiva cu cea mai recentă versiune a motorului cântărește ... cântărește ... 1.21mb! Dar sunt 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 de comenzi și jocuri cu cereri SQL, obținerea drepturilor de administrator și executarea oricărui cod php ...
PHP-nuke a scris un anumit Francisco Burzi (Francisco Burzi) pentru proiectul de știri
Timp de doi ani de existență a motorului au existat un număr mare de versiuni, proiectul, este necesar să se dea credit, este perfect susținut ș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;).
Variante vulnerabile: aproape toate;)
Diagnostic: Rularea unui cod php
Valorile fișierului $ variabil sunt verificate foarte slab - pentru prezența "..". "/" la începutul liniei. Coderul nu a crezut că fișierul $ poate și ar trebui, în cazul nostru, să fie o adresă URL a scriptului PHP executabil. Cu toate acestea, nu totul este atât de simplu. De exemplu, când am testat bug-ul pe winNT + Apache + php3, nu a funcționat - "Deschiderea eșuată. "Înțelegi.
Totul a fost în setările php - funcția "Url fopen wrapper" a fost oprită (când am configurat php, prin inerție am tăiat toate opțiunile inutile pentru 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:
Din Siberia cu dragoste.
Regardz2: echipajul X, Bill Gates și Monica Levintsky ", $ a);
Simplu și gustos, deși poți merge mai departe:
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ă:
Sistem ("mail $ e-mail Cu toate acestea, dacă e-mailul de tip $ arata ca "--blahundragogo; rm-rf; lohundra", din nou toate fișierele și subdirectoarele vor fi șterse în raport cu acest director. Sistem ("mail-blahundragogo; rm-Rf; lohundra Aici echipa este compusă din trei părți: 1) mail-blahundra - steagul nevalid la funcția de mail, ignorat; 2) rm-Rf este o funcție distructivă; 3) lohundra Potrivit informațiilor mele, această gaură a apărut relativ recent în bugtrack, iar la momentul redactării, nu s-au eliberat patch-uri, iar pe site-ul oficial a apărut o versiune gălăgioasă. Apropo, aproape am uitat. Această vulnerabilitate vă permite să testați serverul! Ie creați undeva departe, departe, în directorul îndepărtat fișierul lala.php, în care scrieți, de exemplu, aici este: 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. Variante vulnerabile: 5. * Diagnostic: abilitatea de a executa aproape orice interogare sql Căutare victime: fișier pollBooth.php sau, de exemplu, auth.inc.php Î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 ". Diagnosticare: executarea codului de la client Căutare victime: fișier pollBooth.php sau, de exemplu, auth.inc.php (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.);) Vulnerabil Versiuni: 0.4.02 (ultima) Diagnostic: citirea fișierelor pe server Victimele Căutare: fișier / lang / Englign / config 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? 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 "acces" cu valoarea "ok" :)? Nu, dacă ar fi un scenariu privat, original - oriunde s-ar fi dus, pentru că poți afla doar despre bug-ul, uitându-te la codul lui, nu vei 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; Nu am gasit foarte mult o gaura in ea - in primul rand, produsul este destul de tanar, si in al doilea rand, programatorii se gandesc la siguranta atunci cand o scriu, desi, aparent, nu pentru mult timp. Vulnerabil versiuni: Xoops RC1 Diagnostic: executarea unei interogări SQL Căutarea victimelor: fișierul userinfo.php 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;). Dacă ați pus $ uid "$ 7545", atunci PHP va raporta o eroare: MySQL Eroare de interogare: SELECT u. *, S. * FROM x_users u, x_users_status s WHERE Mesaj de eroare: Aveți o eroare în sintaxa SQL lângă '; ȘI u.uid = s.uid "la linia 1 Acest lucru ajută foarte mult - puteți vedea cum funcționează interogarea sql, care vă permite să vă închideți;)! Ei bine, de exemplu ... 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 rezista la 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. Deci ... 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. Astfel, pentru a căuta o victimă, este suficient să tastați în motorul de căutare numele scriptului vulnerabil. Un alt tip de scanere speciale, care, asemeni unui bot de motoare de căutare, verifică adresele URL date pentru prezența fie a unui script specific, fie a unui grup de scripturi. Este clar că o astfel de scanare cu un dial-up sau cu trafic plătit este un non-brainer, deci este mai bine să ai încredere în Altavista;). În general, aceste scannere sunt folosite când lucrați pe un anumit site - este nevoie de o foaie cu cincizeci de scripturi de gaură, iar peste noapte se derulează - în acest scenariu, această scanare este justificată.
u.uid = 7545 $ ȘI u.uid = s.uidArticole similare