Sunteți pe pagina 1din 2

Daca aveti un site si un formular de mail in sectiunea contact, probabil ati fos

t deja victima unui "E-Mail Injection".


La ce e bun ?
E-Mail injection se refera la o vulnerabilitate care apare in foarte multe site-
uri si care permite unui atacator sa "injecteze" headere in scriptul care trimit
e mail. Tehnica e folosita in majoritata cazurilor de spameri sau de persoane ca
re dintr-un motiv sau altul vor sa trimita un mesaj 100% anonim.
Cum functioneaza ?
Pentru a injecta mail avem nevoie o victima cu un formular vulnerabil care trimi
te mail prin functia mail() din PHP.
Sa luam urmatorul scenariu:
1. Formularul:
Ceva simplu cu un camp From (sau 'Mailul dv.') si un camp text in care sa puteti
scrie mesajul. Probabil ati vazut asa ceva pe multe site-uri.
Cod:
<form method="GET" action="mailer.php">
From:<input type="text" name="from" />
Message:<textarea name="message" cols="20" rows="7"></textarea>
<input type="submit" value=" Send! " />
</form>
2. Scriptul:
Un script simplu care ia datele si le trimite:
Cod:
$from = $_GET['from'];
mail('adresa la care se trimite','subiect',$_GET['message'],"From: $from");
3. Concret:
Dupa cum vedeti, functia mail trimite mail la o anumita adresa iar expeditorul e
ste adresa care o introduceti in campul 'from'. OK, nu e chiar asa, dar asa pare
la prima vedere. Daca al patrulea camp al functiei mail() (campul corespunzator
headerelor) contine cuvantul cheie From:, clientul de mail considera ca mesajul
vine de la adresa specificata in campul 'from'.
Nimic iesit din comun pana acum, nu ? Asa e... dar in simplitatea lui, scriptul
poate fi exploatat. Dupa cum se vede campul 'from' nu este filtrat. Asta inseamn
a ca se pot "injecta" date care vor fi trimise ca headere in mesaj. Ganditi-va c
e s-ar intampla daca dupa adresa de mail am adauga urmatorul text: Cc%3A%20victi
ma @ server.com. Ca sa lamuresc putin textul, formularul trimite prin GET, ceea
ce inseamna ca unele caractere sunt "codate" pentru a nu aparea erori. Astfel, c
aracterul ':' este transformat in '%3A' iar caracterul ' ' (spatiu) este transfo
rmat in '%20'. Deci, ce am pus acolo este echivalent cu: "Cc: victima @ server.c
om".
Daca trimitem datele din formular vom vedea in bara de adresa un camp de o forma
asemanatoare cu: http : //server.com/mailer.php?from=mail%40domeniu.com&message
=mesaj. Asta, bineinteles, pentru ca am trimis prin metoda GET. Ca sa injectam u
n header va trebui sa editam manual adresa respectiva si sa o facem de forma: ht
tp : //server.com/mailer.php?from=mail%40domeniu.com%0ACc%3A%20victima @ domeniu
.com&message=mesaj.
Ce am facut, de fapt ? am modificat valoarea variabilei from si am adaugat un ra
nd nou (%0A e ENTER codat pentru metoda GET) si am adaugat Cc%3A%20victima @ dom
eniu.com care, dupa cum am spus mai sus, este "Cc: victima @ domeniu.com". Cand
apelam adresa de mai sus acelasi mesaj va fi trimis in 2 casute de mail. Una din
tre casute va fi cea specificata de autorul scriptului iar cea de-a doua va fi c
ea specificata in linia Cc:. Altfel spus, avem un script care cu mici "retusari"
va trimite mailul la adresa dorita de noi, nu doar la cea implicita. Pentru a n
u mai trimite mesajul si la adresa implicita, schimbati Cc: cu To:. In multe caz
uri functioneaza si adresa implicita va fi ignorata in favoarea adresei din lini
a To:.
OK, acum avem un formular care se poate exploata. De aici poate face fiecare dup
a cum il duce imaginatia. E relativ usor sa faceti un script care va apela formu
larul cu parametrii diferiti pentru fiecare adresa dintr-o lista sau ceva aseman
ator.
Cum ne putem proteja ?
Relativ simplu. Va dau 3 idei:
1. Folositi POST ca metoda de trimitere in loc de GET. Cu POST e o idee mai comp
licat si multi se lasa descurajati
2. Folositi un filtru care verifica daca exista mai mult de un caracter '@' sau
daca exista cuvintele cheie "From:", "To:", "Cc:", "Bcc:".
3. Folositi un formular cu cod de securitate. Adica, o imagine care va arata un
cod care trebuie introdus intr-un camp al formularului. Avantajul mare la codul
de securitate e ca... chiar daca reuseste cineva sa trimita un mail anonim, nu v
a putea face un script care sa-i faca treaba pentru ca scripturile nu pot citi c
odul din imagine

S-ar putea să vă placă și