Come analizzare un collegamento per capire il collegamento effettivo


13

A volte durante il download di qualcosa, trovo che i collegamenti non siano quelli diretti ai file.

Ad esempio, questo è un link per scaricare un file PDF:

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

Mi chiedevo come capire / hackerare il collegamento effettivo (vale a dire http: //*.PDF) al file?

Quali sono i nomi di tali e simili tecniche di non mostrare collegamenti diretti? Alcuni riferimenti, come Wikipedia, ...?


1
Risolto il tuo link. Fai clic editper vedere l'origine del markdown per come l'ho fatto.
Joel Coehoorn,

Risposte:


3

Sì, a volte .

Ci sono due cose che accadono comunemente. Il tuo link non funziona più, quindi non sono sicuro dello scenario reale in questo caso, quindi riassumerò un altro link.

Reindirizzamento HTTP

Questo è ciò che vedi con Bit.lye altri servizi. Quello che poi fa è fornire una risposta di reindirizzamento HTTP. Quando visiti http://bit.ly/oH3410 , reindirizza all'URL effettivo. A volte un URL reindirizza a un altro. Puoi vederlo accadere se inserisci l'URL in http://web-sniffer.net/ o, usando [curl][1] -I http://bit.ly/oH3410, vedrai un 301 che punta a una nuova posizione.

Quindi, per gestire il reindirizzamento HTTP devi solo eseguire il loop di una richiesta HEAD HTTP fino a quando non smetti di ricevere risposte nei 300 (speriamo di ottenere un 200). Tieni presente che è possibile che reindirizzino in un ciclo, che non finirà mai. Puoi farlo con CURL o qualsiasi strumento HTTP.

Pagina di downloader

Questo è ciò che utilizza la maggior parte dei siti di download. Fai clic sul link per il download e ti porta a una pagina con una serie di annunci e dice "Il download inizierà a breve" qualcosa di simile. [ Esempio ]. Con questi puoi provare ad analizzare il link diretto effettivo dall'URL, ma sarebbe specifico del sito e la maggior parte dei siti non lo includerà per impedirti di aggirarlo. Questo viene fatto tramite un meta http-equiv="refresh"tag nell'intestazione o JavaScript (più comune). Il JS di solito ha comunque un fallback di header.

C'è una soluzione però. Se guardi l'origine nella pagina di download, di solito vedrai un <meta http-equiv="refresh">tag (di solito in un <noscript>tag) con un attributo URLche indica il download effettivo. Quindi usa CURL (o qualsiasi altro strumento HTTP) per scaricare la pagina, analizzarla e acquisire quel valore. Un sito può escluderlo, tuttavia, se vuole essere davvero cattivo, richiedendo quindi di avere JavaScript per scaricare i file.

Probabilmente esiste un blocco JavaScript che collega anche al download. Potrebbe essere offuscato o collegato da un altro URL. Il tuo chilometraggio può variare nel tentativo di analizzarlo. Potrebbe esserci anche un "link diretto" sulla pagina. Potresti provare alcune tecniche per trovarlo, ma ancora una volta potrebbero essere offuscate tramite JavaScript o addirittura perse tutte insieme.


11

Potrebbe non essere possibile. I siti potrebbero fornirti centinaia di reindirizzamenti prima di accedere al file.

Inoltre, JavaScript può essere utilizzato per fornire collegamenti in base all'URL che è stato fornito al server.


Grazie! Quali sono i nomi di tali e simili tecniche di non mostrare collegamenti diretti? Alcuni riferimenti, come Wikipedia, ...?
Tim

1
Solo reindirizzamento. non conosco altre tecniche. Vedi qui
soandos,

Quando i collegamenti sono a file e al contrario di pagine normali, di solito si chiama anti-sanguisuga .
Synetech,

7

Il sito potrebbe essere sottoposto a script e quando riceve un determinato comando (l'URL può passare un comando), potrebbe quindi restituire un file PDF (o qualche altro file), senza reindirizzamento. C'è una cosa sul lato server e dipende da come il sito è codificato. Senza effettivamente richiedere quel collegamento dal server, è improbabile che tu possa capire come ottenere il file. E a volte anche se conoscessi l'URL diretto, potresti non avere l'autorizzazione per accedere al collegamento diretto. Alcuni siti sono codificati in modo che i collegamenti diretti non funzionino.


1
Questo è corretto. Piccola aggiunta: quando un client accede a un link oscuro come quello e il server vuole dire al client che questo è in realtà un file pdf e deve essere salvato come file pdf - il server lo comunica al client tramite il Content-Type HTTP intestazione.
vtest

3

Questo è praticamente l'URL "vero" come per quei siti Web ben protetti, devi inviare l'URL completo per il server per autenticare la tua richiesta. In seguito potresti essere indirizzato a un altro URL, ma sarà normalmente una tantum. In altre parole, questi siti Web per il download di file non ti daranno mai un collegamento diretto in grado di gestire le sanguisughe.

In questo particolare URL, i parametri, protetti da una firma digitale, elencano chiaramente i limiti di tempo e IP del downloader. Per un sito Web con questo livello di competenza, è improbabile che vi siano collegamenti diretti trapelati.


3

Questi collegamenti di reindirizzamento sono spesso associati allo stato della sessione. Faranno alcuni controlli privati, in base al login della sessione, prima di fornirti il ​​collegamento - nessun accesso alla risorsa = nessun accesso al collegamento alla risorsa. Può essere utilizzato per fornire accesso a file / risorse che si trovano all'esterno della radice Web e trasmessi in streaming al richiedente dall'app, anziché essere disponibili tramite URL diretto. Ma solo se i tuoi privilegi lo consentono.

Un esempio di entrambi è qui. Ti reindirizzerà a un altro URL, in base alla stringa "mkoenig" che aggiunge parametri URL aggiuntivi. Il reindirizzamento viene eseguito nella codifica lato server, che non sarebbe (o almeno non dovresti) vedere. Se poi vai su "File Web", i file elencati sono solo i file che l'insegnante ha reso pubblici. Potrebbe avere altri file là fuori che non puoi raggiungere e che non saranno elencati. Questo è anche gestito dalla codifica lato server, per quanto riguarda ciò che verrà / non restituirà.

Senza hackerare il server o avere accesso al codice sorgente lato server, non credo che tu possa ottenere il link effettivo e, anche se puoi, potrebbe non essere utile a meno che i tuoi priv sessione non diano al server di darti l'accesso .

Greg


2

Come sopra, è impossibile. Ti consiglio di avviare una VM o di prendere una copia di Sandboxie per contenere il tuo browser per collegamenti come questi.

modificare

Non sapendo quale sistema operativo stai usando, darò una risposta generale qui.

Una VM è l'abbreviazione di una macchina virtuale. Fondamentalmente è un computer creato da software in esecuzione all'interno del tuo computer. Una macchina virtuale avrà il proprio sistema operativo e browser. Mentre utilizza ancora Internet e il disco rigido della tua macchina, è una macchina separata dal punto di vista del sistema operativo. In modo che lo rende conveniente come un pezzo di carta graffiato. Tutto ciò che accade all'interno della VM non influisce sulla tua macchina reale.

Virtualbox è il software che ti consiglio di ottenere per una VM, a meno che tu non stia utilizzando Windows, quindi consiglierei Virtual PC.

Sandboxie è un po 'come una VM, ma isola solo applicazioni specifiche. Puoi dirgli di eseguire una copia del tuo browser e qualsiasi file o azione che il browser esegue viene essenzialmente reindirizzato a una cartella temporanea. Quindi, se tenta di scaricare un virus, viene reindirizzato a una cartella temporanea messa in quarantena dal resto del computer. Non è robusto come una VM, ma utilizza meno CPU / memoria ed è più veloce e più conveniente.

Prima proverei Sandboxie. È una curva di apprendimento più piccola.


1
Grazie! Cosa intendi con "accendi una VM o prendi una copia di Sandboxie per contenere il tuo browser per collegamenti come questi"? Alcuni riferimenti per spiegare come fare le due cose?
Tim

Scusa, espanderò la mia risposta.
surfasb,

Grazie! Il mio sistema operativo è Ubuntu. Ma non capisco come l'utilizzo della VM possa identificare i collegamenti diretti?
Tim

1
Non identifica davvero il link per te. Ma crea un ambiente sicuro che ti aiuterà a identificare il collegamento. Non è possibile identificare i reindirizzamenti senza compilare la pagina.
surfasb,

1
Non credo che la sua domanda riguardi la sicurezza. Sta solo cercando un modo per ottenere il collegamento diretto al file.
magnattico

2

Non è mai possibile capire il link reale.

Il server gestisce le richieste di file, usando alcuni WWW Rewrite (per i server apache, per esempio), quindi ad esempio, potresti andare su una pagina www.example.com/13-this-site-has-nice-page-name.html, ma in realtà potresti accedere ad alcuni file php, con un parametro, come:www.example.com/site_handler.php?UID=13

anche se accedi a un file pdf, potrebbe esserci un reindirizzamento sul lato server stesso.

Per i download di file con i gestori, potrebbe essere un po 'più complicato, poiché puoi andare a una pagina che è solo un gestore di download, ad esempio: www.example.com?file_downloader.php?param1=7683&param2=jld8ijn, etc... in questo caso, lo script a cui stai accedendo potrebbe essere inviato con un'intestazione (come file pdf), ma in realtà è un file php.

in conclusione: non puoi mai sapere come sono configurati il ​​server e gli script, quindi non puoi mai conoscere l'indirizzo reale, reale, anche se sembra che tu lo sappia.


1

Quando si invia una richiesta a un server Web (fare clic su un collegamento), il server può inviare un numero di risposte diverse. Esempi comuni sono 404 (pagina non trovata), 403 (vietata) o 500 (errore del server). Probabilmente il codice di risposta più comune è 200 (Ok), ma non lo vedrai mai perché è generalmente accompagnato dalla pagina che speravi di vedere.

Ci sono un paio di altri codici in gioco qui: 301 e 302. I codici 301 e 302 sono codici di reindirizzamento e indicano al browser che la risposta desiderata si è spostata in un'altra posizione. La differenza principale tra loro è come il browser memorizza le cose nella cache. Un codice 301 significa "spostato in modo permanente" e la prossima volta che si tenta di visitare il collegamento originale, il browser potrebbe ricordare che la pagina è stata spostata e passare direttamente alla nuova posizione. 302 significa "Trovato altrove" e fornirà un link che il tuo browser dovrebbe usare solo temporaneamente.

Dovrebbe essere possibile scrivere un programma che controllerà un collegamento e finché continui a ricevere risposte 30x segui la risposta, fino a quando non ne ottiene finalmente 200. A questo punto, invece di scaricare il contenuto, dovrebbe mostrarti il ​​collegamento.

Sfortunatamente, è anche più complicato di così. Pagina Un HTML può anche reindirizzare in una nuova posizione utilizzando un meta tag nella sezione head della pagina che assomiglia a questo: <meta http-equiv="refresh" content="0;url=NEW PAGE URL" />. Quindi un programma del genere dovrebbe già analizzare completamente HTML per essere sicuri di raggiungere l'ultimo reindirizzamento.

Inoltre, una pagina potrebbe reindirizzarti ulteriormente utilizzando javascript e il javascript potrebbe essere offuscato. Quindi ora anche il nostro ipotetico programma deve capire javascript. A questo punto abbiamo un browser web completamente funzionale. Ci manca il piccolo dettaglio del rendering effettivo di una pagina sullo schermo, ma il nostro programma ha quasi tutto il necessario per un browser Web completo, inclusi tutti i problemi di sicurezza associati. Non stai più meglio di se avessi fatto clic sul link normalmente in primo luogo.


1

Supponendo Windows: installare il proxy di debug Web di Fiddler , abilitarlo. Quindi vai all'URL iniziale e guarda tutti i reindirizzamenti nel riquadro sinistro di Fiddler. Nel riquadro destro, cambia le schede per mostrare "Intestazioni richieste" e "Intestazioni risposta". L'ho usato con successo proprio per quello scopo.

D'altra parte, l'URL "finale" da solo potrebbe non funzionare allo stesso modo se lo navighi direttamente perché la richiesta potrebbe non avere il referrer giusto o perdere alcune altre restrizioni.

Ma puoi anche inviare richieste personalizzate con intestazioni personalizzate in Fiddler. Vedi scheda "Request Builder" per questo.


0

Questo dipende in gran parte dal sito.

Per fare ciò, è necessario studiare ogni sito singolarmente e disporre di un meccanismo (o codice) separato per ogni sito per restituire l'URI diretto.

Puoi anche studiare alcuni componenti aggiuntivi del browser open source che offrono funzionalità simili.


0

Per verificare dove un link ti reindirizza a te puoi usare http://longurl.org/ . È particolarmente utile per gli URL abbreviati. Non è utile per i download con script, ecc.


0

Se stai utilizzando Firefox, puoi utilizzare un componente aggiuntivo chiamato RequestPolicyche, tra le altre cose, si interromperà e ti chiederà l'autorizzazione ogni volta che verrai reindirizzato su un dominio diverso. Non funzionerà se si desidera trovare un reindirizzamento che non va a un dominio diverso, ma sono sicuro che ci sia un componente aggiuntivo di Firefox diverso per quello che non conosco =)

https://www.requestpolicy.com/

Si noti che interromperà molti siti che utilizzano una rete CDN (Content Distribution Network) poiché, per impostazione predefinita, blocca tutte le immagini, gli script, i css e i reindirizzamenti tra domini. Quindi non è la scelta ebst se vuoi sapere sempre dove sta andando un reindirizzamento, a meno che tu non sia disposto a dover fare qualche passo in più ogni volta che visiti un nuovo sito web.


0

Non ne sono davvero sicuro, ma se stai usando CUrl, non puoi semplicemente ottenere il contenuto dell'URL (get_file_contents (url) in PHP) e quindi controllare il tipo MIME?


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.