Passer du texte d'un programme A vers un programme B utilisant scanf, (f)gets

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour.

Je ne sais pas si quelqu'un pourra me répondre mais voilà je m'intéresse pas mal à la sécurité et pour le moment j'essaye de créer des exploits en C (je sais le faire manuellement sans trop de souci, mais là le but est de créer un programme qui exploite le programme vulnérable (un exploit quoi :P ). Je précise qu'il s'agit de programme créés par moi même et exploités sur ma propre machine).

Pour un programme dont le texte est passé en argument, pas de souci, je le fais avec la fonction execl(). Par contre dans ce cas ci mon programme vulnérable demande à l'utilisateur d'entrer un message via une fonction de saisie (scanf, gets etc).

Manuellement je procède ainsi:

1
./monprogramme <<< AAAAAAAA

Je ne suis pas "certain" de cette action mais j'imagine que les données sont insérées dans le flux d'entrée donc scanf n'attend pas que l'utilisateur entre quelque chose vu que des données sont déjà présentes dans le flux.

Mais là je voudrais le faire par le biais d'un programme et non de façon manuelle (l'exploit transmet la chaine au programme vulnérable comme si l'utilisateur l'avait déjà entré).

Alors encore une fois je ne demande pas du tout "comment faire un exploit" ça je sais le faire, ce que je n'arrive pas à faire c'est uniquement ce passage de texte du programme exploit vers le flux d'entrée du programme vulnérable (execl ne permettant que de passer des arguments mais ici c'est inutile).

Merci d'avance. ;-)

+0 -0

Il faudrait que tu regarde du côté des pipes et de la redirection de flux. En gros l'idée c'est de créer manuellement ton pipe dans le code de ton programme machiavélique et lui dire que le stdin de ton exploit est désormais redirigé vers le file descriptor (fd) que tu auras ainsi créé.

+0 -0

Au plus simple tu peux demander au shell de diriger la sorti d’un programme vers l’entré d’un autre. C’est même précisément comme ça que les utilitaires un*x (ls, cat, grep, sed, etc.) sont fait pour fonctionner entre eux.

1
truc@bidule$ ./exploit | ./mon_programme

La répétition est la base de l’enseignement. — ☮ ♡

+1 -0
Auteur du sujet

Effectivement c'était bien via un pipe qu'il fallait procéder. Une connaisance m'a plutôt conseillé python et je dois avouer qu'après avoir testé ben c'est quand même largement plus simple xD (même pour la gestion des pipes ^^)

Un lien qui m'a aidé: http://www.zeitoun.net/articles/communication-par-tuyau/start)

Par contre j'ai quelques soucis mais cette fois ci par rapport à python :P

Y a t-il un moyen d'exécuter un script python en lui précisant si il doit s'exécuter en 32 ou en 64 bits (en bref je voudrais récupérer l'adresse d'une variable d'environnement, le hic c'est que l'adresse récupérée est en 64 bits alors que le programme auquel je vais la passer est lui en 32 bits donc forcément ça va pas trop marcher… ^^)

Sinon ben j'essayerai de me démerder en C mais là ça risque quand même d'être plutot chaud (puis je me suis toujours dit que je me mettrais à python alors voilà une bonne occasion :P )

Édité par Que20

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte