The description and source code can be found here:
http://exploit.education/phoenix/net-one/
This level is asking us to do the opposite of the previous level. Now we need to convert a bytes value from native endian format to an integer and send that back as an ASCII string. Again, I can use netcat to verify this:
user@phoenix-amd64:~$ nc 127.1 64001 Welcome to phoenix/net-one, brought to you by https://exploit.education _z��1000 Close, you sent "1000", and we wanted "2511501919"
Yup. After receiving 4 bytes of random data, I sent “1000” (as an ASCII string) and the program verified that’s what I sent.
I wrote another Python script to automate this:
#!/usr/bin/env python3
import socket
import time
IP = "127.0.0.1"
PORT = 64001
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((IP, PORT))
# Get the first 2 lines
print(s.recv(132).decode())
time.sleep(0.1)
msg = s.recv(132)[1:] # Cutting off the newline character
# Display what was received & display it as a hex value
print("Received: {}".format(msg))
intval = int.from_bytes(msg, byteorder='little')
print("Hex value: {}".format(hex(intval)))
# Send the data as bytes
print('Sending integer value: "{}"\n'.format(intval))
s.send(str(intval).encode() + b'\n')
# Print the last message
print(s.recv(132).decode())
