Use the script provided below to generate a list of legitimate passwords. These passwords can then be used in a brute force attack to ultimately retrieve the FLAG.
// functionisValidPasswordCombo(arr) { var add = arr[0].charCodeAt(0) & arr[2].charCodeAt(0); var or = arr[1].charCodeAt(0) | arr[4].charCodeAt(0); var xor = arr[3].charCodeAt(0) ^ arr[5].charCodeAt(0); return (add === 0x60) && (or === 0x61) && (xor === 0x6); }
// Check whether the sum of passwords is 0xbb functionisSumValid(pwd) { let sum = 0; for (let i = 0; i < pwd.length; i += 6) { const segment = pwd.slice(i, i + 6); var add = segment[0].charCodeAt(0) & segment[2].charCodeAt(0); var or = segment[1].charCodeAt(0) | segment[4].charCodeAt(0); var xor = segment[3].charCodeAt(0) ^ segment[5].charCodeAt(0); sum += add + or - xor; } return sum === 0xbb; }
// dig out passwords for (let i = 0; i < chars.length; i++) { for (let j = 0; j < chars.length; j++) { for (let k = 0; k < chars.length; k++) { for (let l = 0; l < chars.length; l++) { for (let m = 0; m < chars.length; m++) { for (let n = 0; n < chars.length; n++) { const arr = [chars[i], chars[j], chars[k], chars[l], chars[m], chars[n]]; if (isValidPasswordCombo(arr)) { const pwd = arr.join(''); if (isSumValid(pwd)) { console.log(pwd); } } } } } } }
correct_len = test(password_guess) if correct_len > count: count += 1 print(f"[+] Found character: {base_password}") break return''.join(base_password)
def test(password): sh = remote('chal.pctf.competitivecyber.club', 4757) sh.recvuntil('What is the password: ') start_time = time.time() sh.sendline(password) res = sh.recvuntil(b'There\'s been an error')