Jak przeanalizować link, aby znaleźć rzeczywisty link

13

Czasami podczas pobierania czegoś okazuje się, że linki nie są bezpośrednie do plików.

Na przykład, to jest link do pobrania pliku PDF:

http://ishare.down.sina.com.cn/15181391.PDF?ssig=2jEFaNQs7K&Expires=1312905600&KID=sina,ishare&IP=1312761745,68.50.222.

Zastanawiałem się, jak obliczyć / zhakować rzeczywisty link (np. Http: //*.PDF) do pliku?

Jakie są nazwy takich i podobnych technik nie pokazywania bezpośrednich linków? Niektóre odniesienia, takie jak Wikipedia, ...?

Tim
źródło
1
Naprawiono twój link. Kliknij, editaby zobaczyć źródło Markdown dotyczące tego, jak to zrobiłem.
Joel Coehoorn,

Odpowiedzi:

3

Tak, czasami .

Często zdarzają się dwie rzeczy. Twój link już nie działa, więc nie jestem pewien rzeczywistego scenariusza w tym przypadku, więc podsumuję inny link.

Przekierowanie HTTP

Oto, co widzisz w przypadku Bit.lyinnych usług. Następnie należy podać odpowiedź przekierowania HTTP. Podczas odwiedzania strony http://bit.ly/oH3410 następuje przekierowanie do faktycznego adresu URL. Czasami jeden adres URL przekierowuje na inny. Możesz to zobaczyć, jeśli podłączysz adres URL do http://web-sniffer.net/ lub za pomocą [curl][1] -I http://bit.ly/oH3410zobaczysz zwroty 301 wskazujące na nową lokalizację.

Aby poradzić sobie z przekierowaniem HTTP, wystarczy zapętlić żądanie HTTP HEAD, dopóki nie przestaniesz otrzymywać odpowiedzi w latach 300-tych (mam nadzieję, że dostaniesz 200). Pamiętaj, że mogą przekierowywać w pętli, która nigdy się nie skończy. Możesz to zrobić za pomocą CURL lub dowolnego narzędzia HTTP.

Strona pobierania

Z tego korzysta większość witryn pobierania. Klikasz link do pobrania, co prowadzi do strony z wieloma reklamami i mówi „Twoje pobieranie wkrótce się rozpocznie” coś podobnego. [ Przykład ]. Dzięki nim możesz spróbować parsować rzeczywisty bezpośredni link z adresu URL, ale byłoby to specyficzne dla witryny, a większość stron nie będzie go zawierała, aby zapobiec obchodzeniu go. Odbywa się to za pomocą meta http-equiv="refresh"znacznika w nagłówku lub JavaScript (najczęściej). JS zazwyczaj ma jednak awarię nagłówka.

Istnieje jednak rozwiązanie. Jeśli spojrzysz na źródło na stronie pobierania, zwykle zobaczysz <meta http-equiv="refresh">tag (zwykle w <noscript>tagu) z atrybutem URLtego wskazującym na rzeczywiste pobieranie. Więc użyj CURL (lub innego narzędzia HTTP), aby pobrać stronę, przeanalizować ją i pobrać tę wartość. Witryna może to jednak wykluczyć, jeśli chce być naprawdę paskudna, co wymaga JavaScript do pobierania plików.

Prawdopodobnie istnieje również blok JavaScript, który prowadzi również do pobierania. Może być zaciemniony lub połączony z innego adresu URL. Twój przebieg może się różnić, próbując to przeanalizować. Na stronie może również znajdować się „bezpośredni link”. Możesz wypróbować kilka technik, aby to znaleźć, ale znowu można to zaciemnić za pomocą JavaScript lub nawet całkowicie pominąć.

Jim McKeeth
źródło
11

To może nie być możliwe. Witryny mogą przekazać Ci setki przekierowań, zanim dotrzesz do pliku.

Ponadto javascript może być używany do udostępniania linków na podstawie adresu URL podanego serwerowi.

soandos
źródło
Dzięki! Jakie są nazwy takich i podobnych technik nie pokazywania bezpośrednich linków? Niektóre odniesienia, takie jak wikipedia, ...?
Tim
1
Tylko przekierowanie. nie znam żadnych innych technik. Zobacz tutaj
soandos
Kiedy linki prowadzą do plików i nie są zwykłymi stronami, zwykle nazywa się to anty-pijawką .
Synetech,
7

Witrynę można skryptować, a gdy otrzyma określone polecenie (adres URL może przekazać polecenie), może wówczas zwrócić plik PDF (lub inny plik) bez przekierowywania. Jest to kwestia po stronie serwera i zależy od sposobu kodowania witryny. Bez faktycznego żądania tego linku od serwera jest mało prawdopodobne, abyś mógł dowiedzieć się, jak uzyskać plik. A czasem nawet jeśli znasz bezpośredni adres URL, możesz nie mieć uprawnień dostępu do bezpośredniego linku. Niektóre witryny są kodowane, więc bezpośrednie linki nie będą działać.

Ben Richards
źródło
1
To jest poprawne. Drobny dodatek: gdy klient uzyskuje dostęp do takiego niejasnego łącza, a serwer chce powiedzieć klientowi, że tak naprawdę jest to plik pdf i należy go zapisać jako plik pdf - serwer informuje go o tym za pośrednictwem HTTP typu treści nagłówek.
vtest
3

Jest to właściwie „prawdziwy” adres URL, ponieważ w przypadku dobrze chronionych witryn internetowych należy przesłać pełny adres URL serwera, aby uwierzytelnić żądanie. Następnie możesz zostać przekierowany na inny adres URL, ale zwykle będzie to jednorazowy adres. Innymi słowy, te strony pobierania plików nigdy nie dadzą ci bezpośredniego łącza do pijawki.

W tym konkretnym adresie URL parametry chronione podpisem cyfrowym wyraźnie określają ograniczenia dotyczące czasu i adresu IP programu pobierającego. W przypadku witryny o takim poziomie kompetencji jest mało prawdopodobne, że zostaną ujawnione bezpośrednie linki.

billc.cn
źródło
3

Te przekierowania są również często kojarzone ze stanem sesji. Przed udostępnieniem linku dokonają sprawdzenia uprawnień na podstawie Twojego loginu sesji - brak dostępu do zasobu = brak dostępu do łącza do zasobu. Można go użyć do zapewnienia dostępu do plików / zasobów znajdujących się poza katalogiem głównym i przesłanych strumieniowo z powrotem do requestera przez aplikację, zamiast być dostępnym poprzez bezpośredni adres URL. Ale tylko wtedy, gdy pozwalają na to twoi prywatni.

Przykład obu jest tutaj. Nastąpi przekierowanie do innego adresu URL na podstawie ciągu „mkoenig”, który dodaje dodatkowe parametry adresu URL. Przekierowanie odbywa się w kodowaniu po stronie serwera, czego nie można (a przynajmniej nie powinieneś) widzieć. Jeśli następnie przejdziesz do „Pliki internetowe”, wymienione pliki to tylko pliki, które nauczyciel upublicznił. Może mieć tam inne pliki, do których nie możesz się dostać i które nie zostaną wymienione. Zajmuje się to również kodowaniem po stronie serwera w odniesieniu do tego, co zwróci / nie zwróci.

Bez zhakowania serwera lub dostępu do kodu źródłowego po stronie serwera nie sądzę, aby można było uzyskać rzeczywisty link, a nawet jeśli możesz, może nie być pomocny, chyba że prywatni sesje powiedzą serwerowi, aby dał ci dostęp do niego .

Greg

gthomson
źródło
2

Jak wyżej, jest to niemożliwe. Zalecam, aby odpalić maszynę wirtualną lub pobrać kopię Sandboxie, aby zawierała przeglądarkę dla takich łączy.

Edytować

Nie wiedząc, jakiego systemu operacyjnego używasz, dam ogólną odpowiedź tutaj.

VM jest skrótem od maszyny wirtualnej. Zasadniczo jest to komputer utworzony przez oprogramowanie działający w komputerze. Maszyna wirtualna będzie miała własny system operacyjny i przeglądarkę. Mimo że nadal korzysta z Internetu i dysku twardego komputera, jest to odrębna maszyna z punktu widzenia systemu operacyjnego. Dzięki temu jest wygodny jak skrawek papieru. Wszystko, co dzieje się w maszynie wirtualnej, nie wpływa na twoją prawdziwą maszynę.

Virtualbox to oprogramowanie, które polecam dla maszyny wirtualnej, chyba że używasz Windowsa, wtedy polecam Virtual PC.

Sandboxie przypomina maszynę wirtualną, ale izoluje tylko określone aplikacje. Możesz mu powiedzieć, aby uruchamiał kopię przeglądarki, a wszelkie pliki lub czynności, które wykonuje przeglądarka, są przekierowywane do folderu tymczasowego. Jeśli więc spróbuje pobrać wirusa, zostanie przekierowany do folderu tymczasowego, który jest poddany kwarantannie z pozostałej części komputera. Nie jest tak solidny jak VM, ale zużywa mniej procesora / pamięci i jest szybszy i wygodniejszy.

Najpierw spróbuję Sandboxie. To mniejsza krzywa uczenia się.

surfasb
źródło
1
Dzięki! Co rozumiesz przez „odpalenie maszyny wirtualnej lub pobranie kopii Sandboxie, aby zawierała przeglądarkę dla takich linków”? Kilka odniesień do wyjaśnienia, jak zrobić dwie rzeczy?
Tim
Przepraszam, rozwinę moją odpowiedź.
surfasb
Dzięki! Mój system operacyjny to Ubuntu. Ale nie rozumiem, w jaki sposób użycie maszyny wirtualnej może zidentyfikować bezpośrednie łącza?
Tim
1
Tak naprawdę nie identyfikuje linku dla Ciebie. Ale tworzy bezpieczne środowisko, które pomoże ci zidentyfikować link. Nie można zidentyfikować przekierowań bez kompilacji strony.
surfasb
1
Nie sądzę, żeby jego pytanie dotyczyło bezpieczeństwa. Po prostu szuka sposobu, aby uzyskać bezpośredni link do pliku.
magnetyczny
2

To nie możliwe, aby dowiedzieć się rzeczywiste połączenie.

Serwer obsługuje żądania plików, używając części Rewrite WWW (na przykład dla serwerów Apache), więc na przykład możesz przejść do strony www.example.com/13-this-site-has-nice-page-name.html, ale w rzeczywistości możesz uzyskać dostęp do pliku php z parametrem, takim jak:www.example.com/site_handler.php?UID=13

nawet jeśli uzyskasz dostęp do pliku pdf, może istnieć przekierowanie po stronie serwera.

W przypadku pobierania plików za pomocą programów obsługi może to być nieco trudniejsze, ponieważ możesz przejść do strony, która jest tylko procedurą pobierania plików, na przykład: www.example.com?file_downloader.php?param1=7683&param2=jld8ijn, etc... W tym przypadku skrypt, do którego uzyskujesz dostęp, może zostać wysłany z jednym nagłówkiem (np. plik pdf), ale w rzeczywistości jest to plik php.

Podsumowując: nigdy nie wiesz, jak skonfigurowano serwer i skrypty, więc nigdy nie możesz poznać prawdziwego, rzeczywistego adresu, nawet jeśli wydaje się, że wiesz.

Itai Sagi
źródło
1

Kiedy wysyłasz zapytanie do serwera WWW (kliknij link), serwer może wysłać wiele różnych odpowiedzi. Typowe przykłady to 404 (nie znaleziono strony), 403 (zabronione) lub 500 (błąd serwera). Prawdopodobnie najczęstszym kodem odpowiedzi jest 200 (OK), ale nigdy go nie zobaczysz, ponieważ zazwyczaj towarzyszy mu strona, którą chciałeś zobaczyć.

W grze jest kilka innych kodów: 301 i 302. Kody 301 i 302 są kodami przekierowującymi i mówią przeglądarce, że żądana odpowiedź została przeniesiona w inne miejsce. Główna różnica między nimi polega na tym, jak przeglądarka buforuje rzeczy. Kod 301 oznacza „przeniesiony na stałe”, a przy następnej próbie odwiedzenia oryginalnego linku przeglądarka może pamiętać, że strona została przeniesiona i przejść bezpośrednio do nowej lokalizacji. 302 oznacza „Znaleziono gdzie indziej” i poda link, którego Twoja przeglądarka powinna używać tylko tymczasowo.

Powinno być możliwe napisanie programu, który sprawdzi link, i dopóki otrzymujesz 30x odpowiedzi, podążaj za odpowiedzią, aż w końcu otrzyma 200. W tym momencie zamiast pobierać treść, powinien pokazywać link.

Niestety jest to również bardziej skomplikowane. Strona html można również przekierować do nowej lokalizacji za pomocą meta tag w sekcji head strony użytkownika, który wygląda mniej więcej tak: <meta http-equiv="refresh" content="0;url=NEW PAGE URL" />. Taki program musiałby już całkowicie przeanalizować HTML, aby mieć pewność, że dotrzemy do ostatniego przekierowania.

Dodatkowo strona może przekierowywać Cię dalej za pomocą javascript, a javascript może być zaciemniony. Więc teraz nasz hipotetyczny program musi również rozumieć javascript. W tym momencie mamy w pełni funkcjonalną przeglądarkę internetową. Brakuje nam drobnych szczegółów renderowania strony na ekranie, ale nasz program ma prawie wszystko, czego potrzebujesz do pełnej przeglądarki internetowej, w tym wszystkie związane z tym problemy bezpieczeństwa. Nie jesteś już w lepszej sytuacji niż gdybyś kliknął link normalnie w pierwszej kolejności.

Joel Coehoorn
źródło
1

Zakładanie systemu Windows: zainstaluj serwer proxy debugowania sieci Fiddler , włącz go. Następnie przejdź do początkowego adresu URL i obserwuj wszystkie przekierowania w lewym okienku Fiddlera. W prawym panelu zmień zakładki, aby wyświetlić „Żądaj nagłówków” i „Nagłówki odpowiedzi”. Z powodzeniem wykorzystałem go do tego właśnie celu.

Z drugiej strony sam „końcowy” adres URL może nie działać w ten sam sposób, jeśli przejdziesz do niego bezpośrednio, ponieważ w żądaniu może nie znajdować się odpowiednie polecenie odsyłające lub pominąć inne ograniczenia.

Ale możesz nawet wysyłać niestandardowe żądania z niestandardowymi nagłówkami w Fiddler. Zobacz zakładkę „Kreator żądań”.

oleschri
źródło
0

Jest to w dużej mierze zależne od strony.

Aby to zrobić, musisz przestudiować każdą witrynę osobno i mieć osobny mechanizm (lub kod) dla każdej witryny, aby zwrócić bezpośredni identyfikator URI.

Możesz także przestudiować niektóre dodatki przeglądarki typu open source, które zapewniają podobną funkcjonalność.

bhagyas
źródło
0

Aby sprawdzić, gdzie przekierowuje cię link, możesz użyć http://longurl.org/ . Jest to szczególnie przydatne w przypadku skróconych adresów URL. Nie nadaje się do pobierania skryptów itp.

Omar Kohl
źródło
0

Jeśli używasz przeglądarki Firefox, możesz użyć dodatku o nazwie, RequestPolicyktóry między innymi wstrzyma się i poprosi o pozwolenie za każdym razem, gdy zostaniesz przekierowany do innej domeny. Nie zadziała, jeśli chcesz znaleźć przekierowanie, które nie prowadzi do innej domeny, ale jestem pewien, że istnieje inny dodatek do Firefoksa dla tego, o czym nie wiem =)

https://www.requestpolicy.com/

Pamiętaj, że spowoduje to uszkodzenie wielu witryn korzystających z sieci CDN (Content Distribution Network), ponieważ domyślnie blokuje wszystkie obrazy międzydomenowe, skrypty, css i przekierowania. Więc nie jest to najlepszy wybór, jeśli chcesz zawsze wiedzieć, dokąd zmierza przekierowanie, chyba że jesteś przygotowany na wykonanie kilku dodatkowych kroków za każdym razem, gdy odwiedzasz nową stronę internetową.

William Lawn Stewart
źródło
0

Nie jestem do końca pewien, ale jeśli używasz CUrl, czy możesz nie tylko uzyskać zawartość URL (get_file_contents (url) w PHP), a następnie sprawdzić typ MIME?

Sterex
źródło