Email injection

Ostatnio dużo się pisze na temat sql injection zapominając o innych groźnych atakach. Całkiem niedawno ktoś przez mój serwer, a konkretnie przez jeden z skryptów php typu ‘kontakt’ wysłał masę spamu na AOL przez co AOLowcy się na mnie obrazili ;)

Pierwsze co zrobiłem to odpowiedni wpis w mod_security. Na sieci znalazłem wiele wersji np:

SecFilterSelective ARGS_VALUES „\n[[:space:]]*(to|bcc|cc)[[:space:]]*:.*@”

co niestety nie dało rady (?!) spam poszedł jeszcze raz. (na gotroot.com znajdziecie więcej regułek do mod_security).

Spam poszedł przez specjalnie spreparowany mail w MIME. W takim wypadku najlepiej filtrować inputa w poszukiwaniu róznych znaków np.

< ?php
$from=$_POST["sender"];
if (eregi(„\r”,$from) || eregi(„\n”,$from)){
die(„Why ?? :( „);
}
?>

(/n = %0A /r=%0D)

Dopiero to wychwyciło wstrzyknięty spam kodowany w MIME. Więcej o tym (wraz z przykładami) można przeczytać na SecurePHP.

Póki nie miałem własnego serwera nie sądziłem, że można być narażonym na kilkaset różnych ataków dziennie :) Logi mod_security normalnie puchną. Najwięcej jest ataków na phpBB, awstats i wordpressa. Boty szukające takich skryptów najlepiej od razu banować bo potrafią one setki razy dziennie zapuszczać tysiące requestów ;)

Podobne wpisy

Kategoria: PHP Otagowane jako , , , , , 5 komentarzy

5 Responses to Email injection

  1. XaV1er 18-03-2006, 15:20

    Witam,

    ja przy formularzy kontaktowym stosuje weryfikacje adresu email (funkcje wklejam ponizej), ktora wg mnie takze zapobiega stosowaniu email injections … no chyba ze sie myle? :)

    // weryfikacja poprawnosci adresu email
    function verifyEmail($email) {
    $wholeexp = ‘/^(.+?)@(([a-z0-9\.-]+?)\.[a-z]{2,5})$/i’;
    $userexp = „/^[a-z0-9\~\!\#\$\%\&\(\)\-\_\+\=\[\]\;\:\’\”\,\.\/]+$/i”;
    if (preg_match($wholeexp, $email, $regs)) {
    $username = $regs[1];
    $host = $regs[2];
    if (checkdnsrr($host, MX)) {
    if (preg_match($userexp, $username)) {
    return true;
    } else {
    return false;
    }
    } else {
    return false;
    }
    } else {
    return false;
    }
    }

  2. normanos 18-03-2006, 15:46

    Nie jestem specjalistą ale chyba się mylisz bo ja też miałem sprawdzanie poprawności emaila (chociaż może diabeł tkwi w szczegółach tj. tutaj w wyrażeniach regularnych), a spam przeszedł. Niestety nie orientuje się w mailach i kodowaniu mime ale na stronie do której dałem linka w tekście jest to dokładnie opisane wraz z przykładami.

  3. XaV1er 18-03-2006, 18:54

    mnie sie zdaje, ze tutaj kluczowa funkcja to checkdnsrr($host, MX), no bo przy typowym email injection (dopisanie dodatkowych linii do email headera w polu formularza) nigdy nie powinna zwrocic true … no chyba, jak juz napisalem, sie myle ;) nie testowalem.

  4. Całek 07-04-2006, 17:22

    Kiedyś pisałem o tym samym problemie u siebie:
    http://calek.info/index.php?showNews=228

    Na szczęście nie wykorzystano mnie tak, jak Ciebie ;>)

  5. Pingback: » 100 dni adminowania mount /dev/normanos

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*

© 2005-2012 normanos.com

domeny i hosting