Je ne comprend pas ce code.... - C - Programmation
Marsh Posté le 16-10-2006 à 17:56:41
hexa
après je connais pas la programmation win32, mais ça me semble hasardeux comme méthode
de toute façon doit en manquer un bout, là
Marsh Posté le 16-10-2006 à 18:07:17
en tout cas ... ils parlent d'exploit dans la parti où il y a ce code ..
Marsh Posté le 16-10-2006 à 18:12:37
ouais enfin "exploit" en anglais, hein, c'est pas du tout le même sens qu'en français
Marsh Posté le 16-10-2006 à 18:14:27
Marsh Posté le 16-10-2006 à 18:17:39
.
Marsh Posté le 16-10-2006 à 18:22:35
Méthode de hacking.
Après, selon l'endroit où tu l'as trouvé : c'est un piège-à-con, ou alors, c'est vrai mais corrigé depuis longtemps, ou alors c'est vrai et ça fonctionne, mais à quoi cela peut bien te servir ?
Sachant que la première possibilité est la plus courante, à base de h4ck3rzz w4rl0rdz qui jettent des trucs au hasard dans un fichier .txt en pronant la c0nspir4ti0n.
Marsh Posté le 16-10-2006 à 18:25:38
C'est un piège à con. C'est un exemple d'utilisation de ... je sais pas comment ça s'appelle Mais le petit programme d'exemple à un trou, et va appliquer le shell code.
Marsh Posté le 16-10-2006 à 18:38:04
ReplyMarsh Posté le 16-10-2006 à 18:55:32
big_dadi_fat a écrit : Je ne comprend pas bien ce que tu dis là... |
C'est quoi ce magazine ?
big_dadi_fat a écrit : je veux savoir c'est quoi ce code, ce n'ai pas sorcier ! |
Ben personnellement j'ai pas fait w4rl0rdz en formation
Marsh Posté le 16-10-2006 à 18:58:12
Elmoricq a écrit : C'est quoi ce magazine ? |
MISC, je l'ai ici
Marsh Posté le 16-10-2006 à 18:58:15
big_dadi_fat a écrit : Je ne vois pas ce qu'un piége vien faire dans un petit magazine de securité et de programmation ...... |
c est pas le code le piege
c est le magazine
Marsh Posté le 16-10-2006 à 19:01:40
.
Marsh Posté le 16-10-2006 à 19:04:08
kadreg a écrit : MISC, je l'ai ici |
caÿ bieng ?
genre c'est du niveau de ces fichiers .txt qui se baladent un peu partout et qui font la joie des étudiants, ou c'est un peu sérieux ?
Marsh Posté le 16-10-2006 à 19:07:35
Non, c'est plus sérieux. Par exemple, le bout de code là, on va pas de dire ce qu'il fait et tagada itoo, mais pourquoi es ce que cela crée des failles, et comment ça marche (ici, l'écrasement du point de retour de la fonction main), explication du contenu du shellCode (ce n'est que les opcodes directs, c'est tout con).
Par contre, c'est totalement hors de prix, et tu fini avec un super mal de crane à la fin, c'est souvent un poil complexe. J'ai laissé tombé, je suis trop nul
Marsh Posté le 16-10-2006 à 19:12:33
ReplyMarsh Posté le 16-10-2006 à 19:15:24
kadreg a écrit : Non, c'est plus sérieux. Par exemple, le bout de code là, on va pas de dire ce qu'il fait et tagada itoo, mais pourquoi es ce que cela crée des failles, et comment ça marche (ici, l'écrasement du point de retour de la fonction main), explication du contenu du shellCode (ce n'est que les opcodes directs, c'est tout con). |
hors de prix faut pas non plus exagerer, 7,50 euros tous les deux mois c'est pas la mort pour un magazine. Ceci dit c'est vrai qu'il faut quand meme pas mal de connaissances en systemes et reseaux pour pouvoir aborder les articles un peu pointus.
Marsh Posté le 16-10-2006 à 19:17:00
P-Y a écrit : hors de prix faut pas non plus exagerer, 7,50 euros tous les deux mois c'est pas la mort pour un magazine. |
8 euros, ça vient d'augmenter
Marsh Posté le 16-10-2006 à 19:20:55
big_dadi_fat a écrit : euh je ne vous suis plu là |
Bah en gros, la suite de caracteres en Hexa correspondent a du code assembleur, et apparement ce code se lancera si l'utilisateur valide une MessageBox.Apres pour ce que fait le code, j'ai pas le courage de traduire tous les opcodes . Ceci etant dit, je sais pas pourquoi tu veux absolument le savoir, mais si tu veux te mettre au C, c'est clairement pas le meilleur moyen de commencer...
kadreg a écrit : 8 euros, ça vient d'augmenter |
Ah tiens, j'ai pas fait gaffe
Marsh Posté le 16-10-2006 à 19:52:27
ReplyMarsh Posté le 16-10-2006 à 20:19:39
big_dadi_fat a écrit : Je programme en C depuis un bon moment et je n'ai jamais vu un code de se genre, c'est pour ca que je me demander .... |
ok d'accord, effectivement c'est vrai que c'est pas banal comme syntaxe, mais ca compile et ca fait ce que c'est sense faire, meme si c'est pas tres legal
Marsh Posté le 16-10-2006 à 22:40:05
je peux jouer ?
bon, alors d'abord, voici l'assembleur à l'origine des opcodes :
Code :
|
Donc alors en fait, stout con : la ligne 10 fait un saut indirect vers l'adresse virtuelle de LoadLibrary (7C801D77h), et charge la dll user32.dll, permettant ainsi d'utiliser MessageBox().
Puis une fois qu'on a le handle de user32.dll, on le transmet en paramètre, ainsi qu'un pointeur vers la chaine 'MessageBoxA' à la fonction GetProcAddress() par le biais de son adresse virtuelle (7C80AC28h), qui permettra de récupérer l'adresse de la fonction MessageBoxA() exportée par user32.dll (ligne 18)
Enfin, une fois qu'on a récupéré cette adresse, on s'en sert pour afficher une jolie MessageBox qui affiche le message "Omega7" (ligne 28) Et enfin, on sort du programme par ExitProcess() et son adresse virtuelle 7C81CAA2h (ligne 32).
A noter ici que les pointeurs des chaines de caractères sont stockées sur la pile à cause du call qui les précede (et qui place l'adresse suivant ce call sur le sommet de la pile (esp), laquelle adresse est ensuite récupérée dans le registre ecx via le "pop ecx" qui suit chaque appel indirect (jmp shellcode xxx)).
Quant à la signification du main(), tout con aussi :
- ligne 19 : on déclare un pointeur
- ligne 20 : on rectifie ce pointeur pour le faire pointer sur l'adresse de retour de main (on pointe donc sur ESP)
- ligne 22 : on remplace l'adresse de retour du main par l'adresse de shellcode, ceci permettra donc à shellcode de s'éxecuter dés que main sera fini. Le programme sera ensuite terminé par le ExitProcess() contenu dans shellcode.
Bref, un truc de petite bite, y'a rien de bien méchant là dedans : code automodifié + écrasement de pile
edit: quand je vous dit que l'assembleur ça roxxe
Marsh Posté le 16-10-2006 à 22:57:00
kadreg a écrit : |
complexe, ça ?
c'est un truc de gamin, me dit pas que t'es pas capable de piger ça ?
kadreg a écrit : 8 euros, ça vient d'augmenter |
8 pour ça ? et ben putain, même le journal de Mickey est plus instructif
Marsh Posté le 16-10-2006 à 22:58:23
Harkonnen a écrit : complexe, ça ? |
sisi, je comprends, mais il faut un minimum de backgroud, connaitre ESP, tout ça. Et j'ai jamasi trop pratiqué l'assembleur, je ne suis pas un compilateur
Marsh Posté le 16-10-2006 à 23:04:19
kadreg a écrit : sisi, je comprends, mais il faut un minimum de backgroud, connaitre ESP, tout ça. Et j'ai jamasi trop pratiqué l'assembleur, je ne suis pas un compilateur |
ben disons que si y'a une leçon à tirer de ça, c'est que si on commence à faire le con avec ESP, alors on peut facilement faire des trucs pas cools !
quand on se met à l'assembleur, le truc le plus important à savoir est qu'on ne fait jamais le con avec ESP, sauf si on sait ce qu'on fait. car mine de rien, ici, c'est la pierre angulaire de ce hack, aussi bien au niveau du code assembleur (avec le call qui place les adresses des chaines de caractères sur la pile, donc à l'adresse pointée par ESP), qu'au niveau du code C (initialisation d'une variable locale juste après le début de la fonction, donc pointée par ESP-2 -ESP contenant l'adresse de retour de main()-, et rectification de l'adresse de cette variable pour faire pointer ret sur l'adresse de retour (&ret + 2))
moralité : il faut pas faire le con avec ESP
Marsh Posté le 17-10-2006 à 11:27:16
.
Marsh Posté le 17-10-2006 à 12:14:08
euh... ok c'est pas bien méchant comme hack, mais c'est quand même d'un certain niveau, faut comprendre certains concepts comme la pile, little endian, comment sont créees les variables locales à une fonction, etc...
commence donc par apprendre le C à fond, on verra après hein
Marsh Posté le 18-10-2006 à 11:07:30
ReplyMarsh Posté le 18-10-2006 à 11:08:38
j'memmerdais, alors j'ai voulu faire mumuse
voici le désassemblage de main()
Code :
|
On constate à la ligne 38 que l'adresse de shellcode est transférée dans la zone mémoire pointée par ecx, lequel ecx contient l'adresse de retour de main(), pointée par ESP+8.
Par contre, avec le débugger on s'aperçoit que dés que l'accolade fermante du main est atteinte, ESP revient comme par magie à sa valeur initiale, ce qui fait que ce hack de gamin ne fonctionne pas avec le compilo de VC++ Express
J'imagine que le runtime de la CRT doit sauvegarder ESP avant le main(), et ensuite le restaurer. Je sais pas si GCC possède cette sécurité, des amateurs pour tester ?
Au passage, on remarquera aussi que la fonction strlen() est inlinée.
Voila, c'était juste pour m'occuper
Marsh Posté le 18-10-2006 à 11:11:11
ReplyMarsh Posté le 18-10-2006 à 11:14:57
ReplyMarsh Posté le 18-10-2006 à 11:18:41
ReplyMarsh Posté le 18-10-2006 à 11:21:05
big_dadi_fat a écrit : |
ça n'a rien à voir du tout
de toute façon, si tu utilises Visual C++ Express, le shellcode n'est jamais exécuté comme je viens de le signaler.
et même s'il était exécuté, tout ce qu'il fait c'est afficher une pauvre MessageBox, rien de plus.
y'a un bug dans ton code, coco
Elmoricq a écrit : Moi quand je m'ennuie, je mange un kisscool. |
moi je participe à l'éducation des masses nourries au Java
Marsh Posté le 18-10-2006 à 11:23:56
ReplyMarsh Posté le 18-10-2006 à 11:25:16
big_dadi_fat a écrit : Ben justement il ne poséde pas cette securité j'ai tester avec code::blocks (compilo GCC) , et j'ai des prob, je ne sais pas si vous avez lu le poste avant le tien mais ..... |
ça n'a *rien* à voir ! rien du tout !
le probleme est ailleurs
Marsh Posté le 18-10-2006 à 11:26:48
Harkonnen a écrit : |
strébien java, spice de dino
Au moins, on se retrouve pas à faire ce genre de conneries par accident p
Marsh Posté le 18-10-2006 à 11:27:56
big_dadi_fat a écrit : Comment ca rien à voir ! alors que je vien d'avoir tout ces prob aprés avoir executer le code avec Code::Blocks .. |
mais non, ça n'a rien à voir ! explique moi en quoi le fait d'afficher une MessageBox peut foutre ton système en l'air ? tu as lu l'explication que j'ai faite sur le source que tu as posté ?
Marsh Posté le 18-10-2006 à 11:32:04
L'ASM ça peut format c: dans IE alors nous fait pas croire n'importe quoi monsieur Harkonnen
Marsh Posté le 16-10-2006 à 17:55:07
Salut , je ne comprend pas la signification de ce code :
Merci
Message édité par big_dadi_fat le 15-11-2006 à 18:15:40