0 votes

Comment exécuter une application Java qui souhaite se lier aux ports 80 et 443?

D'accord, donc j'allume mon ordinateur portable, je me connecte à mon compte utilisateur régulier et je commence à ouvrir / exécuter une application HTTP-proxying basée sur Java appelée burp via Terminal.app. Il s'exécute normalement mais refuse de se lier aux ports 80:http et 443:https. Je suppose que l'erreur est liée aux privilèges alors je..

user@MacBook-Pro:~$login
login:root
Mot de passe:********

..me connecte avec succès en tant qu'utilisateur root et..

root@MacBook-Pro:~#open /Users/user/Downloads/burpsuite_free_v1.6.01.jar

..retourne l'erreur suivante:

LSOpenURLsWithRole() a échoué avec l'erreur -10810 pour le fichier
/Users/user/Downloads/burpsuite_free_v1.6.01.jar.`

Cependant, je n'observe pas cette erreur lorsque je suis connecté en tant qu'utilisateur régulier; ni quand je suis connecté en tant que root via l'interface graphique d'OS X.

Je ne suis pas sûr pourquoi burp refuse de se lier aux ports 80:http et 443:https. S'il s'agit simplement d'une erreur due à la propriété (chown) et aux autorisations (chmod); j'aurais pensé que l'accès en tant que root était censé transcender de telles limitations.

Basé sur cette question et réponse je peux voir ce que LSOpenURLsWithRole() & l'erreur -10810 signifient. Je reçois cette erreur parce que le fichier .jar n'est pas une application exécutable.

Mais comment puis-je résoudre ce problème et faire fonctionner cela sur ma machine?

1voto

shsteimer Points 8749

Normalement, vous ne pouvez pas exécuter un fichier .jar (qui est un fichier Java ARchive) en utilisant la commande open sur OS X. Ce n'est pas un fichier exécutable, il ne donne aucune indication au système sur la façon dont il devrait normalement être exécuté, c'est pourquoi open vous renvoie l'erreur LSOpenURLsWithRole() que vous voyez ci-dessus.

Tout d'abord, vous devrez installer Java sur votre Mac. La manière la plus simple de le faire est d'ouvrir une fenêtre Terminal.app et de taper :

java -version

Si cela renvoie une version de java comme ceci :

IanCsiMac:~ |ruby-2.1.5|
> java -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

Vous avez terminé. Java est prêt à être utilisé. Si Java n'est pas présent sur votre système, l'exécution de cette commande fera apparaître une fenêtre vous demandant si vous souhaitez l'installer. Suivez les instructions et une fois que vous avez terminé, java -version vous montrera quelque chose comme ce que vous avez vu ci-dessus. La version peut être différente, mais la commande fonctionnera.

Vous devez maintenant exécuter votre fichier .jar en utilisant la commande java. Vous devez fournir trois options à la commande java pour que cela fonctionne :

  1. L'option -jar qui indique à java que vous exécutez le contenu d'un fichier Java ARchive;
  2. Une option mémoire pour la machine virtuelle Java sous la forme -Xmx1024m; et enfin
  3. Le chemin du fichier .jar sur le disque.

Pour votre téléchargement, cela ressemblera à ceci :

java -jar -Xmx1024m /Users/user/Downloads/burpsuite_free_v1.6.01.jar

Cela lancera le programme MAIS il ne pourra toujours pas être lié aux ports 80 et 443. Ce sont des ports protégés. Les ports <1024 sur n'importe quel Mac OS X ne peuvent être liés que par des processus démarrés en tant que root.

La manière correcte d'exécuter des programmes en tant que root est d'utiliser la commande sudo, pas de vous connecter en tant qu'utilisateur root. Cela apporte un niveau de contrôle et d'indirection à vos actions pour éviter de faire quelque chose de stupide accidentellement comme rm -rf / sans qu'on vous demande si vous êtes sûr de vouloir faire une chose aussi stupide.

Ainsi, la forme finale de votre commande sera :

sudo java -jar -Xmx1024m /Users/user/Downloads/burpsuite_free_v1.6.01.jar

Vous devrez entrer votre mot de passe et, en supposant qu'aucune autre application ne soit déjà liée aux ports 80 et 443, votre application démarrera et écoutera sur ces ports.

Si cela échoue car il ne peut pas être lié aux ports 80 et 443, vous devrez trouver ce qui est déjà lié là-bas et l'arrêter. Vous pouvez utiliser la commande lsof pour le découvrir.

Pour le port 80, l'appel est :

sudo lsof -iTCP:80 -sTCP:LISTEN -n -P

Pour le 443, c'est :

sudo lsof -iTCP:443 -sTCP:LISTEN -n -P

La sortie de cette commande, en supposant que quelque chose écoute sur le port, ressemblera à ceci :

> sudo lsof -iTCP:80 -sTCP:LISTEN -n -P
COMMANDE PID UTILISATEUR   FD   TYPE             DEVICE SIZE/OFF NODE NOM
nginx    50 root    9u  IPv6 0x8978b255ac4ef0b7      0t0  TCP *:80 (LISTEN)

Comme vous pouvez le voir, j'ai un processus appelé nginx écoutant sur le port 80. Il a l'identifiant de processus 50.

Je peux tuer ce processus avec :

sudo pkill nginx

Cela ne garantit pas nécessairement qu'il ne tentera pas de revenir, mais comment gérer cela de manière complète est mieux traité comme une question entièrement distincte sur le site.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X