Jump to content
ghici

[Tutorial] E-Mail injection

Recommended Posts

Daca aveti un site si un formular de mail in sectiunea contact, probabil ati fost 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 trimite mail. Tehnica e folosita in majoritata cazurilor de spameri sau de persoane care 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 trimite 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.

<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:

$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 este 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 inseamna ca se pot "injecta" date care vor fi trimise ca headere in mesaj. Ganditi-va ce s-ar intampla daca dupa adresa de mail am adauga urmatorul text: Cc%3A%20victima @ 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, caracterul ':' este transformat in '%3A' iar caracterul ' ' (spatiu) este transformat in '%20'. Deci, ce am pus acolo este echivalent cu: "Cc: victima @ server.com".

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 un header va trebui sa editam manual adresa respectiva si sa o facem de forma: http : //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 rand nou (%0A e ENTER codat pentru metoda GET) si am adaugat Cc%3A%20victima @ domeniu.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 dintre casute va fi cea specificata de autorul scriptului iar cea de-a doua va fi cea 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 nu mai trimite mesajul si la adresa implicita, schimbati Cc: cu To:. In multe cazuri functioneaza si adresa implicita va fi ignorata in favoarea adresei din linia To:.

OK, acum avem un formular care se poate exploata. De aici poate face fiecare dupa cum il duce imaginatia. E relativ usor sa faceti un script care va apela formularul cu parametrii diferiti pentru fiecare adresa dintr-o lista sau ceva asemanator.

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 complicat 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 va putea face un script care sa-i faca treaba pentru ca scripturile nu pot citi codul din imagine

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...