login.c


[ Комментарии ] [ Добавить комментарий ] [ Доска объявлений HackZone ]

Отправитель: XR, May 12, 1998, 12:03:26:

В ответ на: login.c (отправитель: rex, May 06, 1998, 17:04:39):

я тут за пузырьком Балтики N 4
немного покопал твою задачу
ну в общем ситуация такая
1) shell доступ будет работать (вот только с окружением
после 2 пузырьков разбиратся уже не хотелось - потому сделал по лаперски
через system())
2) с r сервисами все чисто
3) ftp работать при таком раскладе не будет :(
далее идет натоптанный мною сырец ;) просьба сильно не пинать
в - N4 все же ;)
[---- fakelogin.c----]
#include
#include
#include
#include
#include
#include
#include
#include

/* One time used passwords
* (joke ImHO =D )
* g++ fakelogin.c -o fakelogin
* /bin/fakelogin -rwsr-xr-x Owner: root/root
* /etc/fakepasswd -rw------- Owner: root/root
* [passwd or shadow]
* ........
* user::501:100:TEST:/home/test:/bin/fakelogin <-(passwd)
* ^^ ^^^^^^^^^
* password not set here ... but check here ;)
* ........
* [fakepasswd]
* ........
* daCi6YpYXvqOc <-not used password
* **a9Pjmz5IzEI <-already used password (Variant 1)
* ^^salt cleared
* ........
* 10.05.98 I'm so drink 8)
*/

uid_t uid;

void sig_exit(int crap)
{
seteuid(uid);
fprintf(stderr,"\nLogin break.");
exit(crap);
}

void sig_segv(int crap)
{
seteuid(uid);
fprintf(stderr,"\nLogin crashed.");
exit(crap);
}

void init_signals()
{
signal(SIGHUP, sig_exit);
signal(SIGINT, sig_exit);
signal(SIGQUIT, sig_exit);
signal(SIGILL, sig_exit);
signal(SIGTRAP, sig_exit);
signal(SIGIOT, sig_exit);
signal(SIGBUS, sig_exit);
signal(SIGFPE, sig_exit);
signal(SIGKILL, sig_exit);
signal(SIGUSR1, sig_exit);
signal(SIGSEGV, sig_segv);
signal(SIGUSR2, sig_exit);
signal(SIGPIPE, sig_exit);
signal(SIGALRM, sig_exit);
signal(SIGTERM, sig_exit);
signal(SIGCHLD, sig_exit);
signal(SIGCONT, sig_exit);
signal(SIGSTOP, sig_exit);
signal(SIGTSTP, sig_exit);
signal(SIGTTIN, sig_exit);
signal(SIGTTOU, sig_exit);
signal(SIGURG, sig_exit);
signal(SIGXCPU, sig_exit);
signal(SIGXFSZ, sig_exit);
signal(SIGVTALRM, sig_exit);
signal(SIGPROF, sig_exit);
signal(SIGWINCH, sig_exit);
signal(SIGIO, sig_exit);
signal(SIGPWR, sig_exit);
}

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


ifstream FakePassFile;
ofstream newFakePassFile;
char arg[]="/bin/sh";
char newBuff[65536];
int login_flag=0;
char cryptpass[20];
char* pass;
int num_try=0;

uid = getuid();

init_signals();

do{
num_try++;
pass=getpass("\nPassword:");
if(*pass == (char)NULL) exit(-1);

seteuid(0);
FakePassFile.open("/etc/fakepasswd");

if(!FakePassFile )
{
seteuid(uid);
fprintf(stderr,"\nFake password file not found.\n");
exit(-1);
}
memset(newBuff,0,65536);
while(FakePassFile){
memset(cryptpass,0,20);
FakePassFile.getline(cryptpass,20,'\n');
cryptpass[13]='\0';
if(strlen(cryptpass)>0 && strcmp(crypt(pass,cryptpass),cryptpass)==0)
{
login_flag=1;
memset(cryptpass,'*',2); /* Variant 1 (clear salt in used passwords)*/
}
/* else { Variant 2 (erase used passwords) */
strcat(newBuff,cryptpass);
strcat(newBuff,"\n");
/* } */

}
FakePassFile.close();
seteuid(uid);
if(login_flag==1)
{
login_flag=0;
seteuid(0);
newFakePassFile.open("/etc/fakepasswd");
if(!newFakePassFile)
{
seteuid(uid);
fprintf(stderr,"\nFake password file permition denied.\n");
exit(-1);
}
newFakePassFile << newBuff;
newFakePassFile.close();
seteuid(uid);
/*execve(file,arg,env);*/
system(arg); /* lame approach, but I'm so drink ;) */
exit(-1);
}
else fprintf(stderr,"\nIncorrect password.\n");

}while(num_try<4);
exit(-1);
}
[------- end --------]



Комментарии:


Цитировать сообщение


[ Комментарии ] [ Доска объявлений HackZone ]