Scanner di siti Web di base per sottopagine in Python
Ciao a tutti! Nell'articolo di oggi, parlerò di come possiamo creare una versione semplice di uno strumento che può essere utilizzato nei test di penetrazione per trovare sottopagine esistenti per i siti web. Come indica il titolo, userò Python, ma questo non è obbligatorio, perché può essere fatto anche in altri linguaggi.
● Cosa fa uno scanner di siti web?
Lo scopo di questo tipo di scanner è rilevare se esistono sottopagine specifiche su un determinato sito web. Nel caso in cui tu abbia familiarità con il termine di attacco di forza bruta per le password, il principio è quasi lo stesso, solo che al posto delle password hai delle sottopagine.
Ci sono 2 parti obbligatorie: il sito Web in cui deve essere eseguita la scansione e un file di testo contenente un elenco di possibili sottopagine.
● Un semplice esempio per una migliore comprensione
Consideriamo https://www.nicevintagecars.com come il nostro sito web (ipotetico, non esiste). È abbastanza semplice, con solo 4 voci nel menu: Home , About , Gallery e Contact . Se qualcuno naviga nel sito, troverà solo le pagine sopra menzionate. Tuttavia, ciò non significa automaticamente che siano gli unici disponibili. A volte le cose esistono, anche se non sono visibili.
Abbiamo uno dei 2 elementi necessari, ne rimane un altro. Il nostro file di testo potrebbe essere composto da un paio di possibili sottopagine: admin , secret , luxury , auction e owners .
Sulla base dei 2 componenti del nostro esempio, lo scanner verificherà l'esistenza dei seguenti collegamenti:
▪ https://www.nicevintagecars.com/admin
▪ https://www.nicevintagecars.com/secret
▪ https://www.nicevintagecars.com/luxury
▪ https://www.nicevintagecars.com/auction
▪ https https://www.nicevintagecars.com/owners
Alcuni di loro potrebbero esistere, altri no. O forse nessuno di questi esiste. Ma lo scanner può aiutarci a scoprire.
● Come facciamo a sapere se esiste una pagina?
Diresti che devi solo digitare il collegamento nel browser, premere <Invio> e vedere se viene visualizzato qualcosa. Che è corretto. Ma non è un'opzione adatta per il nostro programma. Non è una soluzione fattibile nemmeno per te, nel caso in cui la tua lista sia lunga 1000 righe.
La storia dietro il controllo è questa: quando il client accede alla pagina Web nel proprio browser, invia una richiesta al server in cui è ospitato il sito Web. In quella richiesta, richiede una risorsa. Il server restituisce una risposta e, in base al codice di stato ricevuto, viene determinato il risultato. Se è 200, la pagina si carica bene (questo è il codice più comune). Un codice di stato 404 implica la mancata ricerca della pagina.
Una pagina può esistere su un sito Web, anche se il codice di stato ricevuto non è 200. Ad esempio, puoi ottenere 401 o 403. Ciò non significa che la pagina non è stata trovata, semplicemente non sei autenticato o non autorizzato.
● Passi nel nostro algoritmo
Ci sono 3 fasi che considero essenziali:
▪ ottenere l'input
Come si dice, dobbiamo impostare i nostri 2 elementi richiesti, la pagina web e l'elenco delle directory (o anche dei file, funziona anche in questo caso).
▪ creando l'elenco completo degli URL da scansionare
In questo passaggio, per ogni riga del nostro file di testo, prenderemo quel valore e lo aggiungeremo alla fine dell'URL principale, separandoli con un carattere "/". Successivamente, memorizzeremo il collegamento finale in una variabile di tipo elenco.
▪ inviare richieste per ogni URL e determinarne lo stato
Come passaggio finale, prenderemo l'elenco creato in precedenza e lo analizzeremo. Per ogni collegamento, invieremo una richiesta get e verificheremo se il suo codice di stato è 200. In tal caso, mostreremo semplicemente quel collegamento come valido.
C'è un approccio diverso che ho avuto quando ho creato una versione avanzata di questo strumento. Non ho filtrato i risultati in base al codice di stato 200, ho solo escluso quelli con 404. Come ho detto in precedenza, alcune pagine esistono anche se il codice di stato non è 200.
Puoi trovare questa versione sul mio profilo GitHub, usando il link qui sotto:
● Codificare il nostro programma
Il codice che presenterò qui è quello di base, il minimo necessario per il funzionamento di questo strumento.
Secondo i passaggi presentati in precedenza, la prima cosa da fare è ottenere il nostro contributo. Ho creato 2 variabili per memorizzare ciascuno di questi 2 elementi, ma ho anche importato il modulo delle richieste . Ne avremo bisogno in seguito, quando invieremo le richieste get. Prendi in considerazione che questo non è un modulo Python predefinito, quindi devi prima installarlo.
import requests
# Define variables
main_url = "https://www.nicevintagecars.com"
wordlist = "directories.txt" # Directories must be each on a different row
# Create list of URLs to scan
full_url_list = []
dirs = open(wordlist, 'r')
for directory in dir:
url = main_url + "/" + directory.strip()
full_url_list.append(url)
# Send get requests to URLs
print("Scan started...\n")
for url in full_url_list:
url_request = requests.get(url)
if url_request.status_code == 200:
print("Found:", url)
print("\nScan finished!")
Nel video qui sotto, puoi vedere l'intero tutorial in cui creo questo scanner, lo eseguo e verifico anche i risultati che ho ottenuto. Dare un'occhiata!
● Dichiarazione di non responsabilità
Questo articolo è solo a scopo didattico. L'utilizzo dello strumento per attaccare obiettivi senza previo consenso reciproco è illegale. Non mi assumo alcuna responsabilità e non sono responsabile per qualsiasi uso improprio o danno causato da questo strumento.
Per ora è tutto, spero vi sia piaciuto. Grazie per il tempo che hai dedicato a leggere questo! Ci vediamo al mio prossimo articolo!

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































