tipo PHP giocoleria con MAC

1

Sto cercando di risolvere una sfida, e sospetto che abbia a che fare con PHP juggling , perché ottengo questo codec di JSON con codifica base64 come risposta {"User":"foo","MAC":"bar"}

BUG #2

The calculated MAC (i.e. the result of hash_hmac()) is a string containing hexadecimal characters

The use of a loose comparison means that if an integer was provided in the JSON payload, the HMAC string will be juggled to a number

Penso che con un MAC, ad esempio "ff6d0...5885d" , la giocoleria di PHP sarà confrontata con int(6) poiché è la prima cifra numerica. La mia idea wat to POST con la codifica base64 json: {"User":"Admin","MAC":6}

Ma questo non ha funzionato ... la giocoleria funziona solo con i MAC che iniziano con un numero?

    
posta Ludisposed 19.01.2018 - 12:47
fonte

1 risposta

5

L'algoritmo utilizzato da PHP per forzare le stringhe in numeri interi è documentato qui . In particolare:

The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero).

La tua supposizione era quella:

I think that with a MAC, for instance "ff6d0...5885d", the PHP juggling will be compared to int(6) since it is the first numerical

Ma 6 non appare all'inizio di quella stringa, appare solo dopo la sequenza non numerica ff . Quindi il valore sarà forzato a int(0) .

Se, tuttavia, abbiamo un hash diverso, diciamo "6ffd0 ... 5885d", il 6 appare all'inizio della stringa, in modo che la stringa venga forzata a int(6) .

Come hai immaginato, questa coercizione può verificarsi durante il confronto in determinate circostanze, come descritto nelle note sugli operatori di confronto nel manuale .

    
risposta data 19.01.2018 - 13:03
fonte

Leggi altre domande sui tag