zordon
27.10.2011, 21:24:48
Witam,
dla klientki robiłem integrację z serwisem platnosci.pl. Wszystkie testy były ok, wszystko śmigało jak należy.
Po pewnym czasie klientka odebrała maila od platnosci.pl - 100 nieodebranych raportów.
Przejrzałem historię raportów - a tam odpowiedź mojego skryptu online (zamiast spodziewanego "OK"):
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head><script language="JavaScript">var pn = "CSRT"; var pv = '3655584697615035707';
eval(function(a){var e=a.split("");var g=e.length;var c=parseInt(e[0]+e[1],16);var b=String.fromCharCode©;for(var d=2;d<g;d++){var f=(parseInt(e[d]+e[d+1],16)-c)%256;c=f;b+=String.fromCharCode(f);d++}return b}("288edbe3d1d7ddd8dd968d91908da4f1d7d39283a0a3c7c (...)
W skrypcie mam loggera, który loguje nawet odwiedzenie adresu (bez danych z post) - mimo 100 prób platnosci.pl zadnego wpisu w logach. Po wejściu na adres "ręcznie" (wpisując adres w przeglądarkę) wszystko wydaje się być ok, zero doklejonych skryptów, logger loguje wejście...
Ściągnąlem pliki z serwera, przeskanowałem programem antywirusowym, przeszukałem pod kątem funkcji eval, znaczników script, przeszukałem kluczowe pliki serwisu pod kątem doklejonych skryptów, nic. Wszystko wydaje się być w porządku.
Napisałem do platnosci.pl, czekam na odpowiedź. Klientka odbiera płatności, wypłaca je sobie na konto więc chyba atak nie jest skuteczny, ale mimo wszystko jakaś luka gdzieś chyba jest.
Jakieś sugestie gdzie jeszcze mogę szukać błędu, jak namierzyć problem?
redeemer
27.10.2011, 22:58:28
Możesz wykonać ten skrypt i zobaczyć gdzie się łączy, a potem wklepać w google. Może dowiesz się coś więcej.
zordon
27.10.2011, 23:28:15
nie bardzo, kod, który odczytuję z historii raportów na platnosci.pl ma limit długości i jest niekompletny. Logować nie mam czego bo teoretycznie mój skrypt online nie jest w ogóle wykonywany. Wygląda to tak, jakby przechwytywane było żądanie... na stronie płatnosci adres skryptu online jest oczywiscie prawidłowy. Dziwne że po wpisaniu tego samego adresu w przeglądarce skrypt przechwytywany już nie jest ... może jednak jakiś problem z integracją?
darko
27.10.2011, 23:51:02
Z Twojego opisu wynika, że możesz mieć do czynienia z atakiem typu man in the middle, jednak wydaje się to mało prawdopodobne. Powiększ funkcjonalność loggera o jakieś dodatkowe dane, wszystko, co pomoże utwierdzić się w przekonaniu, że faktycznie masz do czynienia z przechwytywaniem żądań.
zordon
28.10.2011, 08:55:13
Tak jak napisałem, skrypt platnosci.pl w ogóle nie wywołuje mojego skryptu online, więc logger nie ma co logować...
Musiałbym ustawić loggera, aby rejestrował każde żądanie do sklepu - tylko czego konkretnie szukać w takim nawale informacji?
darko
28.10.2011, 10:02:58
Oczywiście zakładam, że po wszystkich testach zmieniłeś namiary na pos'a, klucze i typ płatności z testowej na dane produkcyjne? Zmień loggera, żeby odbierał dane przesłane $_POST'em - na UrlOnline informacje o zmianie statusu płatności (raporty) przychodzą właśnie $_POST'em i loguj możliwie wszystkie dane przewidziane w odpowiedzi od Platnosci.pl
// edit
Z tych strzępów kodu, po pewnych modyfikacjach, tworzona i wywoływana evalem jest jakaś dwuargumentowa funkcja, a właściwie początek jej definicji znajdujący się w zmiennej b:
var a = "288edbe3d1d7ddd8dd968d91908da4f1d7d39283a0a3c7c";
var e=a.split("");
var g=e.length;
var c=parseInt(e[0]+e[1],16);
var b='';//String.fromCharCode;
for(var d=2;d<g;d++){
var f=(parseInt(e[d]+e[d+1],16)-c)%256;
c=f;
b+=String.fromCharCode(f);
d++
}
alert(b);
// zwraca function(e,d){var c=faᆱ
to jest na jakimś OsCommerce lub innym OS?
Arhimenrius
28.10.2011, 10:59:14
może to i głupie, ale spróbuj wypisać wyjątek " throw new Exception " by sprawdzić co jest nie tak?
darko
28.10.2011, 11:00:52
~Arhimenrius ale co to da, że sobie wyrzuci sam wyjątek, któremu trzeba przecież trzeba podać $code i $msg ? Sam ma sobie wypisać, co jest według niego nie tak?
Arhimenrius
28.10.2011, 11:13:38
dlatego mówię że to mój głupi pomysł

myślałem o tym by właśnie w tym wyjątku wypisał $code i $msg
zordon
28.10.2011, 17:28:21
@Arhimenrius
nie miałbym nawet gdzie rzucić tego wyjątku: żądanie z platnosci.pl w ogóle nie dociera to tego skryptu. Więc albo coś się dzieje po stronie płatności, albo u mnie coś miesza z dispatcherem

@darko
Dzięki za zainteresowanie. Dobry pomysł z tym logowaniem $_POST. Po powrocie z pracy wbiję gdzieś loggera i potestuję, może coś się uda złapać
Dodałem nowy punkt płatnosci - działa wszystko bez zarzutu.
Wyszła na jaw jednak taka sytuacja: niedawno klientka zatrudniła firmę od SEO. Oni zrobili przekierowanie 301 z adresu "bez www" na adres "z www". W panelu platnosci.pl byl adres "bez www". Aplikację zrobiłem w zendzie, wpisując adres (ciągle bez www) z błędną akcją, ale na kontrolerze platnosci (np poprawny adres:
http://nazwasklepu.pl/platnosci/online - błędny adres
http://nazwasklepu.pl/platnosci/niematakiejakcji) w raportach pojawiał się ciągle ten sam błąd (eval....).
Po zmianie na adres poprawny "z www" (http://www.nazwasklepu.pl/platnosci/online) działa...
Czy istnieje możliwość, że jest to po prostu zabezpieczenie platnosci.pl przed przekierowaniem? Oni się jeszcze nie odezwali, a telefon czynny tylko od poniedziałku do piątku - dlatego wszelkie opinie do poniedziałku byłyby mile widziane
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.