Skrypty za "50zł" na przykładzie "demotywatory by lerto.pl"
Wiele razy widziałem oferty skryptów, czy też nawet "poważnych" serwisów za przysłowiowe 50zł (często dosłownie za 50zł). Nigdy jakoś nie zwracałem na nie specjalnej uwagi - wiadomo raczej było, że jaka cena taka jakość. W tej "jakości" spodziewałem się podatności na SQLInjection, na XSS czy też ogólnie średnio optymalnie napisanego kodu. Jednak to co zobaczyłem parę dni temu przeszło moje najśmielsze wyobrażenia i postanowiłem na tym przykładzie opisać jak wyglądają skrypty za 50zł. Wahałem się trochę czy o tym pisać czy nie ale o tym na końcu.
Do rzeczy: parę dni temu na łamach forum php.pl padło pytanie czy warto kupować skrypt za 49,90zł, który to jest pseudoklonem demotywatory.pl (skrypt a'la demotywatory.pl by lerto.pl) Pytający się o to użytkownik wahał się nad kupnem, jednak po paru dniach napisał, że kupił, że wydaje się że działa ale czy ktoś mógłby spojrzeć na kod i powiedzieć czy jest ok czy nie, bo on się totalnie na tym nie zna.
Z racji, że miałem chwilkę czasu, a demo było za darmo do pobrania, więc obejrzałem ten skrypt. Po pierwszych sekundach rzucił mi się w oczy kawałek kodu w każdej sekcji panelu administracyjnego:
<?php
if(empty($_COOKIE['user_adm'])) {
header('Location: ./');
}
?>
Nie mogłem w to uwierzyć, by ktoś, kto sprzedaje taki skrypt, w ten sposób zabezpieczał panel administracyjny skryptu. Szybko więc spojrzałem na logowanie a tam:
<?php
if($_POST['pass'] == $tajnehaslo) {
setcookie('user_adm' , '4dm1n' , time()+3600*336);
header('Location: ./home.php');
exit();
}
?>
Powiem szczerze - szczęka mi na podłogę spadła. A więc to prawda, w XXI wieku jeszcze takie rzeczy się zdarzają i to nie na forum w dziale przedszkole, ale w super hiper skrypcie, co to ma przynieść temu kto go kupi super kasę (ale o tym za chwilę). Nie będę podawał jak wejść na taki panel administracyjny by nie być posądzonym o jakieś nielagalne praktyki, ale każdy średnio zaawansowany przedszkolak wie, że "włamanie" się na tak zabezpieczony skrypt zajmie 10 sekund. Kolejnym super hiper zabezpieczeniem było przechowywanie "tajnego" hasła do panelu administracyjnego w pliku, który bez problemu można było podejrzeć w przeglądarce.
Po przejrzeniu kodu logowania zwykłych użytkowników, okazało się, że również i tam jest podobne "zabezpieczenie", przez co w kolejne 10 sekund można wejść na dowolne konto dowolnego użytkownika w serwisie.
Szybka analiza pozostałego kodu i widać, że skrypt jest podatny na banalne ataki SQLInjection (pomimo zastosowania PDO, co dotychczas wydawało mi się nie możliwe - widać jednak można używać PDO i napisać skrypt podatny na SQLInjection) oraz na banalne ataki XSS. Obie dziury również umożliwiają docelowo zalogowanie się zarówno do panelu administracyjnego jak i na dowolne konto użytkowe.
No i do czego tak naprawdę zmierzam? Przecież chyba każdy mi powie, że po skrypcie za 50zł można było tego oczekiwać. No niby tak. Ja to wiem, zapewne i Wy to wiecie, ale taki klient, który tego nie rozumie może tego nie wiedzieć. Taki klient, owszem, może mieć pewne obawy co do jakości kodu, czy nie będzie wolny, nieoptymalny, ale czy może podejrzewać, że dostęp do panelu admina może mieć każdy w pare sekund? Jak kupujecie chiński samochód to wiecie, że jest słabszej jakości, ale czy podejrzewacie, że silnik po 50km spadnie na asfalt bo zamiast być porządnie umocowany to jest przyklejony taśmą? No raczej tego nie podejrzewacie, a w omawianym skrypcie właśnie tak jest. Dlatego więc należy uprzedzić potencjalnych klientów, by wiedzieli co kupują. No taki kod co tutaj, to ja widziałem na łamach forum w dziale przedszkole raz czy może dwa razy. Już nawet przedszkolacy co sie dopiero uczą, wiedzą że tak się nie pisze a tu....
Jak napisałem na początku, wahałem się, czy pisać o tym czy nie. W sumie każdy kiedyś zaczynał. Oto dlaczego jednak zdecydowałem się o tym napisać:
- Na stronie skryptu mamy tego typu zachwalanie: "Mam dla Ciebie skrypt, który pozwoli Ci zarabiać co miesiąc 100 razy tyle, ile na niego jednorazowo wydasz." i masa innego tego typu bełkotu. Teoretycznie nikt rozsądny na takie teksty nie powinien dać się nabierać, no ale życie pokazuje co innego. Mnie osobiście taki bełkot strasznie irytuje. Nawet jakbym zarobił te 100 razy tyle co na niego wydałem, to równie szybko mógłby stracić znacznie więcej, przez niesamowicie dziurawy skrypt, w którym pierwszy lepszy haker mógłby mi zrobić poważne "kuku".
- Współtwórca na swoim blogu opisuje:
No jeśli ktoś odrzuca kogoś jako sprzedawcę, dlatego, że popełni literówkę i od razu jest leniem, to co można powiedzieć o tym samym "krytyku", który sprzedaje skrypt, nie znając podstawowych podstaw bezpieczeństwa, narażając tym samym swoich klientów na potencjalnie duże straty?Nie kupuj skryptów od… dyslektyków i leni. Jeśli ktoś nie przykłada się do pisowni, dbałości o język, nie może przykładać się do dbałości o kod. Sam, gdy zacząłem programować, stałem się bardzo dokładny i szczegółowy. Stałem się detalistą. Jest to odbiciem mojego kodu – konkretnego, lekkiego, logicznego. Jeśli więc masz do wyboru osobę, która na swojej aukcji pisze „przecierz” zamiast „przecież„, wybierz tę drugą.
- Conajmniej jedna osoba wypowiadała się w komentarzach współtwórcy o tym skrypcie. Jej komentarze nie zostały zatwierdzone. Zaś ja pisałem o tym na profilu facebook lerto.pl, nawet dostałem od nich odpowiedź, ale po kontrargumencie z mojej strony nie było już od nich odpowiedzi. Może jak ktoś publicznie się zapyta, spoza zasięgu ich moderacji, to może dostanie odpowiedź?
Tak więc potencjalni klienci, miejcie na uwadze to, że kupując skrypty bardzo tanio, niekoniecznie trafiacie na okazje. Zazwyczaj trafiacie poprostu na osoby, które dopiero zaczynają, mają małą wiedzę i w ostatecznym rozrachunku możecie sobie bardziej zaszkodzić niż skorzystać.
Acha, żeby nie było, że tylko w skryptach początkujących zdarzają się wpadki. Błędy czy jakieś dziury zdarzają się każdemu, nawet najlepszym i największym. Nie raz się słyszy o jakimś wycieku danych w dużych serwisach, czy o dziurach w programach, z których korzysta masa ludzi. Jednak by przeprowadzić na takich produktach skuteczny atak, potrzeba ciut więcej niż omawiane tu 10 sekund i byle przedszkolak tego raczej nie zrobi.
ps: Na moje pytanie na facebooku odpowiedziano mi że ja testowałem wersję demo, a w normalnym skrypcie na pewno nie ma takich dziur. Znalazłem jednak w sieci jeden serwis postawiony na tym skrypcie i on wskazywał wszelkie oznaki podatności na omawiane tu dziury.
ps2: Lerto.pl, w wątku na fb, napisali mi, że po odkryciu luk, naprawiają wszystko klientom za darmo. Pozostaje mieć nadzieję, że będą potrafili to naprawić i że przekażą poprawki klientom. Chyba coś w tym kierunku robią, bo stroną demo skryptu, już jakby jest ciut ciut bezpieczniejsza.
ps3: Nie wnikałem w funkcjonalność skryptu jako serwisu a'la demotywatory pl. Średnio mnie to interesowało, żeby nie powiedzieć, że w ogóle. Zainteresowałem się skryptem pod względem bezpieczeństwa, gdyż prosił o to jeden z kupców.
ps4: Nie ujawniłem tu żadnych tajemnych kodów. Skrypt demo, jest do pobrania na stronie skryptu, w celu między innymi, tu cytuję, "Zweryfikuj kod źródłowy"
ps5: Patrząc na stronę lerto.pl, istnieją oni w branży od 6 lat. Teoretycznie więc po takim czasie pewne podstawy siłą rzeczy powinno się już znać.
Edit (2011-10-26):
I stało się. Wątek na facebook, w którym zadałem im parę niewygodnych pytań, został skasowany.