Portál AbcLinuxu, 1. května 2025 12:50

PHP: NTLM authentication on remote host

11.4.2009 01:40 | Přečteno: 1863× | PHP a Web | poslední úprava: 11.4.2009 09:31

Code for remote NTLM authentication in PHP using fsockopen.
Skript pro vzdálenou NTLM autentizaci v PHP s použitím fsockopen.
Edit: Česká verze dole

For one of my projects, I needed to authenticate script against service on remote IIS server - and unfortunately, only NTLM authentication was supported. So I spent pretty long time trying to make it work - and when I finally succeeded, I decided to share working program with the world :-).

Few notes

There are several things you need to know to use this:
Firstly, the connection you open is persistent (even when you don't use pfsockopen), because you don't use Connection: Close but Connection: keep-alive. This means that you must not read even single byte from the stream if it hasn't been already sent; if you do so, you will wait for a minute until connection timeouts.
Secondly, after you successfully authenticate youself, you can send as many requests as you want in the connection that is already opened, without further authentication.

Requirements:

You need mcrypt and mhash PHP extension installed on the server. The class also uses this script which should be extracted in the same folder (and is already extracted with the script).

You can download the archive with script here.

Česká verze:

Pro jeden ze svých projektů jsem potřeboval skript, který by se autorizoval na vzdáleném IIS serveru - a bohužel byla podporována pouze NTLM autentizace. Takže jsem strávil nemálo času tím to rozchodit - a když se mi to nakonec povedlo, tak jsem se rozhodl se o to podělit s ostatními :)

Pár poznámek:

Je několik věcí, které je dobré vědět při používání:
První - spojení, co se otevře, je perzistentní (přestože se nepoužívá pfsockopen), protože se neposílá Connection: Close, ale Connection: keep-alive. To znamená, že se nesmí z toho socketu číst více bytů, než tam server již poslal - nebo si počkáte minutu, než spojení timeoutuje.
Druhá - potom, co se úspěšně autentizujete, tak se může v tom otevřeném spojení poslat tolik requestů, kolik je jen libo - a to bez jakékoliv další autentizace.

Požadavky:

Je potřeba mít mcrypt a mhash rozšíření PHP. Dále používám tento skript, který je potřeba rozbalit do stejné složky (a který je již přibalen ve skriptu).

Skript je ke stažení tady.        

Hodnocení: 100 %

        špatnédobré        

Anketa

Was this script helpful for you in any way?
 (19 %)
 (81 %)
Celkem 16 hlasů

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Kamil Páral avatar 11.4.2009 02:05 Kamil Páral | skóre: 13 | blog: Kamil Páral | Brno
Rozbalit Rozbalit vše Re: PHP: NTLM authentification on remote host
Odpovědět | Sbalit | Link | Blokovat | Admin

s/authentification/authentication/

gogloid avatar 11.4.2009 08:35 gogloid | skóre: 10 | blog: Tomášovy poznatky | Kladno/Brno
Rozbalit Rozbalit vše Re: PHP: NTLM authentification on remote host
Díky, opraveno. V noci mi to tolik nemyslí :)
11.4.2009 08:06 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
Rozbalit Rozbalit vše Re: PHP: NTLM authentification on remote host
Odpovědět | Sbalit | Link | Blokovat | Admin
A proč je to zase v EN? :O
11.4.2009 08:32 ____ | skóre: 15 | blog: _
Rozbalit Rozbalit vše Re: PHP: NTLM authentification on remote host
Proč? Proč ne?
11.4.2009 09:15 snajpa | skóre: 20 | blog: snajpuv_blocek | Brno
Rozbalit Rozbalit vše Re: PHP: NTLM authentification on remote host
Aby byly obě strany spokojené, proč na konec nepřipojit českou verzi? Tak by bylo vyhověno snad všem :-)
--- vpsFree.cz --- Virtuální servery svobodně
gogloid avatar 11.4.2009 09:32 gogloid | skóre: 10 | blog: Tomášovy poznatky | Kladno/Brno
Rozbalit Rozbalit vše Re: PHP: NTLM authentification on remote host
Snad je to nyní ke všeobecné spokojenosti :)
11.4.2009 22:16 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: PHP: NTLM authentication on remote host
Odpovědět | Sbalit | Link | Blokovat | Admin
NTLM… Má to něco společného s tímhle?
lion:~/source/john-1.7.2/run> ./john -test
Benchmarking: Traditional DES [128/128 BS SSE2-16]... DONE
Many salts:     1729K c/s real, 1740K c/s virtual
Only one salt:  1501K c/s real, 1501K c/s virtual

Benchmarking: BSDI DES (x725) [128/128 BS SSE2-16]... DONE
Many salts:     57919 c/s real, 58151 c/s virtual
Only one salt:  56641 c/s real, 56755 c/s virtual

Benchmarking: FreeBSD MD5 [32/64 X2]... DONE
Raw:    10838 c/s real, 10838 c/s virtual

Benchmarking: OpenBSD Blowfish (x32) [32/64]... DONE
Raw:    394 c/s real, 394 c/s virtual

Benchmarking: Kerberos AFS DES [48/64 4K]... DONE
Short:  361113 c/s real, 361113 c/s virtual
Long:   1088K c/s real, 1090K c/s virtual

Benchmarking: NT LM DES [128/128 BS SSE2-16]... DONE
Raw:    10013K c/s real, 10033K c/s virtual
gogloid avatar 11.4.2009 22:54 gogloid | skóre: 10 | blog: Tomášovy poznatky | Kladno/Brno
Rozbalit Rozbalit vše Re: PHP: NTLM authentication on remote host
No NTLM je typ autentizace vyvinutý Microsoftem a používá se u Samby a podobných služeb. Jinak určitě není bezpečný - heslo se posílá nějak šifrovaně, ale co vím, tak se to dá odchytit. Takže asi to něco společného má :-) (jinak možná zkusit toto, mimo jiné z toho jsem čerpal při implementaci)
15.4.2009 17:57 luky
Rozbalit Rozbalit vše Re: PHP: NTLM authentication on remote host
Odpovědět | Sbalit | Link | Blokovat | Admin
První - co? Druhá - co?

Programátor začátečník? Nic ve zlém.
26.10.2009 13:50 martin
Rozbalit Rozbalit vše Re: PHP: NTLM authentication on remote host
Odpovědět | Sbalit | Link | Blokovat | Admin
Super, strasne mi to pomohlo. Curl_request mi to nebral...

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.