Programmation

dimanche 25 août 2019, 23:29  #1
Programmation ELF x64 - Shellcoding - Sheep warmup
darkattila
  • 2 posts

Bonjour,

Je suis bloqué dans ce challenge. J’ai créé un shellcode qui saute au dessus des moutons, puis exécute un shell. Cela fonctionne bien sur un programme de test (exécution classique en stack). Mais sur le programme du challenge - qui j’ai récupéré et compilé en local- cela ne marche pas. Sur gdb, je vois que le shell est bien appelé, mais il y a directement un exit. A priori, ce n’est pas - à ce stade - un problème de droits, car tout est exécuté en mode root. Quelqu’un aurait un tuyau ?

Merci !

lundi 26 août 2019, 11:48  #2
Programmation ELF x64 - Shellcoding - Sheep warmup
Th1b4ud
  • 1636 posts

Petite astuce pour maintenir le shell ouvert :
cat shellcode.txt - | ./sc-exec

Sinon je pense que tu risques d’avoir une surprise quand tu obtiendras ton shell. Tu devras surement remettre les mains dans le cambouis ;)

mardi 27 août 2019, 18:57  #3
Programmation ELF x64 - Shellcoding - Sheep warmup
darkattila
  • 2 posts

Merci ! Géniale l’astuce. Mais sur le fond, je ne comprends quand même pas pourquoi dans le cas d’une exécution du shellcode en stack, j’ai directement un prompt, alors que pour une exécution par le programme du challenge, il me faut passer par une astuce. C’est lié à une propriété du stack ?

jeudi 19 septembre 2019, 19:32  #4
Programmation ELF x64 - Shellcoding - Sheep warmup
Forgi
  • 7 posts

Petite réponse en retard, mais si ça peut apporter une meilleure compréhension à l’OP, je poste quand même.

Ceci n’a rien à voir avec la stack, c’est une histoire de pipe (https://openclassrooms.com/fr/courses/1513891-la-programmation-systeme-en-c-sous-unix/1514724-les-tubes et Google si tu veux approfondir ce sujet).
Dans la commande de @Th1b4ud, la commande cat, va envoyer le fichier shellcode.txt au programme (qui va donc l’exécuter), puis va créer un pipe entre ton terminal et le shell que ton shellcode spawn.
Sans cela, l’input du shell que tu fais spawn (son stdin) n’est lié à aucun descripteur de fichier, donc il se ferme, impliquant la fermeture du shell (comme un Ctrl + C).

Il existe d’autres solutions pour réaliser ce pipe, par exemple sans passer par un fichier :

(printf "\x90" ; cat) | ./sc-exec

où "\x90" est ton shellcode.

Voili voilou !  😉

vendredi 20 septembre 2019, 09:19  #5
Programmation ELF x64 - Shellcoding - Sheep warmup
Th1b4ud
  • 1636 posts

Exact ! Merci pour le complément d’informations ;)