44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import socket
 | |
| import base64
 | |
| import threading
 | |
| from Crypto.Cipher import AES
 | |
| 
 | |
| flag = 'HM{3cb_0r4cl3}'
 | |
| key = '12345678abcdefgh'
 | |
| 
 | |
| BIND_IP = '192.168.0.12'
 | |
| BIND_PORT = 8000
 | |
| 
 | |
| def pad(raw):
 | |
| 
 | |
|     if (len(raw) % 16 == 0):
 | |
|         return raw
 | |
|     padding_required = 16 - (len(raw) % 16)
 | |
|     padChar = b'\x00'
 | |
|     data = raw.encode('ascii') + padding_required * padChar
 | |
|     return data
 | |
| 
 | |
| def handle_client(client_socket):
 | |
|     client_socket.send(bytes('I will send you AES(<input>+flag):\n'.encode('ascii')))
 | |
|     request = client_socket.recv(1024)
 | |
|     string = request.decode('ascii').rstrip()
 | |
|     cipher = AES.AESCipher(key, AES.MODE_ECB)
 | |
|     ciphertext = base64.b64encode(cipher.encrypt(pad(string+flag)))
 | |
|     client_socket.send(ciphertext)
 | |
|     client_socket.close()
 | |
| 
 | |
| def tcp_server():
 | |
|     server = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
 | |
|     server.bind(( BIND_IP, BIND_PORT))
 | |
|     server.listen(5)
 | |
|     print("[*] Listening on %s:%d" % (BIND_IP, BIND_PORT))
 | |
| 
 | |
|     while 1:
 | |
|         client, addr = server.accept()
 | |
|         print("[*] Accepted connection from: %s:%d" %(addr[0], addr[1]))
 | |
|         client_handler = threading.Thread(target=handle_client, args=(client,))
 | |
|         client_handler.start()
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     tcp_server()
 |