web-dev-qa-db-fra.com

Ce programme ne peut pas être exécuté en mode DOS

Je fais un pentest sur une boîte Windows XP et j'ai obtenu un shell avec de faibles privilèges. En tant que tel, j'essaie d'augmenter mes privilèges. Cependant, chaque .exe que j'essaie d'exécuter est me donnant "Ce programme ne peut pas être exécuté en mode DOS". Existe-t-il une sorte de configuration que je dois modifier sur la boîte ou existe-t-il une stratégie différente pour l'augmentation des privilèges dans un environnement comme celui-ci? "

7
Enigmatic Cipher

Contexte

Ce message provient de l'en-tête de base de chaque exécutable Windows (format PE). Le message (et le code qui l'affiche) est techniquement modifiable, mais tous les compilateurs semblent simplement émettre du code qui affiche cette même chaîne, puis se ferme. C'est du code exécutable 16 bits (comme un DOS .COM file), destiné à être affiché lorsque vous essayez d'exécuter le programme sur MS-DOS ou sur des systèmes similaires à Windows. Le chargeur de programmes de Windows l'ignore généralement.

Explication

Cependant, il y a un cas où Windows peut afficher ce message: lorsque vous essayez d'exécuter un PE qui est compilé pour une version plus avancée de Windows que celle que vous utilisez, surtout si le code du programme principal est pour une architecture de processeur différente que l'OS peut prendre en charge. (Ceci est similaire à, par exemple, essayer d'exécuter du code Win32 sur DOS 16 bits.) À partir d'une interface graphique, vous obtiendrez une erreur contextuelle, mais dans la ligne de commande, vous pouvez très bien recevoir ce message.

Le candidat évident ici est que vous essayez d'exécuter du code sur Windows XP (affreusement obsolète) et que vous dites que vous utilisez "i686 -w64 - mingw32-gcc". Si vous compilez des binaires 64 bits pour Windows XP, il est fort probable qu'ils ne fonctionnent pas; bien qu'une version 64 bits de XP existe techniquement (il s'agit en fait d'une version de noyau différente, 5.2 vs 5.1, mais elle est appelée XP), elle n'a jamais été largement utilisée; la très grande majorité des XP ne sont que 32 bits. Si vous souhaitez une vérification rapide de 32 bits par rapport à 64 bits à partir de la ligne de commande, vérifiez la présence d'un \Windows\SysWOW64 répertoire (qui contient les binaires système 32 bits sur les machines 64 bits); s'il n'existe pas, vous utilisez un système d'exploitation 32 bits.

Recommandation

  • Sauf si vous A) avez besoin de 64 bits pour quelque chose et B) savez que votre cible est 64 bits, utilisez uniquement des charges utiles 32 bits.
  • Assurez-vous que votre code et votre compilateur ciblent XP (Vista et versions ultérieures ont ajouté une tonne de nouvelles API qui empêcheront un programme qui les utilise de s'exécuter sur XP).
  • Pensez à faire tourner un XP VM pour tester si vos charges utiles s'exécutent localement avant de les essayer sur la machine cible).
10
CBHacking

Assurez-vous d'avoir livré correctement la charge utile, j'ai eu un problème similaire lors du transfert de accesschk.exe via ftp. Le FTP permet le transfert en mode ascii et binaire, si vous le transférez en mode binaire, cela devrait fonctionner.

Le mode binaire transfère les fichiers, bit par bit, tels qu'ils sont sur le serveur FTP. Le mode Ascii, cependant, téléchargera le texte directement. Vous pouvez taper ascii ou binaire pour basculer entre les types.

Pour ce faire, connectez-vous au service ftp et tapez "binaire", vous devriez obtenir une réponse disant "200 Type set to I"

remettez le fichier et exécutez l'exécutable.

8
John Rogers