Rating:

## Solution

### Quick Explanation

This is a [__Padding Oracle Attack__](https://en.wikipedia.org/wiki/Padding_oracle_attack) and we use mwielgoszewski's [paddingoracle.py](https://github.com/mwielgoszewski/python-paddingoracle) to get the key.

### Fuil Explanation

I have omitted the parts of `server.py` that are not really necessary.

```python
...

class ThreadedServer(object):
def listenToClient(self, client, address):
ciphertext = client.recv(length)
plaintext = self.decrypt(ciphertext)
if self.check_pad(plaintext):
client.send('1')
else:
client.send('0')
```

This is pretty easy to figure out since the only information we get is whether or not `check_pad` of the __plaintext__ returns `true` or `false`.

If you are not familiar then a search of `aes padding attack` will eventually lead you to __padding oracle attack__.

Fortunately, as mentioned above, we found existing python code to help us as well as a [writeup](https://eugenekolo.com/blog/csaw-qual-ctf-2016/) from a previous CTF on this attack that confirms

`noxCTF{0n3_p4d_2_f4r}`

__For the implementation see the link__

Original writeup (https://github.com/pberba/ctf-solutions/tree/master/20180907_nox/java_corporation).