Sto costruendo un crawler di applicazioni web che esegue la scansione per le richieste HTTP (GET, PUT, POST, ...). È progettato per uno scopo specifico; caccia alle taglie bug. Consente ai pentesters di inserire payload di exploit su parti specifiche delle richieste HTTP.
Problema
Quando si utilizza il crawler, talvolta eseguo il crawling di molte richieste simili (ad esempio /article/1
, /article/2
, /article/3
, ...). Questo è un problema poiché, se so che /article/1
non è vulnerabile, c'è una grande possibilità che /article/2
e /article/3
non siano vulnerabili. Questo perché probabilmente eseguono lo stesso codice sul back-end (ricevono solo un articolo diverso dal database). Pertanto, non desidera eseguirne la scansione.
Esempio
Diciamo che il mio crawler ha eseguito la scansione degli URL di seguito.
https://example.ltd/
https://example.ltd/news/some-news-alias
https://example.ltd/news/another-news-alias
https://example.ltd/contact
https://example.ltd/news/some-other-news-alias
https://example.ltd/news/and-yet-another-one
Quindi posso supporre che tutti gli altri URL che corrispondono allo schema /news/[alphabet&dash]
non debbano essere sottoposti a scansione perché probabilmente eseguono lo stesso codice di back-end.
Tuttavia, diciamo che il mio crawler ha eseguito la scansione di questi URL.
https://example.ltd/
https://example.ltd/users/sign-up
https://example.ltd/users/sign-in
https://example.ltd/contact
https://example.ltd/users/forgot-password
Quindi non posso presumere che tutti gli altri URL che corrispondono allo schema /users/[alphabet&dash]
non debbano essere sottoposti a ricerca per indicizzazione perché probabilmente non eseguono lo stesso codice back-end.
Domanda
Come posso decidere (con il più alto tasso di correttezza possibile) quali richieste sono simili alle richieste che ho sottoposto a scansione prima?
I dati di richiesta e di risposta (intestazioni, corpo, ...) di tutte le richieste sottoposte a scansione precedente (nel runtime di scansione) sono disponibili per l'analisi per decidere se la richiesta corrente è simile alle richieste sottoposte a ricerca precedente.
La soluzione non deve funzionare immediatamente ma può iniziare a funzionare dopo aver raccolto abbastanza informazioni (forse dopo che sono state sottoposte a scansione circa 200 richieste di una determinata (possibile) rotta.
Ho pensato di individuare prima i possibili percorsi in base agli URL e in seguito verificare se la struttura / struttura HTML di un determinato percorso è simile a tutte le richieste con quella rotta. Tuttavia, questo sembra essere un po 'difficile dal momento che le strutture HTML possono variare se hai, ad es. una sezione di commento sotto gli articoli di notizie.