
Un potente crawler browser per scanner di vulnerabilità web
Un potente crawler per browser per scanner di vulnerabilità web
Documento in inglese | 中文文档
crawlergo è un crawler per browser che utilizza la modalità chrome headless per la raccolta di URL. Hooka i punti chiave dell'intera pagina web durante la fase di rendering del DOM, compila e invia automaticamente i moduli, attiva intelligentemente gli eventi JS e raccoglie quante più voci possibile esposte dal sito web. Il modulo integrato di deduplicazione degli URL filtra un gran numero di URL pseudo-statici, mantenendo comunque una velocità di analisi e scansione rapida per siti web di grandi dimensioni, e infine ottiene una raccolta di risultati di richieste di alta qualità.
crawlergo attualmente supporta le seguenti funzionalità:

Leggere e confermare attentamente l'esclusione di responsabilità prima di installare e utilizzare.
Build
make build
make build_all
Se stai usando un sistema Linux e Chrome segnala dipendenze mancanti, consulta la sezione TroubleShooting qui sotto.
Supponendo che la directory di installazione di Chromium sia /tmp/chromium/, imposta 10 schede aperte contemporaneamente ed esegui la scansione di testphp.vulnweb.com:
bin/crawlergo -c /tmp/chromium/chrome -t 10 http://testphp.vulnweb.com/
Puoi anche usarlo con Docker senza problemi:
git clone https://github.com/Qianlitp/crawlergo
docker build . -t crawlergo
docker run crawlergo http://testphp.vulnweb.com/
bin/crawlergo -c /tmp/chromium/chrome -t 10 --request-proxy socks5://127.0.0.1:7891 http://testphp.vulnweb.com/
Per impostazione predefinita, crawlergo stampa i risultati direttamente sullo schermo. Impostiamo ora la modalità di output su json. Il codice di esempio per chiamarlo usando Python è il seguente:
#!/usr/bin/python3
# coding: utf-8
import simplejson
import subprocess
def main():
target = "http://testphp.vulnweb.com/"
cmd = ["bin/crawlergo", "-c", "/tmp/chromium/chrome", "-o", "json", target]
rsp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = rsp.communicate()
# "--[Mission Complete]--" è la stringa separatrice di fine attività
result = simplejson.loads(output.decode().split("--[Mission Complete]--")[1])
req_list = result["req_list"]
print(req_list[0])
if __name__ == '__main__':
main()
Quando la modalità di output è impostata su json, il risultato restituito, dopo la deserializzazione JSON, contiene quattro parti:
all_req_list: Tutte le richieste trovate durante questa attività di scansione, inclusi qualsiasi tipo di risorsa da altri domini.req_list: Restituisce i risultati del dominio corrente di questa attività di scansione, deduplicati pseudo-staticamente, senza collegamenti a risorse statiche. È un sottoinsieme di all_req_list.all_domain_list: Elenco di tutti i domini trovati.sub_domain_list: Elenco dei sottodomini trovati.crawlergo restituisce la richiesta completa e l'URL, che possono essere utilizzati in vari modi:
In combinazione con altri scanner passivi di vulnerabilità web
Per prima cosa, avvia uno scanner passivo e imposta l'indirizzo di ascolto su: http://127.0.0.1:1234/
Successivamente, supponendo che crawlergo sia sulla stessa macchina dello scanner, avvia crawlergo e imposta i parametri:
--push-to-proxy http://127.0.0.1:1234/
Host binding (non disponibile per versioni elevate di Chrome) (esempio)
Cookie personalizzati (esempio)
Pulizia regolare dei processi zombie generati da crawlergo (esempio), contributo di @ring04h
crawlergo può bypassare il rilevamento della modalità headless per impostazione predefinita.
https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.html

'Fetch.enable' non trovato
Fetch è una funzionalità supportata dalla nuova versione di Chrome. Se si verifica questo errore, significa che la tua versione è troppo vecchia; aggiorna la versione di Chrome.
Chrome viene eseguito con dipendenze mancanti come xxx.so
// Ubuntu
apt-get install -yq --no-install-recommends \
libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \
libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libgbm1 \
libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 libnss3
// CentOS 7
sudo yum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 \
libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 \
ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc -y
sudo yum update nss -y
Avviso di Timeout di navigazione / browser non trovato / percorso eseguibile del browser sconosciuto
Assicurati che il percorso dell'eseguibile del browser sia configurato correttamente. Digita: chrome://version nella barra degli indirizzi e trova il percorso del file eseguibile:

--chromium-path Path, -c Path Il percorso dell'eseguibile di Chrome. (Obbligatorio)--custom-headers Headers Personalizza l'intestazione HTTP. Passa i dati dopo la serializzazione JSON. Questa è una definizione globale e verrà utilizzata per tutte le richieste. (Predefinito: null)--post-data PostData, -d PostData Dati POST. (Predefinito: null)--max-crawled-count Number, -m Number Il numero massimo di attività per i crawler per evitare lunghi tempi di scansione a causa di pseudo-statici. (Predefinito: 200)--filter-mode Mode, -f Mode Modalità di filtro, simple: vengono filtrati solo le risorse statiche e le richieste duplicate. smart: con capacità di filtrare pseudo-statici. strict: regole di filtraggio pseudo-statico più rigorose. (Predefinito: smart)--output-mode value, -o value Modalità di output dei risultati, console: stampa i risultati in formato migliorato direttamente sullo schermo. json: stampa la stringa serializzata JSON di tutti i risultati. none: non stampa l'output. (Predefinito: console)--fuzz-path Utilizza il dizionario integrato per il fuzzing dei percorsi. (Predefinito: false)--fuzz-path-dict Personalizza il percorso di Fuzz passando il percorso di un file dizionario, ad esempio /home/user/fuzz_dir.txt. Ogni riga del file rappresenta un percorso da sottoporre a fuzzing. (Predefinito: null)--robots-path Risolve il percorso dal file /robots.txt. (Predefinito: false)--ignore-url-keywords, -iuk Parola chiave dell'URL che non si desidera visitare, generalmente utilizzata per escludere i collegamenti di logout quando si personalizzano i cookie. Utilizzo: -iuk logout -iuk exit. (Predefinito: "logout", "quit", "exit")--form-values, -fv Personalizza il valore della compilazione del modulo, impostato per tipo di testo. Tipi supportati: default, mail, code, phone, username, password, qq, id_card, url, date e number. I tipi di testo sono identificati dalle quattro parole chiave dell'attributo id, name, class, type dell'etichetta del campo di input. Ad esempio, definisci che la casella di input della posta venga compilata automaticamente con A e la casella di input della password con B, -fv mail=A -fv password=B. Dove default rappresenta il valore di riempimento quando il tipo di testo non viene riconosciuto, come "Cralwergo". (Predefinito: Cralwergo)--form-keyword-values, -fkv Personalizza il valore della compilazione del modulo, impostato per corrispondenza fuzzy di parole chiave. La parola chiave corrisponde ai quattro valori dell'attributo id, name, , dell'etichetta del campo di input. Ad esempio, corrispondenza fuzzy della parola chiave pass per riempire 123456 e della parola chiave user per riempire admin, . (Predefinito: Cralwergo)--max-tab-count Number, -t Number Il numero massimo di schede che il crawler può aprire contemporaneamente. (Predefinito: 8)--tab-run-timeout Timeout Tempo massimo di esecuzione per una singola scheda. (Predefinito: 20s)--wait-dom-content-loaded-timeout Timeout Il timeout massimo per attendere il caricamento completo della pagina. (Predefinito: 5s)--event-trigger-interval Interval L'intervallo quando l'evento viene attivato automaticamente, generalmente utilizzato in caso di rete di destinazione lenta e conflitti di aggiornamento del DOM che portano alla mancata acquisizione degli URL. (Predefinito: 100ms)--event-trigger-mode Value Modalità di attivazione automatica degli eventi DOM, con async e sync, per la mancata acquisizione degli URL causata da conflitti di aggiornamento del DOM. (Predefinito: async)--before-exit-delay Ritardo di uscita per chiudere Chrome al termine di un'attività su una singola scheda. Utilizzato per attendere la cattura di aggiornamenti parziali del DOM e richieste XHR. (Predefinito: 1s)--push-to-proxy L'indirizzo di ascolto a cui inviare i risultati del crawler, solitamente l'indirizzo di ascolto dello scanner passivo. (Predefinito: null)--push-pool-max Il numero massimo di concorrenza quando si inviano i risultati del crawler all'indirizzo di ascolto. (Predefinito: 10)--log-level Livelli di registrazione: debug, info, warn, error e fatal. (Predefinito: info)--no-headless Disattiva la modalità headless di Chrome per visualizzare il processo di scansione. (Predefinito: false)Weibo:@9ian1i Twitter: @9ian1i
Articoli correlati:Una pratica del crawler per browser per la scansione delle vulnerabilità web
--output-json filepath Scrive il risultato nel file specificato dopo la serializzazione JSON. (Predefinito: null)--request-proxy proxyAddress Indirizzo del proxy socks5. Tutte le richieste di rete da crawlergo e dal browser Chrome vengono inviate tramite il proxy. (Predefinito: null)classtype-fkv user=admin -fkv pass=123456