Rating:
# Mind Palace III
**Categoria: Programação**
# Descrição:
>100% of brain CPU.
>nc 217.47.229.1 33003
![MindPalaceIII - Chall](palaceIII_chall.png)
# Solução:
Ao conectar no servidor, temos:
![MindPalaceIII - Servidor](mindpalaceIII_1.png)
É possível ver que existe dois números e operadores lógicos*¹, dando a entender que você deve resolver aquele problema:
![MindPalaceIII - ServidorResolver](mindpalaceIII_2.png)
Então, criei o seguinte script:
```
#!/usr/bin/python
#-*- coding: utf-8 -*-
import socket
def main():
HOST = '212.47.229.1'
PORT = 33003
tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
dest = (HOST, PORT)
tcp.connect(dest)
data = tcp.recv(2048)
while "FLAG" not in data:
result = 0
print(data)
valores = data.split(b"[>]")[1].split(b"\n")[0].split(b" ")
op = valores[2]
if op == b"XOR":
result = int(valores[1]) ^ int(valores[3])
elif op == b"OR":
result = int(valores[1]) | int(valores[3])
elif op == b"AND":
result = int(valores[1]) & int(valores[3])
else:
print(op)
print(result)
tcp.send(str(result) + b"\n")
data = tcp.recv(2048)
print(data)
if __name__ == "__main__":
main()
```
*² (esse script pode ser encontrado aqui nesse github)
Explicando o script:
1º - Na linhas de 7 a 12, conectamos ao servidor;
2º - Na linha 14, recebemos as mensagens do servidor;
3º - Nas linhas 18 e 19, pego os valores de, respectivamente: números a serem comparados e do operador lógico;
4º - Nas linhas de 21 a 26, verificamos qual o operador lógico e assim realizamos as definidas operações.
5º - O ```else``` servia apenas para caso algum outro operador lógico aparecesse, aí teríamos que incrementar no código, caso acontecesse, mas não aconteceu.
6º- Na linha 31, enviamos o resultado da operação para o servidor.
![MindPalaceIII - UsandoScript](mindpalaceIII_3.png)
![MindPalaceIII - Flag](mindpalaceIII_4.png)
# Flag:
```FLAG{0HH_Y0UR3_4_V3RY_5M3RT_M4TH3M4T1C}```