To może być długi, długi strzał, ale jestem całkowicie zaskoczony, co może być przyczyną problemu:Co może być shufflling moje parametry ciąg kwerendy skonstruowane w JavaScript?
Dostarczam JavaScript po stronie klienta, który analizuje pewne parametry na stronie, na której jest osadzony, używa te parametry do skonstruowania URL i wstrzyknąć iframe przy użyciu tego adresu URL do strony jak:
var queryParams = {
param: 'foo'
, other: 'bar'
};
zostaje przekształcony:
<iframe src="http://example.net/iframes/123?param=foo&other=bar"></iframe>
To działa całkiem dobrze, jestem dostarczając około 1,5 miliona przesiał wniosek ts dziennie. Jeszcze niedawno zauważyłem, że w około 3,000 przypadków dziennie wartości parametrów kwerendy tasuje, więc czegoś takiego dostaje wniosek:
<iframe src="http://example.net/iframes/123?param=ofo&other=rba"></iframe>
Sądząc po logach to jest przywiązane do konkretnych użytkowników, a jumbling znaków stanie się na nowo na każde żądanie, więc mogę zobaczyć sekwencje tak, gdy użytkownik przegląda stronę z wielu stron za pomocą skryptu:
108.161.183.122 - - [14/Sep/2015:15:18:51 +0000] "GET /iframe/ogequl093iwsfr8n?param=3a1bc2 HTTP/1.0" 401 11601 "http://www.example.net/gallery?page=1" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"
108.161.183.122 - - [14/Sep/2015:15:19:07 +0000] "GET /iframe/ogequl093iwsfr8n?param=a21b3c HTTP/1.0" 401 11601 "http://www.example.net/gallery?page=2" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"
108.161.183.122 - - [14/Sep/2015:15:19:29 +0000] "GET /iframe/ogequl093iwsfr8n?param=ba132c HTTP/1.0" 401 11601 "http://www.example.net/gallery?page=3" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"
401 dzieje się celowo jako serwer oczekuje param=abc123
.
Zauważyłem również, że większość błędów ma miejsce w przeglądarkach Firefox i Safari, a Google Chrome nie zażądał żadnego błędnego adresu URL.
Biblioteka, której używam do przekształcenia obiektu w ciąg zapytania, brzmi: query-string - ale patrząc na kod źródłowy, nie widzę żadnego potencjalnego błędu tego typu, nie ma nic, co można zrobić z wartościami, które nie wykonuje się kluczy (które nie są pomieszane).
Czy ktoś kiedykolwiek napotkał coś podobnego? Czy to jakieś dziwne rozszerzenie przeglądarki? Czy jest to zderzenie mojego skryptu z inną biblioteką rozszerzającą prototypy? Czy to złośliwe oprogramowanie? Czy jest to coś, czego zupełnie nie jestem świadomy? Byłbym wdzięczny za każdą wskazówkę, ponieważ jestem naprawdę nieświadoma i to doprowadza mnie do szału.
EDYTOWANIE: Właśnie odkryłem, że inna z naszych publicznych usług jest obecnie badana przez coś zwanego "Burp Suite". Spoglądając na ich stronę widzę, że mają narzędzie o nazwie "Payload fuzzing", które wydaje się robić dokładnie to, co jest tutaj opisane: https://portswigger.net/burp/help/intruder_gettingstarted.html lub tutaj: https://portswigger.net/burp/help/intruder_using.html#uses_enumerating - Całe narzędzie pachnie pół-rybi do mnie, więc to może być coś warto zbadać dalej. Czy ktoś jeszcze słyszał o tym zestawie narzędzi?
@PaulRoub on nie mówi o porządku params, ale wartość każdego paramu została przetasowana 'param = ofo'. –
Hej, skąd są pobierane wartości queryParams? Jeśli zostaną złapani ze strony internetowej, mogą łatwo zostać zmienione przez cokolwiek z tłumaczy na roboty. – jjbskir
@jjbskir są one rzeczywiście pobierane z DOM strony hosta, więc jestem świadomy, że można je zinterpretować - chciałbym wiedzieć więcej o tym, co z nimi jest. Łańcuchy są zawarte w nazwach klas i atrybutach danych. Większość z nich to losowe ciągi alfanumeryczne à la '/ [a-z0-9] {32}/i' – m90