Hackers have locked you out of your account! Fortunately their netcat server has a vulnerability.
nc umbccd.io 3000
This netcat server is username and password protected. The admin login is known but forbidden. Any other login entered gives a cipher.
Author: Clearedge
Solution
We can input the user and passwd into the below string, which is encrypted. admin&password=goBigDawgs12 is not allowed.
msg ='logged_username='+ user +'&password='+ passwdtry:assert('admin&password=goBigDawgs123'notin msg)exceptAssertionError:send_msg(s, 'You cannot login as an admin from an external IP.\nYour activity has been logged. Goodbye!\n')raise
The ciphertext is given to us, and we are prompted to enter another ciphertext.
Then, in decrypt_data(), the presense of admin&password=goBigDawgs12 is checked. The goal is to submit a ciphertext such that the corresponding plaintext contains admin&password=goBigDawgs12.
Since we are given a ciphertext and tasked to find another ciphertext that decodes into a different string, an AES CBC byte flipping attack can be used.
In CBC, each block of plaintext depends on the previous ciphertext.
So if we manage to change the ciphertext in a previous block, we can change the plaintext in the next block.
We can send a payload like logged_username=admin&parsword=goBigDawgs123 (note the purposeful misspelling of password as parsword). Then, we will edit the previous block of ciphertext such that r becomes s at the misspelt index. We simply have to change the ciphertext at the correct index.
For instance, the following code gives us the edited ciphertext.
user =''password ='goBigDawgs123'msg ='logged_username=admin&parsword=goBigDawgs123'+ user +'&password='+ passwordprint(msg, len(msg))xor =ord('r')^ord('s')cipher =encrypt_data(msg)cipher = cipher[:16]+hex(int(cipher[16:18], 16) ^ xor)[2:] + cipher[18:]print(decrypt_data(cipher))
Notice that the second block has been changed to the desired string. Since we modified the first block, it will no longer decode properly (but in this case it doesn't matter since only the desired string is checked).