SMB窃取NTLMhash
背景
在打进内网之后,并且在隧道建立完毕的情况下,进行当前内网主机的一个探测,发现80端口的http服务存在一个文件包含漏洞,而且在前期内网信息收集的时候发现smb服务是开着的
(win系统)
先简单说一下这个文件包含漏洞,url中有一个page参数,借助文件包含漏洞,我们可以尝试读取系统中的敏感文件,比如hosts文件,win下的hosts文件在windows\system32\drivers\etc\hosts中,所以构造payload
1 |
|
页面回显如下

我们之所以会成功是因为index.php里包含include()这个方法,将会读取page这个参数的值,如果开发者没有进一步处理page参数所得到的值时,这个攻击就会成功
php include函数的示例如下
1 |
|
当test.php包含(include)root.php后,color及fruit就被赋予值了
那么如何进一步利用呢?两种思路:一是写入或包含远程后门文件,做权限的维持;二是继续信息收集系统的账号密码信息,进行PTH等操作,我们先测试一下远程文件包含,我们知道远程文件包含还需要两个条件:allow_url_include、allow_url_fopen要为“ON”,而本地文件包含则不需要,测试一下,直接报错,说明不存在远程文件包含
1 |
|

利用SMB窃取NTLM hash
SMB 协议支持 NTLM 和 LM 加密,我们通过恶意程序监听,在远程主机访问我们的 SMB 服务时,因为要进行身份验证,会发送相关信息,我们就可以获取目标主机的 hash 值,这个是为了账号密码的安全性,一般都不进行明文验证,而是使用摘要值进行比对,这样就给了攻击者机会,在不需要知道正确的账号密码的情况下,只要摘要值比对成功就可以登录
利用工具Responder,进行监听网卡,确定目标主机和跳板机在一个网段内,这个时候就体现了隧道的重要性了,我这里是tun0
1 |
|
然后通过文件包含漏洞构造payload,并拼接访问url触发
1 |
|

成功接收到服务器的的 NTLM 值,一般是第一次请求才会发送,然后会保存到本地,下次就不会再发送了
NTLM 碰撞获取可用账号密码
获取到 NTLM 值,下一步就是暴破了,将获取的值保存到一个文件中,然后用john进行破解碰撞,就获取到了账户和密码

拿到账户密码直接登录连接获取shell,并可以为后续的密码喷洒等工作做准备
