Perché usare il bitmasking in Blind SQLi?

2

Sto seguendo questo tutorial su Pentesterlab su SQLi, e stanno parlando di Blind SQL. Da quello che pensavo che SQLi cieco fosse necessario quando non si vede (errore) l'output dal target, e si può usare solo fase / right / slow / fast per vedere se la query è vera o funziona.

Ma in quel tutorial iniziano a mascherare i bit e non so cosa. So che il bitmasking esiste da:

  • Estrazione: AND (usato in questo tutorial)
  • Impostazione sottoinsieme: OR
  • Commutazione: XOR

E 'AND' funziona in questo modo:

MASK: 100110
VALU: 101010
RESU: 100010

Solo '1' dove valore e maschera sono '1'.

Tuttavia, come viene utilizzato in Blind SQLi? E perché lo script che usano nel tutorial?

tl; dr Perché usano bitmasking in Blind SQLi, credo di non capire completamente Blind SQLi.

    
posta O'Niel 21.12.2016 - 19:48
fonte

1 risposta

4

I thought blind SQLi was needed when you don't see (error) output from your target, and you can only use fase/right/slow/fast to see if your query is true or works.

Correggere, in un'iniezione SQL cieca è possibile valutare solo se il risultato di una query è vero o falso.

Quindi, come raccoglieresti un valore dal database se puoi solo fare domande si / no?

Sicuramente chiederei ogni lettera separatamente. Ma ci sarebbero ancora almeno 62 possibilità (assumendo a-zA-Z0-9 ) per carattere. Pertanto, l'idea presentata nel tutorial è di chiedere ogni bit singolarmente. In questo modo hai bisogno esattamente di 8 query per byte per determinarne il valore. Quindi tutto ciò che fai è trasformare il valore che vuoi leggere in binario e successivamente chiedere ogni bit se è 1.

Di ', vuoi recuperare il valore "segreto". Quindi inizi a estrarre il primo carattere:

substring('secret',1,1) -> 's'

Quindi ottieni il suo valore ASCII:

ascii('s') -> 115

Ora applichi un bit "e" ( & ) per isolare il valore del primo bit:

115 & 1 -> 1

  1110011
& 0000001
---------
  0000001

Il risultato è 1 che rende vera l'affermazione.

Se applichi questo metodo per ogni bit di ogni carattere del valore che vuoi leggere, alla fine otterrai l'intera stringa solo valutando se le tue query sono vere o false.

    
risposta data 21.12.2016 - 21:41
fonte

Leggi altre domande sui tag