You are not logged in.
Bonsoir à tous
Je commence à me documenter sur la sécurité informatique et autre joyeuseté du domaine "hacking", j'ai peu de connaissance ( un peu de C/C++ ) mais j'ai tout le temps pour apprendre ; en parallèle je commence à lire ouvrage sur l'ASM afin de comprendre le pourquoi du comment des failles relative aux applications.
Il m'est arrivé plusieurs fois au cour de mes recherches de tomber sur le mot shellcode et j'ai essayé d'approfondir un peu la chose, j'ai compris qu'un shellcode n'est ni plus ni moins qu'un code ASM et que si on arrive à le faire rentrer dans la mémoire d'un programme via une faille ( B.O.F par exemple ) et qu'on arrive à le faire exécuter alors on est capable de faire pas mal de chose (execve /bin/sh ) par exemple.
Je n'ai pas encore saisi comment on rentre le code dans le programme d'un point de vue logiciel enfin je n'ai pas encore compris la subtilité exacte même si je commence à cerner la chose, j'attends d'approfondir mes connaissances en ASM pour cela.
J'ai plusieurs questions :
Imaginons un poste cible doté d'un logiciel avec une faille type B.O.F ou autre qui nous permettrait d'exécuter un shellcode, le dit logiciel se lance avec le setuid root l'intérêt est d'obtenir un shell root ; comment faire en sorte que le shellcode soit rentrée en mémoire ? J'imagine qu'on ne va pas dire à l'utilisateur "rentre ca dans le champ de saisie XXX" surtout qu'une suite de caractères comme ca ( longueur et "exotisme" ) pourrait en rebuter plus d'un ?
Quelles sont les limites des shellcodes, j'ai lu que si le shellcode contenait un NUL BYTE cela pouvait gêner ( une histoire de fonction de manipulation de chaine qu'ils faut que je retrouve ), et qu'un shellcode trop grand serait plus difficile à faire "passer" mais en dehors de ca existe t'il des choses qu'un shellcode ne puisse exécuter ( toujours avec une appli "root" ) ou le contrôle est il totale ce qui est a mon sens logique mais comme je l'ai dit je n'ai que de maigre connaissance qui ne demande qu'a s'étoffer ?
Merci d'avance
Bonne soirée
Offline
Prenons un exemple où le pc "cible" a le port ftp (21) ouvert.
Or, le service qui tourne derrière contient une vulnérabilité de type BoF, tu peux dès lors, créer un script exploitant cette vulnérabilité.
Comme tu le dis, il faut que le Shellcode soit "inséré" en mémoire. Cela signifie donc qu'il faut que tu gères avec les entrées / sorties d'un projet.
Ex: Un programme va demander une chaine de caractère en entrée, puis la copier dans un buffer particulier avec la fonction strcpy() (fonction obsolète dû au nombre de failles de type BoF car elle ne vérifie pas que la longueur de la chaine en entrée est égale ou plus petite au buffer ciblé). Si cette dernière est trop grande, tu vas pouvoir réaliser un Buffer Overflow.
Dès lors, pour "insérer" un shellcode en mémoire, il faut que tu traites avec les "entrées/sorties" (donc plus les entrées) d'un programme.
De nombreuses méthodes comme le fuzzing permettent de trouver des vulnérabilités de ce type en insérant dans les entrées, de nombreuses variables aléatoires et ainsi voir le comportement du programme, s'il crash etc..
J'espère avoir pu éclairer tes lanternes.
Offline
D'accord je commence a mieux comprendre la chose, merci beaucoup. Donc à chaque fois que l'utilisateur peut entrée une donnée si le code est "mal conçut" il y a un risque de BOF donc ? Peut on dire alors qu'un programme sans entrée utilisateur ne présente aucune possibilité de BOF ?
Offline
Papy wrote:
Donc à chaque fois que l'utilisateur peut entrée une donnée si le code est "mal conçut" il y a un risque de BOF donc ?
C'est exactement ça ! Par exemple un serveur FTP va tôt ou tard demander à l'utilisateur de taper son pseudo et éventuellement un password, de même il faudra envoyer des commandes à ce serveur.
Par conséquent si le développeur a mal conçu son code, le pseudo / password / commande qui serait plus long que le buffer alloué par le dév aura pour conséquence de dépasser ce buffer, et donc d'écraser des infos contenues sur la pile. Si tel et le cas (concrêtement si tu envois trop de données et que le programme plante), c'est qu'il y a un bof d'exploitable et le but du jeu sera d'y insérer ton shellcode.
Après je ne vais pas m'aventurer là dedans, l'applicatif n'étant pas mon domaine de prédilection j'aurai peur de dire des énormités, mais je connais les bases (stack overflow, return to libc, heap overflow, ...) donc si je peux te filer un coup de pouce en matière de compréhension, c'est avec plaisir que je tenterai de t'aider.
En revanche pour ta question concernant les programmes sans aucune saisie de l'utilisateur, je dirai qu'à priori il n'y a pas de risques, mais j'entends déjà des voies se lever : "Oui sauf si le programme [...]", donc je laisse les autres répondre ![]()
Offline
Merci beaucoup ca fait plaisir de trouvé des personnes qui acceptes de partager leur savoir ![]()
Offline
Je me permet de réUp ce message afin de vous demander comment réaliser une machine "cible" j'ai à ma disposition un vieux portable ( DD 40Go et ram DDR1 type desktop ; je ne sais pas le reste des caractéristiques mais ça donne une idée
)
J'aimerai savoir ce que je pourrais mettre comme distrib linux et quels logiciels afin de me faire une situation assez réaliste .
Bien sur certain soft devront être "out dated" afin de pouvoir comprendre et mettre en pratique l'utilisation des shellcodes et autre faille déja recensé .
Merci d'avance .
Bonne soirée
Offline
Salut !
Des exemples de sites qui peuvent t'intéresser :
http://www.exploit-db.com/
milw0rm (plus updaté malheureusement) et rechercher un remote exploit.
...
Dès lors, tu pourras installer le service correspondant, et avoir un code source d'exploit qui marche.
Offline
Merci, je connaissais Injector déja mais d'autre référence ne sont pas superflue, auriez vous d'autre site à me conseiller car google me retourne de nombreux liens mais peut être que certain sont plus pertinent que d'autre, ne possédant pas (encore) les connaissances nécessaires je m'en remet donc à vous.
Pourriez vous me dire quels sont les types de services qu'on retrouve le plus couramment sur une machine "cible" j'imagine un serveur HTTP ( Apache est assez souvent utilisé ) un FTP mais quoi d'autre ?
Merci encore
Offline
Je me permet de réup à nouveau ce message car j'ai encore une question au sujet des shellcodes ou plutôt au sujet d'un shellcodes, voici son équivalent en C :
sock = socket(PF_INET, SOCK_STREAM, 0);
bind(sock, *[2, 64533, 0], 16);
listen(sock, 5);
nsock = accept(sock, 0, 0);
dup2(nsock, 0);
dup2(nsock, 1);
execve("/bin/sh", 0, 0); // http://promhyl.tk/index.php?a=art&art=83Tout d'abord j'ai du mal a comprendre le 2 eme argument de la fonction bind() le premier élément correspond a quoi exactement ? au type de domaine (AF_INET ?) ?
Ma seconde compréhension vient des instructions dup2 qui apparemment duplique un fd ; les fd 0 et 1 sont stdin et stdout ; donc si je comprend bien stdin et stdout sont donc remplacé par la socket renvoyé par accept() c'est ca ?? A quoi sert cette "manœuvre" ? Rediriger toutes les entrée / sortie sur la socket ?
Pourriez vous éclairer ma lanterne ?
Merci d'avance.
Bonne soirée.
Offline