webserver / héberger son site pour le web

Un problème informatique? Une question? Bref tout ce qui a un rapport avec l'informatique, les virus, les questions d'utilisation de logiciels...

Modérateurs : Naveed, GregLand

Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

Bon, Greg, désolé de te décevoir, il y a une faille dans WebServer :P ...

Je lance le serveur sur : C:\Files
A la racine de mon disque dur (C:\) je met un fichier Test.txt avec marqué "oups !" dedans
Avec mon joli terminal :
GET /../Test.txt HTTP/1.1
Host: localhost

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 6

oups !

:dry:
real34 a écrit : Par contre, je voulais savoir si il n'y avait pas de failles dans le logiciel qui permettrait d'avoir accès au disque dur entier ... [mais là, cela m'étonnerai, Greg n'aurait pas fait ça !! :D ]
Tu as ta réponse maintenant :?
GregLand
Programmeur & Administrateur
Programmeur & Administrateur
Messages : 4431
Enregistré le : 10 oct. 2003 09:36
Langage de programmation connu : Utilisés régulièrement :
- Visual DialogScript
- WinDev
- AutoIt
- AutoHotkey
- Html, Js, Vbs, PHP

Utilisés très peu :
- C et C++
- VB et VB.Net (pour les DLL)
- Java (Pour Android)
- ASM (pour désassembler)
- Python (quand je m'ennuie)
- et quelques autres....
Localisation : Les Damps (27)
Contact :

Message par GregLand »

Tout programme possède des bugs Image...
Je n'ai pas bien compris ce que je devais déduire du
Avec mon joli terminal :
GET /../Test.txt HTTP/1.1
Host: localhost

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 6
Config :
Image
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

Bon j'explique.

Quand tu visites une page, ton navigateur envoie une demande au serveur web.

Par exemple : (pour ce forum)

1) Le navigateur se connecte a gregland76.free.fr sur le port 80 puis envoie :

Code : Tout sélectionner

GET /forum HTTP/1.1
Host: gregland76.free.fr
2) Le serveur web envoie la page correspondante :

Code : Tout sélectionner

HTTP/1.1 200 OK
Content-Type: text/html;charset=iso-8859-1
Content-Length: n

[code html de la page]
Dans le cas de ton serveur web, quand je demande par exemple une page /Truc.txt, il recherche le fichier Truc.txt dans le dossier du serveur web (C:\Files) et il le renvoie ...

Certainement une condition du style :

Code : Tout sélectionner

if (file_exists("C:\\Files\\Truc.txt"))
{
     ...
}
Sauf que si je demande /../Test.txt :

Code : Tout sélectionner

if (file_exists("C:\\Files\\..\\Test.txt"))
{
    ...
}
Le fichier existe (.. remonte d'un dossier dans l'arborescence) et est renvoyé.

Je peux donc télécharger n'importe quel fichier sur le disque dur du serveur web ...
GregLand
Programmeur & Administrateur
Programmeur & Administrateur
Messages : 4431
Enregistré le : 10 oct. 2003 09:36
Langage de programmation connu : Utilisés régulièrement :
- Visual DialogScript
- WinDev
- AutoIt
- AutoHotkey
- Html, Js, Vbs, PHP

Utilisés très peu :
- C et C++
- VB et VB.Net (pour les DLL)
- Java (Pour Android)
- ASM (pour désassembler)
- Python (quand je m'ennuie)
- et quelques autres....
Localisation : Les Damps (27)
Contact :

Message par GregLand »

Image
Peux tu prendre quelques captures ? Je saisis pas ta manip... Image (Il est pas tard pourtant)
Config :
Image
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

Image Image
GregLand
Programmeur & Administrateur
Programmeur & Administrateur
Messages : 4431
Enregistré le : 10 oct. 2003 09:36
Langage de programmation connu : Utilisés régulièrement :
- Visual DialogScript
- WinDev
- AutoIt
- AutoHotkey
- Html, Js, Vbs, PHP

Utilisés très peu :
- C et C++
- VB et VB.Net (pour les DLL)
- Java (Pour Android)
- ASM (pour désassembler)
- Python (quand je m'ennuie)
- et quelques autres....
Localisation : Les Damps (27)
Contact :

Message par GregLand »

Ok pour le terminal...
Je peux donc télécharger n'importe quel fichier sur le disque dur du serveur web ...
Un exemple concret ?
Config :
Image
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

Tu as le cerveau qui dort ou quoi ? :rires:
mickael9 a écrit :Bon j'explique.

Quand tu visites une page, ton navigateur envoie une demande au serveur web.

Par exemple : (pour ce forum)

1) Le navigateur se connecte a gregland76.free.fr sur le port 80 puis envoie :

Code : Tout sélectionner

GET /forum HTTP/1.1
Host: gregland76.free.fr
2) Le serveur web envoie la page correspondante :

Code : Tout sélectionner

HTTP/1.1 200 OK
Content-Type: text/html;charset=iso-8859-1
Content-Length: n

[code html de la page]
Dans le cas de ton serveur web, quand je demande par exemple une page /Truc.txt, il recherche le fichier Truc.txt dans le dossier du serveur web (C:\Files) et il le renvoie ...

Certainement une condition du style :

Code : Tout sélectionner

if (file_exists("C:\\Files\\Truc.txt"))
{
     ...
}
Sauf que si je demande /../Test.txt :

Code : Tout sélectionner

if (file_exists("C:\\Files\\..\\Test.txt"))
{
    ...
}
Le fichier existe (.. remonte d'un dossier dans l'arborescence) et est renvoyé.

Je peux donc télécharger n'importe quel fichier sur le disque dur du serveur web ...
Le serveur est démarré dans C:\Files et pourtant j'accède a Test.txt qui est dans C:\ :closedeyes:
GregLand
Programmeur & Administrateur
Programmeur & Administrateur
Messages : 4431
Enregistré le : 10 oct. 2003 09:36
Langage de programmation connu : Utilisés régulièrement :
- Visual DialogScript
- WinDev
- AutoIt
- AutoHotkey
- Html, Js, Vbs, PHP

Utilisés très peu :
- C et C++
- VB et VB.Net (pour les DLL)
- Java (Pour Android)
- ASM (pour désassembler)
- Python (quand je m'ennuie)
- et quelques autres....
Localisation : Les Damps (27)
Contact :

Message par GregLand »

mickael9 a écrit :Tu as le cerveau qui dort ou quoi ? :rires:
Oui, c'est clair... :sick:
Config :
Image
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

GregLand a écrit :
mickael9 a écrit :Tu as le cerveau qui dort ou quoi ? :rires:
Oui, c'est clair... :sick:
Je dirais même qu'il hiberne








(pas taper)
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

Je réup un peu ce topic parce que ça me semble quand même important et c'est un bug qui mérite correction :p

Pour résumer.

Quand tu lances WebServer dans un certain dossier, c'est pour laisser les autres accéder à ce qu'il y a dedans, mais uniquement ce qu'il y a dedans.

Admettons que le serveur web soit lancé dans le dossier C:\MonSite
Si je demande le fichier Blabla.txt, j'imagine que le programme va rechercher C:\MonSite\Blabla.txt et le renvoyer si il le trouve.

Le problème c'est que le dossier ".." permet de remonter au niveau inférieur (dans l'arboresence)

Donc, si je demande la page ../autoexec.bat par exemple, le programme va aller chercher :

C:\MonSite\..\autoexec.bat

.. est le dossier parent, donc le fichier renvoyé sera simplement C:\autoexec.bat

Pour réparer le problème ya pas 36 solutions ^^
On filtre les ../ et les ..\

Attention il y a un piège !

Le fait de supprimer les ..\ et les ../ ne suffit pas à régler le problème.

En effet, si je tape ....//, seule la partie rouge va virer.

Et, la question à 1 million d'euros : que vas-t-il rester ?

../ (c'était prévisible hein ^^)

La solution serait donc quelque chose comme une boucle while du style (PHP) :

Code : Tout sélectionner

while (strpos($str, '../') !== false) // On efface les ../ jusqu'a ce qu'il n'y en ai plus
    $str = str_replace('../', '', $str);
Autre truc a filter si le programme ne rajoute pas le chemin complet avant le fichier. (C:\MonSite\), il faut aussi filtrer les chemins abolus (C:\..., D:\..., ...)

C:\MonSite\C:\Autoexec.bat -> invalide
C:\Autoexec.bat -> valide

:blink:
GregLand
Programmeur & Administrateur
Programmeur & Administrateur
Messages : 4431
Enregistré le : 10 oct. 2003 09:36
Langage de programmation connu : Utilisés régulièrement :
- Visual DialogScript
- WinDev
- AutoIt
- AutoHotkey
- Html, Js, Vbs, PHP

Utilisés très peu :
- C et C++
- VB et VB.Net (pour les DLL)
- Java (Pour Android)
- ASM (pour désassembler)
- Python (quand je m'ennuie)
- et quelques autres....
Localisation : Les Damps (27)
Contact :

Message par GregLand »

Je suis d'accord avec tout ce que tu viens de me dire... Image
(Et là tu vas te dire... ça y est, il est sorti de son hibernation ! lol)

WebServer n'est pas prévu pour une utilisation intensive ni une utilisation professionnelle...

Ce bug est important je l'admet, mais il est plus lié a l'extension vdshttpd.dll (qui n'est pas de moi et qui date de l'année 2003) et qui de plus est est toujours restée en phase Beta... :roll:
Config :
Image
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

GregLand a écrit :Ce bug est important je l'admet, mais il est plus lié a l'extension vdshttpd.dll (qui n'est pas de moi et qui date de l'année 2003) et qui de plus est est toujours restée en phase Beta... :roll:
Raison de plus pour changer de langage \o/
J'ai pu constater qu'en général c'est plutôt du bricolage qu'autre chose ce langage

Un petit exemple dans Remote execute :

Code : Tout sélectionner

:: pc.bat

@echo off
echo Voici le nom des PC connectes a votre reseau :
echo.
net view
echo Information :
echo -------------
echo Supprimez les \\ pour le nom du serveur
echo.
echo.
echo.
pause
(je note d'ailleurs qu'il est tout à fait possible de mettre des accents dans un batch, en utilisant un encodage spécial, avec Notepad2, c'est tout con : Edition -> Convertir -> OEM)

Dans un vrai langage, il est evident que tu auras jamais ça :)
Tiens, ben comme on est dans le sujet de la sécurité, je vais pouvoir te parler de Remote Execute :tongue:

Ben oui, il ouvre un port, qui est accessible de partout. OK ?
Mais heu, ça veut dire que si je connais ton IP et que je sais le port où tu as lancé Remote Execute, je peut faire ce que je veux sur ton ordi !

Evidemment tu peux restreindre avec le firewall, mais tout le monde n'en a pas, et ceux qui en ont un devront probablement le désactiver pour faire marcher RE (sauf si ils s'y connaissent un minimum)

C'est pourquoi je propose de mettre un mot de passe, côté client et serveur. C'est assez simple :

Code : Tout sélectionner

Serveur: Mot de passe ?
Client: *****
Serveur: OK / PAS OK -> Déconnexion / Redemande du pass
Client: INFO
Serveur: Mémoire libre:...
Modifié en dernier par Mick@el le 06 sept. 2007 19:14, modifié 2 fois.
GregLand
Programmeur & Administrateur
Programmeur & Administrateur
Messages : 4431
Enregistré le : 10 oct. 2003 09:36
Langage de programmation connu : Utilisés régulièrement :
- Visual DialogScript
- WinDev
- AutoIt
- AutoHotkey
- Html, Js, Vbs, PHP

Utilisés très peu :
- C et C++
- VB et VB.Net (pour les DLL)
- Java (Pour Android)
- ASM (pour désassembler)
- Python (quand je m'ennuie)
- et quelques autres....
Localisation : Les Damps (27)
Contact :

Message par GregLand »

Pour 1 extension ?
Non, pas vraiment... Image
Config :
Image
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

GregLand a écrit :Pour 1 extension ?
Non, pas vraiment... Image
[c.f. mon message d'avant]
GregLand
Programmeur & Administrateur
Programmeur & Administrateur
Messages : 4431
Enregistré le : 10 oct. 2003 09:36
Langage de programmation connu : Utilisés régulièrement :
- Visual DialogScript
- WinDev
- AutoIt
- AutoHotkey
- Html, Js, Vbs, PHP

Utilisés très peu :
- C et C++
- VB et VB.Net (pour les DLL)
- Java (Pour Android)
- ASM (pour désassembler)
- Python (quand je m'ennuie)
- et quelques autres....
Localisation : Les Damps (27)
Contact :

Message par GregLand »

si je connais ton IP et que je sais le port où tu as lancé Remote Execute
Oui, je sais.. ;avec des si, on pourrait en faire des choses... Image
Config :
Image
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

GregLand a écrit :
si je connais ton IP et que je sais le port où tu as lancé Remote Execute
Oui, je sais.. ;avec des si, on pourrait en faire des choses... Image
C'est pas une raison pour négliger la sécurité :)
Au moins tu pourrais le dire, (ah ben nan ça faut pas, sinon tu vas perdre des visiteurs :tongue: )
GregLand
Programmeur & Administrateur
Programmeur & Administrateur
Messages : 4431
Enregistré le : 10 oct. 2003 09:36
Langage de programmation connu : Utilisés régulièrement :
- Visual DialogScript
- WinDev
- AutoIt
- AutoHotkey
- Html, Js, Vbs, PHP

Utilisés très peu :
- C et C++
- VB et VB.Net (pour les DLL)
- Java (Pour Android)
- ASM (pour désassembler)
- Python (quand je m'ennuie)
- et quelques autres....
Localisation : Les Damps (27)
Contact :

Message par GregLand »

"ah ben nan ça faut pas, sinon je vais perdre des visiteurs"
Config :
Image
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

GregLand a écrit :"ah ben nan ça faut pas, sinon je vais perdre des visiteurs"
:rires:
Répondre