现在的位置: 首页 > 综合 > 正文

实现PROXY穿越(1):流程和NTLM算法

2012年06月27日 ⁄ 综合 ⁄ 共 2702字 ⁄ 字号 评论关闭

  最近忙,事比较多,活多了,还要降薪,唉。没什么时间看书,将以前的一些技术blog也移到这里。NTLM在去年年底和今年年初研究过一阵子,写了总结和例子程序。里面涉及很多算法,在网上查了很久。下面是以前的博客


  最近想实现一个通过PROXY穿越的网络编程,将相关的内容进行一下汇总。很多东西来自网络共产主义,也应该为共产主义有所回馈。

 

HTTP
PROXY

穿越的流程

 

   
从第一个HTTP请求到200 Connected
established,一共有6个步骤『PROXY需要校验,如果Proxy不需要验证,非常简单,直接供步骤一跳到步骤六,不再做描述』。下面以HTTP的CONNECT方法为例子,GET和POST的实现是类似的。

步骤一:

  C --》 P :
HTTP/1.1 CONNECT …… Connect:keep-Alive

步骤二:

  C 《--  P :HTTP 407 Connect: close

  在这里,PROXY给出三个Proxy-Auchenticate参数。Negotiate,
Kerberos、NTLM的算法要求,其中NTLM根据后面交互的flags,有v1和v2两种算法。

  Negotiate是一个ssp,它会根据用户的环境选择其它合适的具体SSP(更像是一个重定向器,协商):NTLM或者kerberos。
NTLM
是一个比较老的SSP,但支持广泛,Kerberos是新的比较好的SSP,但不支持NT4.0以及之前版本。用户一般不直接调用NTLM或者
Kerberos,而是调用Negotiate。Negotiate的策略是,如果用户系统不支持Kerberos,或者没有提供支持Kerberos的
信息,则Negotiate会默认返回NTLM给客户端。

  根据Connect的字段,客户端需要Close TCP连接,重新建立一条新的连接,发送步骤三的数据包。

步骤三:

  C --》 P : HTTP/1.1 CONNECT NTLMSSP …… Connect:keep-Alive

  选择NTLM算法,向P发送经过base64处理的type1
message,带有用户的HOST名字『机器名字』和域名,例如我的机器HOST为YJY-WEI,域名为GDCTC。这些通过获取计算机的信息得到。如果在LINUX或者其他操作系统,可以填为NULL、NULL。

步骤四

  C 《--  P :HTTP 407 Connect: Keep-Alive

  P通过经过base64加密的信息给出type2
Message,其中包含nonce,提供给客户端计算,并给出NTLM算法的特性,这个特定由步骤三给出的NTLM
flags,P来进行选择,可以指定使用NTLM使用v1还是v2。

步骤五:

  C --》 P : HTTP/1.1 CONNECT NTLMSSP …… Connect:keep-Alive

  C根据NTLM算法计算nonce、user、passwd,给出type3Message,并经过base64扰码给P送去。

步骤六:

  C --》 P : HTTP/1.1  200

  Connection建立,可以传递非HTML格式的内容 。


相关算法:NTLM

   
如果通过网络抓包,一般采用NTLM和kerberos。我们的第一个目的是通过NTLM实现通信。需现对NTLM算法有所了解。

  windows的登录。按从弱至强可使用LM、NTLM、NTLM v2,kerberos。

  • LM网络认证协议是很多年前Microsoft和IBM合作开发操作系统是开发的,比较薄弱,经常被用作攻击工具获得windows的密码。他的薄弱基于以下原因:
  • LM无法辨别大小写字母,在密码哈希将所有字母都被转换成大写字谜,但包含不同类型字符的密码是难破译的。
  • LM将长于7为的密码分为两块,分别处理。攻击者可分别攻击LMmima的两个部分。因此创建一个长于7位的密码不能是密码更安全。
  • LM密码不能长于14个字符,但是长密码是更安全的密码。
  • LM协议使用DES,DES是所有加密协议中较弱的一个协议。

默认情况下,Windows Server 2003钱的操作系统会创建、贮存一个LM hash和一个NTLM
hash。此外,网络认证是传送一个LM喝NTLM版本的相应。这些因素使得LM较容易攻击,破解,通过破解LM
hash值得到账户密码。通过消除LM hash的存贮,有很多方法可用于加强密码安全。

  Windows NT引入NT LAN
Manager认证协议。和LM不同,NTLM能辨别大小写字母。NTLM为整个密码生成一个MD4哈希(不分为7个字符的块)。虽然NTLM支持更长的字符,但是Window
NT用户 界面不支持超过14位字符的密码,因此实际上这也是NT密码的长度。Windows
2000以后的版本能支持更长的密码,知道最到128位字符。

  NTLMv2支持信息的保密性和完整性。用独立密钥和HMAC-MD5算法,NTLMv能提供128位加密和NTLMv会话安全性。当配置NTLMv作为唯一允许协议时,LM的响应将不会被发送。

  计算机升级到Windows
2000及以上版本,更常用Kerberos认证协议。Kerberos协议被认为是专家级的强协议。协议的很多部分是专门针对那些有名的认证攻击而开
发。区别Kerberos协议和NTLM的一个办法就是,NTLM是为应用于可信任网络而开发的,而Kerberos是为了应用于不可信任网络而开发。但
是需要注意如果驱动器是由服务器IP地址而不是计算机名映射,Kerberos不可用,LM或NTLM可用。

 

相关链接:我的网络通信相关文章

NTLM的实现:

抱歉!评论已关闭.