Wyświetlanie zdalnej zawartości - wtf i dlaczego należy to wyłączyć

Data: 2018-02-18, autor: Michał Misztal

Po raz pierwszy z tym zagadnieniem spotkałem się chyba w 2008 roku kiedy z Outlook Expressa przeniosłem się na Thunderbirda. Wtedy Thunderbird ostrzegał, że dba o moją prywatność i nie będzie ładował zdalnej zawartości. Pomyślałem - ok, dobrze. I to wszystko. Super, że Mozilla w taki sposób podchodzi do kwestii bezpieczeństwa.

Po wielu latach używanania Thunderbirda postanowiłem zmienić klienta i zmienić wysłużonego POPa na IMAP. Tutaj wybór padł na Sylpheed, ale nie wykluczam również Claws Mail. Oba są lekkie, funkcjonalne i domyślnie nie ładują zdalnej zawartości. Ba, wyświetlają niesparsowany text, a zawartość HTML czyszczą ze znaczników. Nie każdemu takie coś odpowiada - bo kolorków nie ma. Mnie pasuje.

A dlaczego pasują mi takie ceregiele? Bo w sieci nikt nie jest tym za kogo się podaje. Gdybym był myślącym spamerem to nie rozrzucałbym się spamem na prawo i lewo. Byłaby wtedy większa szansa na zakwalifikowanie moich wiadomości jako spam. Co więc robią spamerzy (i nie tylko)?

Utwórzmy sobie prostą aplikację w php - automat spamera.



define("ROOT", "/spam/");
define("DBHOST", "localhost");
define("DBNAME", "spam");
define("DBUSER", "user");
define("DBPASS", "pass");

class Route {

    function __construct() {
        $this->url = filter_var($_GET['url'], FILTER_SANITIZE_STRING);
        $this->zapytanie = explode('/', $this->url);
        $this->identyfikator = $this->zapytanie[0];
        $this->db = new PDO("mysql:host=" . DBHOST . ";dbname=" . DBNAME, DBUSER, DBPASS);
    }

    function pobierzDane() {
        $result = $this->db->query("select * from rekordy where identyfikator='{$this->identyfikator}';");
        $dane = $result->fetch(PDO::FETCH_NAMED);
        $this->dane = $dane;
        if (is_array($dane)) {
            return true;
        }
        return false;
    }

    function pokazZdjecie() {
        echo "<img style='max-width: 50px;' src='".ROOT."{$this->dane['prawdziweZdjecie']}'>";
    }

    function ustawStatusCelu($stan = 1) {
        $sql = "update rekordy set aktywny={$stan} where id={$this->dane['id']};";
        $sth = $this->db->query($sql);
    }
}

$app = new Route();
if ($app->pobierzDane()) {
    $app->ustawStatusCelu(1);
    $app->pokazZdjecie();
}else{
    echo "<img style='max-width: 50px;' src='".ROOT."1.jpg'>";
}

.htaccess



RewriteEngine On

RewriteBase /spam/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Tworzymy bazę



CREATE TABLE `spam`.`rekordy` ( `id` INT NOT NULL AUTO_INCREMENT , `identyfikator` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL , `mailOfiary` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL , `podstawioneZdjecie` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL , `prawdziweZdjecie` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL , `aktywny` BOOLEAN NOT NULL DEFAULT FALSE , PRIMARY KEY (`id`)) ENGINE = InnoDB;

Dodajemy przykładowe ofiary, np



insert into rekordy (identyfikator,mailOfiary,podstawioneZdjecie,prawdziweZdjecie) values ('hf532g4','pl@chuck.norris','promocja.jpg','1.jpg')
insert into rekordy (identyfikator,mailOfiary,podstawioneZdjecie,prawdziweZdjecie) values ('abc','zenek@diskopolo','akuku.jpg','2.png')

Teraz stwórzmy szablon html maila, niech będzie coś takiego



<!doctype html>
<html lang='pl'>
    <head>
        <title>Omg, jestem celem...</title>
        <style>
            iframe  {overflow: hidden;border-width: 0px; height: 200px;}
            iframe * {overflow: hidden;}
        </style>
    </head>
    <body>
        <iframe src="http://localhost/spam/abc"></iframe>
    </body>
</html>

Zasada działania jest następująca. Spamer zdobywa nasz adres email i dodaje go do spamlisty. Na początku wartości są następujące

Ryc. 1.

Czyli figurujemy jako nieaktywni. Powiedzmy, że spamer wysyła raz na jakiś czas maila do wszystkich z listy. Ten który "odpowie", otrzyma status aktywnego i subskrypcję spamu.

Ryc. 2. Nic podejrzanego
Ryc. 3. A jednak, zostaliśmy zapisani jako aktywni odbiorcy spamu

Przypadek z iframe jest prosty ale pokazuje jak całość działa. Nie musi być to zresztą wcale iframe. Całość przechodzi przez automat spamera który odpowiednio kataloguje rekordy. Dzięki temu może pozbyć się nieaktywnych adresów z bazy. Bo po co komu odbiorca który nigdy nie przeczyta wiadomości. Odbiorca wcale nie musi nic robić - wystarczy, że wyświetli maila a jego program pocztowy pobierze zdalną zawartość.

Możliwości na tym się nie kończą. Ale ciąg dalszy innym razem.

Skomentuj lub zgłoś błąd

© Michał Misztal 2018

Czytasz właśnie

Wyświetlanie zdalnej zawartości - wtf i dlaczego należy to wyłączyć
Autor: Michał Misztal
Data: 2018-02-18

Tagi

Podobne wpisy