Ntlm get login windows with php

Soyez le premier à donner votre avis sur cette source.

Vue 84 262 fois - Téléchargée 2 287 fois

Description

Récuperation du login NTLM en php pour une identification de l'user automatique.

(verification du l'user uniquement pour petite application en PHP pour les intranet Windows ;) )

Pour plus d'information : http://www.secusquad.com/ntlm/

Source / Exemple :


<?php
/***********************************************************************

*
  • PHP NTLM GET LOGIN
  • Version 0.2.1
  • http://www.secusquad.com/ntlm/
  • Copyright (c) 2004 Nicolas GOLLET ( Nicolas (dot) gollet (at) secusquad (dot) com )
  • Copyright (c) 2004 Flextronics Saint-Etienne
*
  • This program is free software. You can redistribute it and/or modify
  • it under the terms of the GNU General Public License as published by
  • the Free Software Foundation; either version 2 of the License.
*
                                                                                                                                              • /
session_start(); $headers = apache_request_headers(); // Récupération des l'entêtes client if (@$_SERVER['HTTP_VIA'] != NULL){ // nous verifions si un proxy est utilisé : parceque l'identification par ntlm ne peut pas passer par un proxy echo "Proxy bypass!"; } elseif($headers['Authorization'] == NULL){ //si l'entete autorisation est inexistante header( "HTTP/1.0 401 Unauthorized" ); //envoi au client le mode d'identification header( "WWW-Authenticate: NTLM" ); //dans notre cas le NTLM exit; //on quitte } if(isset($headers['Authorization'])) //dans le cas d'une authorisation (identification) { if(substr($headers['Authorization'],0,5) == 'NTLM '){ // on vérifit que le client soit en NTLM $chaine=$headers['Authorization']; $chaine=substr($chaine, 5); // recuperation du base64-encoded type1 message $chained64=base64_decode($chaine); // decodage base64 dans $chained64 if(ord($chained64{8}) == 1){ // |_ byte signifiant l'etape du processus d'identification (etape 3) // verification du drapeau NTLM "0xb2" à l'offset 13 dans le message type-1-message (comp ie 5.5+) : if (ord($chained64[13]) != 178){ echo "NTLM Flag error!"; exit; } $retAuth = "NTLMSSP".chr(000).chr(002).chr(000).chr(000).chr(000).chr(000).chr(000).chr(000); $retAuth .= chr(000).chr(040).chr(000).chr(000).chr(000).chr(001).chr(130).chr(000).chr(000); $retAuth .= chr(000).chr(002).chr(002).chr(002).chr(000).chr(000).chr(000).chr(000).chr(000); $retAuth .= chr(000).chr(000).chr(000).chr(000).chr(000).chr(000).chr(000); $retAuth64 =base64_encode($retAuth); // encode en base64 $retAuth64 = trim($retAuth64); // enleve les espaces de debut et de fin header( "HTTP/1.0 401 Unauthorized" ); // envoi le nouveau header header( "WWW-Authenticate: NTLM $retAuth64" ); // avec l'identification supplémentaire exit; } else if(ord($chained64{8}) == 3){ // |_ byte signifiant l'etape du processus d'identification (etape 5) // on recupere le domaine $lenght_domain = (ord($chained64[31])*256 + ord($chained64[30])); // longueur du domain $offset_domain = (ord($chained64[33])*256 + ord($chained64[32])); // position du domain. $domain = str_replace("\0","",substr($chained64, $offset_domain, $lenght_domain)); // decoupage du du domain //le login $lenght_login = (ord($chained64[39])*256 + ord($chained64[38])); // longueur du login. $offset_login = (ord($chained64[41])*256 + ord($chained64[40])); // position du login. $login = str_replace("\0","",substr($chained64, $offset_login, $lenght_login)); // decoupage du login if ( $login != NULL){ // stockage des données dans des variable de session $_SESSION['Login']=$login; header("Location: newpage.php"); exit; } else{ echo "NT Login empty!"; } } } } ?>

Conclusion :


Merci de me faire parvenir tous vos commentaires...
Mise à jour ;)
Re mise a jour merci barth pour la modication des commetaires ;)
mise a jour afichage erreur :)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

haythem1986
Messages postés
1
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
26 septembre 2013
-
Salut je te remercie pour ce code il focntionne a merveille sur mon environnement localhost. Mais lorsque j' ai essaye de le mettre sur le serveur de l'entreprise il ne fonctionne pas je pense bien que c'est un pb par rapport a la version car le serveur tourne avec une version qui n'a pas etais mis a jours mais avec du php5. Alors est ce que ta une idee que faut il faire pour integrer ce code .

Merci
Haythem
cs_g41687
Messages postés
4
Date d'inscription
jeudi 2 décembre 2004
Statut
Membre
Dernière intervention
21 mars 2011
-
Bonjour,

Je rencontre le problème suivant (au bureau sur des PCs XP prof SP3):
Chaine64Decode s'arrête à la fin du nom de domaine et je reçois donc un 401:
NTLMSSPtŒ HTd€,ÎNOMDEDOMAINE
Comme je n'ai aucun accès à la registry au bureau, impossible de tester le bypass décrit dans le commentaire de Commentaire de zpef le 09/07/2009 00:01:53
Une autre idée ?
D'avance, merci ;o)
cs_morpheus57
Messages postés
122
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
30 décembre 2010
-
Bonjour à tous,

Petite précision dans le cas où vous utilisez le protocole https. Il faut commenter les lignes suivantes dans le fichier httpd-ssl.conf :
#BrowserMatch ".*MSIE.*" \
# nokeepalive ssl-unclean-shutdown \
# downgrade-1.0 force-response-1.0
sicilian021
Messages postés
2
Date d'inscription
samedi 28 juillet 2007
Statut
Membre
Dernière intervention
2 août 2007
-
Par toutatiss !
Moi je dit Monsieur ! Génial ce code ... absolument ce dont j'avais besoin ...
je recupère parfaitement le login NT, mais il y a un truc que je ne comprend pas, j'ai du modifier :
if (ord($chained64[13]) != 178){ par
if (ord($chained64[13]) != 130){
chez moi quand je faisais un echo $chained64[13] j'avais 130 donc j'ai modifié le test, et je récupère bien mon ID
pourquoi que chez moi c'est 130 ? et dans le code c'est 178 ?
jmeunier
Messages postés
86
Date d'inscription
mardi 10 septembre 2002
Statut
Membre
Dernière intervention
17 mai 2013
-
Salut ZPEF,

J'ai appliqué la méthode, et, effectivement je re-récupère le login
Merci pour l'info, cela faisait longtemps que je tournais en rond ...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.