Advertisement
Guest User

Adam C Taylor

a guest
May 18th, 2009
339
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.07 KB | None | 0 0
  1. <?php
  2. session_start();
  3. $ntlmserver = "smtpserver.local";
  4.  
  5. function left($string, $count){
  6.         return substr($string, 0, $count);
  7. }
  8.  
  9. $headers = apache_request_headers();
  10.  
  11. if (!isset($headers['Authorization'])){
  12.     header('HTTP/1.1 401 Unauthorized');
  13.     header('WWW-Authenticate: NTLM');
  14.     exit;
  15. }
  16.  
  17. $auth = $headers['Authorization'];
  18.  
  19.  
  20. if (substr($auth,0,5) == 'NTLM ') {
  21.     $msg = base64_decode(substr($auth, 5));
  22.     if (substr($msg, 0, 8) != "NTLMSSP\x00")
  23.         die('error header not recognised');
  24.  
  25.     if ($msg[8] == "\x01") {
  26.                 $holder = apache_request_headers();
  27.                 $_SESSION['TYPE1MSG'] = $holder['Authorization'];
  28.  
  29.  
  30.     if(!$_SESSION['AUTH']){
  31.             $smtp_server = pfsockopen($ntlmserver, 25, $errno, $errstr, 30);
  32.             if(!$smtp_server)
  33.                     {
  34.                             exit;
  35.                     }
  36.             fwrite($smtp_server, "EHLO\r\n");
  37.  
  38.             $stop=0;
  39.  
  40.             while (!$stop)
  41.                 {
  42.                     $data = fgets($smtp_server, 512);
  43.  
  44.                     if(left($data,6)=="250 OK")
  45.                         {
  46.                         fwrite($smtp_server, "AUTH $_SESSION[TYPE1MSG]\r\n");
  47.                         }
  48.                     else if(left($data,3)=="334")
  49.                         {
  50.                         $_SESSION['TYPE2MSG']=substr($data,4);
  51.                         $stop=1;
  52.                         }
  53.  
  54.                 }
  55.  
  56.             $_SESSION['AUTH']=1;
  57.         }
  58.  
  59.         $msg2 = $_SESSION['TYPE2MSG'];
  60.         header('HTTP/1.1 401 Unauthorized');
  61.         header('WWW-Authenticate: NTLM '.trim($msg2));
  62.         exit;
  63.     }
  64.     else if ($msg[8] == "\x03") {
  65.         $holder = apache_request_headers();
  66.                 $_SESSION['TYPE3MSG'] = substr($holder['Authorization'],5);
  67.  
  68.             if(!$_SESSION['AUTH2']){
  69.                     $smtp_server = pfsockopen($ntlmserver, 25, $errno, $errstr, 30);
  70.                     if(!$smtp_server)
  71.                             {
  72.                                     exit;
  73.                             }
  74.  
  75.                     $stop=0;
  76.  
  77.                     fwrite($smtp_server, "$_SESSION[TYPE3MSG]\r\n");
  78.  
  79.                     while (!$stop)
  80.                         {
  81.                             $data = fgets($smtp_server, 512);
  82.                             //print_r($data);
  83.  
  84.                             if(left($data,3)=="235")
  85.                                 {
  86.                                 $_SESSION['AUTH']="235";
  87.                                 $stop=1;
  88.                                 }
  89.                             else if(left($data,3)=="535")
  90.                                 {
  91.                                 $_SESSION['AUTH']="535";
  92.                                 $stop=1;
  93.                                 exit;
  94.                                 }
  95.  
  96.                         }
  97.  
  98.                     fwrite($smtp_server, "QUIT\r\n");
  99.                     fclose($smtp_server);
  100.                     $_SESSION['AUTH2']=1;
  101.         }
  102.  
  103.         function get_msg_str($msg, $start, $unicode = true) {
  104.             $len = (ord($msg[$start+1]) * 256) + ord($msg[$start]);
  105.             $off = (ord($msg[$start+5]) * 256) + ord($msg[$start+4]);
  106.             if ($unicode)
  107.                 return str_replace("\0", '', substr($msg, $off, $len));
  108.             else
  109.                 return substr($msg, $off, $len);
  110.         }
  111.         $_SESSION['USER'] = get_msg_str($msg, 36);
  112.         $_SESSION['DOMAIN'] = get_msg_str($msg, 28);
  113.         $_SESSION['WORKSTATION'] = get_msg_str($msg, 44);
  114.  
  115.         //print_r($auth);
  116.     }
  117.  
  118.  
  119. }
  120.  
  121. print_r($_SESSION);
  122. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement