Subject: NTLM HTTP Authentication
Author: authen
Posted on: 06/08/2006 01:14:44 AM
Here is a practical NTLM authentication example via HTTP
Client: MS Internet Explorer 6.0
Server: MS IIS v6
1. Client --> Server
2. Client <-- Server
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="mydomain.com"
3. Client --> Server
GET / HTTP/1.1
Authorization: Negotiate TlRMTVNTUAABAAAAB4IAoAAAAAAAAAAAAAAAAAAAAAA=
TYPE 1 NTLM Message:
0x4e 0x54 0x4c 0x4d 0x53 0x53 0x50 0x00 --- NTLMSSP
0x01 0x00 0x00 0x00 --- Type 1
0x07 0x82 0x00 0xa0 --- Flags
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 --- workstation domain
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 --- workstation name
0x00 --- data block
Flags: 0xa0008207
1... .... .... .... .... .... .... .... = Negotiate 56: Set
.0.. .... .... .... .... .... .... .... = Negotiate Key Exchange: Not set
..1. .... .... .... .... .... .... .... = Negotiate 128: Set
...0 .... .... .... .... .... .... .... = Negotiate 0x10000000: Not set
.... 0... .... .... .... .... .... .... = Negotiate 0x08000000: Not set
.... .0.. .... .... .... .... .... .... = Negotiate 0x04000000: Not set
.... ..0. .... .... .... .... .... .... = Negotiate 0x02000000: Not set
.... ...0 .... .... .... .... .... .... = Negotiate 0x01000000: Not set
.... .... 0... .... .... .... .... .... = Negotiate Target Info: Not set
.... .... .0.. .... .... .... .... .... = Negotiate 0x00400000: Not set
.... .... ..0. .... .... .... .... .... = Negotiate 0x00200000: Not set
.... .... ...0 .... .... .... .... .... = Negotiate 0x00100000: Not set
.... .... .... 0... .... .... .... .... = Negotiate NTLM2 key: Not set
.... .... .... .0.. .... .... .... .... = Negotiate Challenge Non NT Session Key: Not set
.... .... .... ..0. .... .... .... .... = Negotiate Challenge Accept Response: Not set
.... .... .... ...0 .... .... .... .... = Negotiate Challenge Init Response: Not set
.... .... .... .... 1... .... .... .... = Negotiate Always Sign: Set
.... .... .... .... .0.. .... .... .... = Negotiate This is Local Call: Not set
.... .... .... .... ..0. .... .... .... = Negotiate Workstation Supplied: Not set
.... .... .... .... ...0 .... .... .... = Negotiate Domain Supplied: Not set
.... .... .... .... .... 0... .... .... = Negotiate 0x00000800: Not set
.... .... .... .... .... .0.. .... .... = Negotiate 0x00000400: Not set
.... .... .... .... .... ..1. .... .... = Negotiate NTLM key: Set
.... .... .... .... .... ...0 .... .... = Negotiate Netware: Not set
.... .... .... .... .... .... 0... .... = Negotiate Lan Manager Key: Not set
.... .... .... .... .... .... .0.. .... = Negotiate Datagram Style: Not set
.... .... .... .... .... .... ..0. .... = Negotiate Seal: Not set
.... .... .... .... .... .... ...0 .... = Negotiate Sign: Not set
.... .... .... .... .... .... .... 0... = Request 0x00000008: Not set
.... .... .... .... .... .... .... .1.. = Request Target: Set
.... .... .... .... .... .... .... ..1. = Negotiate OEM: Set
.... .... .... .... .... .... .... ...1 = Negotiate UNICODE: Set
4. Client <-- Server
HTTP/1.1 401 Unauthorized
Content-Length: 1539
Content-Type: text/html
WWW-Authenticate: Negotiate TlRMTVNTUAACAAAABAAE...
TYPE 2 NTLM Message:
0x4e 0x54 0x4c 0x4d 0x53 0x53 0x50 0x00 --- NTLMSSP
0x02 0x00 0x00 0x00 --- Type 2
0x04 0x00 0x04 0x00 0x38 0x00 0x00 0x00 --- Target Name
-- Length: 4
-- Maxlen: 4
-- Offset: 56
0x05 0x82 0x81 0xa2 --- Flags
0xd9 0x3f 0xf5 0x0e 0x0d 0x82 0x93 0x1a --- NTLM Challenge
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 --- Context (Reserved)
0xcc 0x00 0xcc 0x00 0x3c 0x00 0x00 0x00 --- Target Information
-- Length: 204
-- Maxlen: 204
-- Offset: 60
0x05 0x02 0xce 0x0e 0x00 0x00 0x00 0x0f --- start of data block
(Target Domain NetBIOS Name)
(Target Information Address List:
Domain NetBIOS Name: SALES
Server NetBIOS Name: MY_IIS_SEREVR
Domain DNS Name: sales.mycompany.com
Server DNS Name: my_iis_server.sales.mycompany.com
0x00 0x00 0x00 0x00 --- List Terminator
)
Flags: 0xa2818205
1... .... .... .... .... .... .... .... = Negotiate 56: Set
.0.. .... .... .... .... .... .... .... = Negotiate Key Exchange: Not set
..1. .... .... .... .... .... .... .... = Negotiate 128: Set
...0 .... .... .... .... .... .... .... = Negotiate 0x10000000: Not set
.... 0... .... .... .... .... .... .... = Negotiate 0x08000000: Not set
.... .0.. .... .... .... .... .... .... = Negotiate 0x04000000: Not set
.... ..1. .... .... .... .... .... .... = Negotiate 0x02000000: Set
.... ...0 .... .... .... .... .... .... = Negotiate 0x01000000: Not set
.... .... 1... .... .... .... .... .... = Negotiate Target Info: Set
.... .... .0.. .... .... .... .... .... = Negotiate 0x00400000: Not set
.... .... ..0. .... .... .... .... .... = Negotiate 0x00200000: Not set
.... .... ...0 .... .... .... .... .... = Negotiate 0x00100000: Not set
.... .... .... 0... .... .... .... .... = Negotiate NTLM2 key: Not set
.... .... .... .0.. .... .... .... .... = Negotiate Challenge Non NT Session Key: Not set
.... .... .... ..0. .... .... .... .... = Negotiate Challenge Accept Response: Not set
.... .... .... ...1 .... .... .... .... = Negotiate Challenge Init Response: Set
.... .... .... .... 1... .... .... .... = Negotiate Always Sign: Set
.... .... .... .... .0.. .... .... .... = Negotiate This is Local Call: Not set
.... .... .... .... ..0. .... .... .... = Negotiate Workstation Supplied: Not set
.... .... .... .... ...0 .... .... .... = Negotiate Domain Supplied: Not set
.... .... .... .... .... 0... .... .... = Negotiate 0x00000800: Not set
.... .... .... .... .... .0.. .... .... = Negotiate 0x00000400: Not set
.... .... .... .... .... ..1. .... .... = Negotiate NTLM key: Set
.... .... .... .... .... ...0 .... .... = Negotiate Netware: Not set
.... .... .... .... .... .... 0... .... = Negotiate Lan Manager Key: Not set
.... .... .... .... .... .... .0.. .... = Negotiate Datagram Style: Not set
.... .... .... .... .... .... ..0. .... = Negotiate Seal: Not set
.... .... .... .... .... .... ...0 .... = Negotiate Sign: Not set
.... .... .... .... .... .... .... 0... = Request 0x00000008: Not set
.... .... .... .... .... .... .... .1.. = Request Target: Set
.... .... .... .... .... .... .... ..0. = Negotiate OEM: Not set
.... .... .... .... .... .... .... ...1 = Negotiate UNICODE: Set
5. Client --> Server
GET / HTTP/1.1
Authorization: Negotiate TlRMTVNTUAADAAAAGAAYA...
TYPE 3 NTLM Message:
0x4e 0x54 0x4c 0x4d 0x53 0x53 0x50 0x00 --- NTLMSSP
0x03 0x00 0x00 0x00 --- Type 3
0x18 0x00 0x18 0x00 0x84 0x00 0x00 0x00 --- LM Response
-- Length: 24
-- Maxlen: 24
-- Offset: 132
0x18 0x00 0x18 0x00 0x9c 0x00 0x00 0x00 --- NTLM Response
-- Length: 24
-- Maxlen: 24
-- Offset: 156
0x2e 0x00 0x2e 0x00 0x40 0x00 0x00 0x00 --- Domain Name
-- Length: 46
-- Maxlen: 46
-- Offset: 64
0x0a 0x00 0x0a 0x00 0x6e 0x00 0x00 0x00 --- User Name
-- Length: 10
-- Maxlen: 10
-- Offset: 110
0x0c 0x00 0x0c 0x00 0x78 0x00 0x00 0x00 --- Workstation/Host Name
-- Length: 12
-- Maxlen: 12
-- Offset: 120
0x00 0x00 0x00 0x00 0xb4 0x00 0x00 0x00 --- Session Key
-- Length: 0
-- Maxlen: 0
-- Offset: 180
0x05 0x82 0x80 0xa0 --- Flags
( --- start of data block
Domain Name: develop.mycompany.com
User Name: james
Host Name: HOST01
LM Response: 0x6F3033F7D69A37F62FC5C91A0D2DAC34366E8D213A6E705D
NTLM Response: 0x2AA9839F594E32381BBEA990920E441FBA30946EF3B7DFDE
)
6. Client <-- Serveror, if failed,
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="mydomain.com"
Replies:
References: