logo Homepage
Pages: [1]
  Imprimer  
Auteur Fil de discussion: [HTML/Javascript] Lancer une application locale  (Lu 27464 fois)
The-Snake

Profil challenge

Classement : 9208/54318

Membre Junior
**
Hors ligne Hors ligne
Messages: 78


Voir le profil
« le: 21 Août 2009 à 08:41:35 »

Bonjour !

Je suis en train de développer un Intranet et il m'a été demandé de placer des lanceurs pour les applications utilisés en interne.
J'ai donc fait quelques recherche sur Google et j'ai trouvé une solution qui ne marche que sous Windows avec IE. Fort heureusement (enfin c'est vite dit ça aussi) c'est ce couple là qui est utilisé ici. C'était un petit Javascript avec de l'ActiveX...

Seulement, la solution n'a pas fonctionné...
Aussi je me demande, n'y a-t-il pas un moyen plus standard de lancer des application sans avoir à demander l'ouverture d'un fichier ? (parce que Google Earth doit être disponible par exemple, seulement Google Earth ça n'ouvre pas des fichiers).
Journalisée
Iansus

Profil challenge

Classement : 50/54318

Membre Senior
****
Hors ligne Hors ligne
Messages: 262


Voir le profil WWW
« #1 le: 21 Août 2009 à 09:12:30 »

Oui, je vois ce que tu veux dire, par exemple tu fais un lien vers un .exe, et au lieu de dire "télécharger le fichier ihezi.exe", tu veux qu'il te lance l'appli associé au fichier .exe ?

Voici ce que j'ai trouvé sur le net :

Code:
function lancerexe(exe)
{     
var w = new ActiveXObject("WScript.Shell");

try
{
w.run (exe,1,true);
}
catch(erreur) {}
}

// Exemple : lancerexe("C:\\Program Files\\Mozilla Firefox\\firefox.exe")

Après, ce n'est pas sûr que ça marche, mais c'est le seul moyen que j'ai trouvé ^^
Journalisée
The-Snake

Profil challenge

Classement : 9208/54318

Membre Junior
**
Hors ligne Hors ligne
Messages: 78


Voir le profil
« #2 le: 21 Août 2009 à 10:34:40 »

J'ai testé avec cette page là :
Citation
<html>
<head>
  <title>Test</title>
  <script type="Text/Javascript">
    function lancerexe(exe)
    {
      var w = new ActiveXObject("WScript.Shell");

      try
      {
        w.run(exe, 1, true);
      }
      catch(erreur) {}
    }
  </script>
</head>
<body>
<a href="#" onclick="lancerexe('C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE')" >Machin</a>
</body>
</html>
Une fois l'activité ActiveX autorisé, rien ne se passe... pas même de message d'erreur !
Décidemment ça me dépasse ! On peut pas faire confiance à du ActiveX !

EDIT: Voilà, j'ai repéré ce qui bloque.
Ce code marche. Mais voici les cas ou il ne fonctionne pas (et manque de bol, les deux cas bloquants représentent exactement la situation que je dois résoudre).

Ce code n'execute que des chemins relatifs et ne supporte pas les chemins absolus : on tape notepad.exe pour executer C:/Windows/notepad.exe.
Ce code n'execute pas l'application concernée si le lien ne se trouve pas sur une page ouverte directement depuis le PC sans passer par un serveur (pour la même page, le script marche si j'ouvre C:/www/index.htm mais ne marche pas si je l'ouvre en faisant http://127.0.0.1/index.htm).

N'y a-t-il donc aucun moyen de passer outre ?
« Dernière édition: 21 Août 2009 à 11:00:06 par The-Snake » Journalisée
Iansus

Profil challenge

Classement : 50/54318

Membre Senior
****
Hors ligne Hors ligne
Messages: 262


Voir le profil WWW
« #3 le: 21 Août 2009 à 11:21:16 »

Normalement, en tout cas, c'est mon cas, quand je suis sur localhost (ou 127.0.0.1) et que j'exécute ce script (pas sécurisé du tout, mais c'est juste à titre informatif) :

Code:
<?php

if(isset(
$_GET["dir"]))
{
$dir opendir($_GET["dir"]);
while($file readdir($dir)) echo "$file<br>";
}

?>

En passant par http://localhost/page.php?dir=/, j'obtiens la liste des fichiers et dossiers à la racine du lecteur.
Si ton répertoire www/ est sur le lecteur C:, en passant par /, tu peux accéder à tous les fichiers de manière relative, et donc faire :

http://localhost/page.php?dir=/Windows/notepad.exe , à moins que le script ActiveX ne parcoure pas l'arborescence des fichiers à la manière de PHP.
Journalisée
akway

Profil challenge

Classement : 351/54318

Membre Complet
***
Hors ligne Hors ligne
Messages: 151


Voir le profil
« #4 le: 21 Août 2009 à 11:29:08 »

Salut !

Au risque de dire des conneries je vais essayer de te filer un p'tit coup de patte puisque ces derniers temps je passe le plus clair de mon temps à jouer à SF4  au taf . *bored*

en vrac :

je me doute que ce n'est pas la solution la plus class mais t'es il possible de modifier le path sur les pc de ton domaine ? ce qui resoudrait le probleme N°1  qui concerne les chemins relatifs/absolus. voir gruger en lancant un bat qui lui lancerai ton appli située ailleurs? (okok c'est archi crado)

as tu essayé avec les variables d'environnement ? genre %APPDATA% pour cibler le program files. je ne sais pas s'il sera considéré comme relatif ou absolu dans le cas de ton script.

pour le deuxieme souci, a voir avec les variables d'environnement, je cherche de mon coté.
Journalisée

Please, do NOT feed the Troll.
Iansus

Profil challenge

Classement : 50/54318

Membre Senior
****
Hors ligne Hors ligne
Messages: 262


Voir le profil WWW
« #5 le: 21 Août 2009 à 13:29:07 »

Dans ce cas là, reste à savoir si ActiveX reconnaît les variables d'environnement...
Sinon, si tu veux une manière hyper crade, tu te mets un sous-répertoire avec l'éxécutable de php (php.exe) et quelques dll.
De la, tu lances un script php via le php.exe de la manière suivante :

Code:
<html>
<head>
  <title>Test</title>
  <script type="Text/Javascript">
    function lancerexe(exe)
    {
      var w = new ActiveXObject("WScript.Shell");

      try
      {
        w.run(exe, 1, true);
      }
      catch(erreur) {}
    }
  </script>
</head>
<body>
<a href="#" onclick="lancerexe('php script.php D%3A%5C%5CProgram%20Files%5C%5CBSPViewer%5C%5CBSPViewer.exe')" >Machin</a>
</body>
</html>

Et ton script PHP, de son côté lancera le fichier EXE trasmis urlencodé (pour éviter les espaces) comme ceci :

Code:
<?php

if(
$argc>=2)
exec(urldecode($argv[1]));

?>

En gros pour résumer :
ta page lance php.exe qui appelle le script PHP avec pour argument le chemin vers l'exe final à lancer et le script PHP le lance.
Script très sale, mais qui a des chances de marcher ^^
Journalisée
NiklosKoda

Profil challenge

Classement : 163/54318

Membre Complet
***
Hors ligne Hors ligne
Messages: 113


Voir le profil
« #6 le: 21 Août 2009 à 17:45:02 »

Code:
<?php

if(
$argc>=2)
exec(urldecode($argv[1]));

?>

Sapristi ! Avec un script comme ça ce serait peut être une bonne idée de faire une whitelist des exécutables autorisés...parce que là on peut faire une nouvelle épreuve dans la catégorie hacking (et même si ce n'est qu'une idée de départ, autant poser de bonnes bases dès le début )
Journalisée
Iansus

Profil challenge

Classement : 50/54318

Membre Senior
****
Hors ligne Hors ligne
Messages: 262


Voir le profil WWW
« #7 le: 21 Août 2009 à 18:09:46 »

Bien entendu Niklos, mais c'était effectivement pour poser les bases.
Je laisse votre imagination vagabonder sur les multiples attaques via un tel script ^^
Journalisée
The-Snake

Profil challenge

Classement : 9208/54318

Membre Junior
**
Hors ligne Hors ligne
Messages: 78


Voir le profil
« #8 le: 25 Août 2009 à 10:57:40 »

Normalement, en tout cas, c'est mon cas, quand je suis sur localhost (ou 127.0.0.1) et que j'exécute ce script (pas sécurisé du tout, mais c'est juste à titre informatif) :

Code:
<?php

if(isset(
$_GET["dir"]))
{
$dir opendir($_GET["dir"]);
while($file readdir($dir)) echo "$file<br>";
}

?>

En passant par http://localhost/page.php?dir=/, j'obtiens la liste des fichiers et dossiers à la racine du lecteur.
Si ton répertoire www/ est sur le lecteur C:, en passant par /, tu peux accéder à tous les fichiers de manière relative, et donc faire :

http://localhost/page.php?dir=/Windows/notepad.exe , à moins que le script ActiveX ne parcoure pas l'arborescence des fichiers à la manière de PHP.
Mais dans ce cas, est-ce que je ne parcours pas l'arborescence du serveur et non celui du client ?
Sachant que du point de vue des utilisateurs de ce futur intranet, le serveur sera distant, ça poserait problème.

Je me pose la question ? Quelles failles ce script poserait-il vraiment ?
Après tout, le but est d'executer un programme sur un poste client depuis un poste client : le serveur n'est-il donc pas intouchable (rien ne se passe sur le serveur) ?

Une faille ne pourrait venir que d'un webmaster malveillant uploadant un executable malveillant sur le PC client et le faisant ensuite s'executer, non ?

Bref à bien y réfléchir, l'idée du bat me convient mieux. On pourrait même alors se passer de Javascript, un simple lien vers le bat, on demande de l'executer plutôt que de le télécharger et tout irait bien ?
Journalisée
akway

Profil challenge

Classement : 351/54318

Membre Complet
***
Hors ligne Hors ligne
Messages: 151


Voir le profil
« #9 le: 25 Août 2009 à 11:13:37 »

crado quand même ,

Cela implique une maintenance sur tous les postes du domaine dés qu'il faut rajouter une application sur ta plateforme de lancement.
Sans parler de la répartition des droits au sein de l'entreprise(le gestionnaire de l' intranet qui à les droits d'admin des postes pour déployer son script)... mais cela ne doit pas être ton probleme majeur si tu travailles dans une petite/moyenne structure ou les taches sont centralisées.

A voir donc.

sujet 'achtment intéressant sinon.

« Dernière édition: 25 Août 2009 à 17:56:19 par akway » Journalisée

Please, do NOT feed the Troll.
The-Snake

Profil challenge

Classement : 9208/54318

Membre Junior
**
Hors ligne Hors ligne
Messages: 78


Voir le profil
« #10 le: 01 Septembre 2009 à 14:07:50 »

La solution du bat devient peu envisageable finalement.
Le bat exexcuté ouvre une console et apparamment il est impossible de faire en sorte que le script s'execute sans que la console soit visible.
Ce n'est pas génant pour moi mais ça troublera les utilisateurs de voir cette fenêtre toute noire apparaître, ils vont croire qu'ils ont fait une bétise. Cherchant sur google j'ai vu que le problème avait déjà perturbé pas mal de monde, mais la seule solution qui avait été envisagé est de non pas lancer l'executable en l'appelant directement mais en l'appelant par l'intérmediaire de la commande Start. Commande qui malheureusement n'a aucun autre effet qeu de lancer un nouveau terminal sans executer le binaire spécifié en argument.

C'est quelque chose qui a l'air très simple vu de loin, mais c'est quand même vachement compliqué.

Regretté execve...
« Dernière édition: 01 Septembre 2009 à 14:10:45 par The-Snake » Journalisée
Pages: [1]
  Imprimer  
 
Aller à: