web-dev-qa-db-fra.com

Devinière PHP Version et informations de phpinfo à l'aide de Black Box Analysis

INTRO

J'essaie actuellement de l'analyse de la boîte noire PHP et n'a pas pu trouver d'informations utiles. Il existe certaines approches pour déterminer par ex. Version Apache, mais pour PHP, il semble que Internet ne sait que des "œufs PHP Pâques". Sur - php.net J'ai trouvé beaucoup d'informations sur les erreurs PHP, les fonctions obsolètes et les journaux de changement, mais n'a pas été capable de trouver quoi que ce soit de quelque chose de similaire ce que je cherche ici pour (une sorte de liste complète ou outil ou papier ou au moins des idées). Donc avant de réinventer le vélo, je vais essayer ma chance ici.

Nous devons accepter certaines limitations que j'ai énumérées ci-dessous. Pour l'instant, j'accepte également des tests basés sur les erreurs (puisqu'il est difficile de faire des suppositions sans que les messages d'erreur PHP sont activés), mais pas sur chaque serveur sont activés PHP Messages d'erreur activés.

Nous n'avons pas:

  • phpinfo()
  • Les œufs de Pâques PHP (depuis PHP> = 5.5.0 Les règles de réécriture de la réécriture PHP <5.5.0 peuvent être utilisées ou expose_php=off (X-Powered-By désactivé))
  • aucun dossier, fichiers de cadres connus
  • aucun cookies spécifiques, en-têtes ou autres paramètres spécifiques
  • tout accès au code source (exception uniquement: générateurs de captcha public ou certains PayPal/Xsolla/Peu importe ... ou d'autres scripts tiers)
  • la liste des répertoires est éteinte
  • s'il y a des bugs PHP, le chemin exposé ne nous dit pas sur la version ou les cadres de PHP, etc.
  • soi-disant "google piratage" ne nous aide pas à agriculter aucune information supplémentaire dans cet exemple donné

Le serveur est sécurisé - Hey Man, il appartient à Chuck Norris - donc pas de solutions qui s'appuient sur l'exploitation des vulnérabilités, que ce soit le 0 jours, des injections SQL, une exécution du code à distance ou autre chose.

Nous avons:

  • la connaissance que PHP est en cours d'exécution sur le serveur donné
  • PHP bugs (display_errors=on) - Types d'entrée incorrects tels que: foo.php?id[]=1 _ foo.php?id=1, scripts de buggy, Host/foo.php/foo.php est autorisé à causer dans un bord obscur Cases PHP erreurs (par exemple, téléchargement de fichier), etc.
  • L'extension .php peut être facultative, alors foo.php?id=bar ou juste /foo/bar/ _

Ce que j'ai pu trouver jusqu'à présent

Devinez la version PHP:

- several built-in PHP functions found by analysing PHP error messages
    → PHP change logs → check if any of exposed functions is deprecated in some PHP versions
- PHP<5.3.X allows strings to contain null bytes \0
    → problems with include(), copy(), ... (but we don't have such vulnerabilities on that server, e.g. only Alphanumeric input and chars: {.,-_} are allowed, special chars will be replaced with '')
- IF PHP<5.3.0: strlen(Array) = 5
- IF PHP>=7.0.0: casting NaN or infinity to integer = always 0, not more undefined and platform-dependent
- .php3: PHP=3.x.x, .php4: PHP=4.x.x. (trivial)

Devinez des infos de phpinfo (sans y avoir accès):

- foo.php?id=99...99 (large number) → IF response contains:
    → "2 147 483 647" → 32bit system (extra whitespaces for better readability)
    → "9 223 372 036 854 775 807" → 64bit system
- max_post_size VS upload_max_filesize
- number of allowed input parameters:
    → p1[]=1&p2[]=1&... (use fake parameters in some parameter checking loop which doesn't expect wrong input type)
    → e.g. error based detection
- float precision: 2.9999999999999999=3 (16 digits) VS 2.999999999999999=2 (15 digits)
- determine "Timeouts", error based

Question

Y a-t-il autre chose ce qui peut être utilisé de manière plus ou moins générale pour déterminer la version de serveur PHP et deviner plus d'informations que nous voyons habituellement dans phpinfo () (→ php.ini et d'autres fichiers .ini).

J'ai entendu dire qu'il était également possible de mesurer les temps de réponse du serveur et de les corréler avec des fonctions PHP utilisées ou des versions PHP, mais je ne vois aucun bon exemple pour cela - PHP scripts Peut-être très complexe, alors je ne sais pas comment fonctionner de cette méthode.

Remarque latérale

Soit une surkill totale et collecter tous les exploits possibles connus PHP, les implémenter et juste bruteforce le serveur, en incrémentant l'exploit PHP version (si exploit pour php = 5.xx ne fonctionne pas, testez un autre exploit Pour une version ultérieure de PHP) (je parle ici de possibilités théoriques pure et dans le contexte de la recherche académique). Outre tous les problèmes éthiques et juridiques (que nous gardons à l'esprit ici), il y a 2 possibilités:

a) Certains des exploits fonctionneront (serveur sera autohacked ou dos-éd par cet outil d'exploitation théorique, quoi que ce soit) et nous serons en mesure de déterminer la version droite PHP (mission accomplie).

b) Tous les exploits échoueront, ce qui nous indique que le serveur a la nouvelle version PHP ou des exploits ne peut être appliqué que pour certains cas spéciaux qui Nous n'avons tout simplement pas ici.

12
Awaaaaarghhh

Il est facile de concevoir de la manière dont on construirait une taxonomie d'identification des caractéristiques d'identification des versions distinctes PHP versions et d'exécution d'un laboratoire, exécutez différents types de frameworks et d'applications sur différentes versions de PHP, etc. et Regardez les temps de réponse, le trafic, etc. Ce processus est courant et on peut généralement automatiser de manière substantielle la découverte des différences. PHP est suffisamment organique qu'il existe probablement de nombreuses vérifications d'identification spécifiques à la version.

Cela dit, comme le dit lui-même, PHP n'est pas une entité autonome. En tant que composant d'un système en analyse, il n'est nécessairement qu'une petite pièce - un runtime qui vit sur plusieurs OSES distincts, héberge de nombreux programmes variés et distincts, se connecte à une variété infinie d'autres systèmes, etc.

Toute caractéristique identifiée spécifique dans PHP Runtime peut être confondue de nombreuses manières par des variations dans les autres parties nécessaires du système que PHP pas sans passer. Le chemin qu'une version particulière de PHP fournit des octets sur le fil peut être confondue par le fait qu'il fonctionne sous Windows plutôt que Linux (et des versions spécifiques qui y sont elles-mêmes ont leurs propres empreintes digitales).

Je prendrais donc la prudence contre cette activité "PHP Black Box Analysis", absent d'autres contextes spécifiquement sur les différences de confusion. Toute conclusion est susceptible d'être souillée.

Liée, Analyse de la boîte de service Web est bien sûr une chose, et une constatation précieuse de ce processus pourrait être ... Oh, ce service semble être écrit dans PHP, peut-être la version A ou peut-être la version B, en utilisant Framework w, sur OS Blah, pour la raison X, Y et Z. La classification globale est très précieuse.

Les tentatives d'identification spécifiques aux composants, absentes de la classification des autres pièces nécessaires, sont, dans mon expérience, souvent égarées.

2
Jonah Benton