Table of Contents
Résumé
Souvent, au cours d'un test de pénétration sur les applications web, nous nous heurtons à de nombreux codes d'erreur générés par des applications ou des serveurs Web. Il est possible de provoquer ces erreurs en utilisant une des demandes particulières, que ce soit avec des outils spécialement conçus ou créés manuellement. Ces codes sont très utiles lors des tests de pénétration, car ils révèlent une foule d'informations sur les bases de données, des bugs, et autres composants technologiques en lien direct avec les applications Web. Dans cette section, nous allons analyser les codes les plus courants (messages d'erreur) et mettre en lumière les étapes de l'évaluation des vulnérabilités. L'aspect le plus important pour cette activité est de concentrer son attention sur ces erreurs, de les considérer comme un ensemble d'informations qui aideront les prochaines étapes de notre analyse. Une bonne collection peut faciliter l'évaluation et l'efficacité en réduisant le temps total nécessaire pour effectuer le test de pénétration.
Description
Une erreur commune que nous pouvons voir au cours de notre recherche est le code HTTP 404 Not Found. Souvent, ce code d'erreur fournit des informations utiles sur le serveur Web sous-jacent et les composants associés. Par exemple:
Not Found The requested URL /page.html was not found on this server. Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.7g DAV/2 PHP/5.1.2 Server at localhost Port 80
Ce message d'erreur peut être générée en demandant une URL inexistante. Après le message commun qui montre une page non trouvée, il ya des informations sur la version du serveur web, le système d'exploitation, les modules et autres produits utilisés.
Erreurs des bases de données
Les erreurs du serveur Web ne sont pas les seules sorties utiles exigeant une analyse de sécurité. Prenons l'exemple de message d'erreur suivant:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [DBNETLIB][ConnectionOpen(Connect())] - SQL server does not exist or access denied
Qu'est-il arrivé? Nous allons vous expliquer étape par étape ci-dessous.
Dans cet exemple, le code 80004005 est un code d'erreur générique IIS qui indique qu'il n'a pas pu établir une connexion à la base de données associée. Dans de nombreux cas, le message d'erreur retourne le type de la base de données. Cela indique souvent le système d'exploitation sous-jacent par association. Avec cette information, le testeur de pénétration peut planifier une stratégie appropriée pour le test de sécurité.
En manipulant les variables qui sont passées à la chaîne de connexion de base de données, nous pouvons provoquer des erreurs plus détaillées.
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Access 97 ODBC driver Driver]General error Unable to open registry key 'DriverId'
Dans cet exemple, nous pouvons voir une erreur générique dans la même situation qui révèle le type et la version du système de base de données associé et une dépendance à l'égard des valeurs clés du système de registre Windows.
Maintenant, nous allons voir un exemple pratique d'un test de sécurité contre une application web qui perd sa liaison à son serveur de base de données et ne gère pas l'exception d'une manière contrôlée. Cela pourrait être causé par un problème de résolution du nom de base de données, le traitement des valeurs des variables inattendus ou des problèmes de réseau.
Envisagez le scénario où nous avons une base de données d'administration d'un portail Web, qui peut être utilisé tel un GUI frontal pour émettre des requêtes de bases de données, créer des tables, et modifier les champs de données. Dans le POST des informations d'identification, le message d'erreur suivant est présenté au testeur.(le message indique la présence d'un serveur de base de données MySQL):
Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [MySQL][ODBC 3.51 Driver]Unknown MySQL server host
Si nous voyons dans le code HTML de la page de connexion la présence d'un champ caché avec une adresse IP de base de données, nous pouvons essayer de changer cette valeur dans l'URL avec l'adresse du serveur de base de données sous le contrôle du testeur dans une tentative pour tromper l'application en pensant que la connexion a réussi.
Un autre exemple: pour connaître le serveur de base de services d'une application web, nous pouvons tirer parti de ces informations pour effectuer une injection SQL pour ce genre de base de données ou un test XSS persistant.
Gestion des erreurs dans IIS et ASP. Net
ASP. Net est un cadre commun de Microsoft pour développer des applications Web. IIS est l'un des serveurs web couramment utilisé. Des erreurs se produisent dans toutes les applications, on cherche à piéger la plupart des erreurs, mais il est presque impossible de couvrir chaque exception.
IIS utilise un ensemble de pages d'erreur personnalisées qui se trouvent généralement dans c:\winnt\help\iishelp\commonn pour afficher les pages d'erreurs comme « 404 page non trouvée ». Ces pages par défaut peuvent être modifiées et les erreurs personnalisées peuvent être configurées pour le serveur IIS. Lorsque IIS reçoit une demande d'une page aspx, la demande est transmise à la dot net framework.
Il y a différentes manières par lesquelles les erreurs peuvent être traitées en dot net framework. Les erreurs sont gérées à trois endroits dans ASP net.:
- A l'ntérieur de la section customErrors Web.config
- A l'intérieur de global.asax sous ApplicationError - Dans la page aspx associée (codebehind) sous PageError
Gestion des erreurs en utilisant le fichier web.config
<customErrors defaultRedirect="myerrorpagedefault.aspx" mode="On|Off|RemoteOnly"> <error statusCode="404" redirect="myerrorpagefor404.aspx"/> <error statusCode="500" redirect="myerrorpagefor500.aspx"/> </customErrors>
- mode = “On” retournera des erreurs personnalisées.
- mode = RemoteOnly affichera les erreurs personnalisées aux utilisateurs distants d'applications Web. Une erreur provoquée par un utilisateur qui accède au serveur local sera présenté avec la trace complète de la pile et les erreurs personnalisées ne lui seront pas affichées.
Toutes les erreurs, sauf celles explicitement spécifiées, provoquent une redirection vers la ressource spécifiée dans defaultRedirect, c.-à-d myerrorpagedefault.aspx. Un code d'état 404 sera assurée par myerrorpagefor404.aspx.
Gestion des erreurs dans Global.asax
Lorsqu'une erreur se produit, Application_Error est appelée. Un développeur peut écrire du code pour erreur de manipulation / page de redirection dans ce sous.
Private Sub Page_Error (ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Error
End Sub
Gestion des erreurs dans Page_Error
Ceci est similaire à la gestion des erreurs d'application.
Private Sub Application_Error (ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Error
End Sub
Hiérarchie des erreurs ASP. Net
Les PageError seront traitées en premier, suivi par ApplicationError sous global.asax , et, enfin, les erreurs dans la section customErrors dans le fichier web.config.
La collecte de l'information sur des applications web avec technologie côté serveur est assez difficile, mais l'information découverte peut être utile pour la bonne exécution d'une tentative d'exploit (par exemple, injection SQL ou Cross Site Scripting (XSS) ) et peut réduire les faux positifs.
Comment tester la gestion des erreurs pour ASP.net et IIS
Lancez votre navigateur et saisissez un nom de page au hasard
http:\\www.mywebserver.com\anyrandomname.aspx
Si le serveur renvoie
The page cannot be found HTTP 404 - File not found Internet Information Services
cela signifie que les erreurs personnalisées IIS ne sont pas configurées (noter l'extension. Asp).
Tester également les erreurs .NET personnalisées. Tapez un nom de page aléatoire avec une extension aspx dans votre navigateur
http:\\www.mywebserver.com\anyrandomname.aspx Si le serveur renvoie
<code>Server Error in '/' Application.
The resource cannot be found. Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly. </code> les erreurs personnalisées pour. net ne sont pas configurées.
Test boîte noire :
Test:
telnet <host target> 80 GET /<wrong page> HTTP/1.1 <CRLF><CRLF>
Resultat:
HTTP/1.1 404 Not Found Date: Sat, 04 Nov 2006 15:26:48 GMT Server: Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.7g Content-Length: 310 Connection: close Content-Type: text/html; charset=iso-8859-1
Test:
- Problemes réseau
- Mauvaise configuration de l'adresse du serveur de base de données
Resultat:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005) ' [MySQL][ODBC 3.51 Driver]Unknown MySQL server host
Test:
- Echec d'authentication
- Credits (nom d'utilisateur, mot de passe) non fournis
Resulat:
Version Pare-feu utilisé pour l'authentification:
Error 407 FW-1 at <firewall>: Unauthorized to access the document. • Authorization is needed for FW-1. • The authentication required by FW-1 is: unknown. • Reason for failure of last attempt: no user
Test boîte grise:
Test :
Énumération des répertoires avec accès refusé:
http://<host>/<dir>
Résultat:
Directory Listing Denied This Virtual Directory does not allow contents to be listed. Forbidden You don't have permission to access /<dir> on this server.
Références
[RFC2616] Hypertext Transfer Protocol - HTTP/1.1
