关于windows空会话的一些研究

友链
关于windows空会话的一些研究

参考:
https://sensepost.com/blog/2018/a-new-look-at-null-sessions-and-user-enumeration/

详细阅读
https://gitee.com/wochinijiamile/suiyi/blob/master/biji.docx

自己编写一个应用,如下:

调用
DsrGetDcNameEx2
Rpc方法

使用impacket框架

该框架可以通过smb协议调用各种各样的rpc方法

该应用接收一个潜在的用户名列表作为参数
然后依次使用该列表中的用户针对远程主机(DC)调用DsrGetDcNameEx2方法
https://github.com/sensepost/UserEnum/blob/master/UserEnum_RPC.py

其实就类似于一个**的感觉

为了加速枚举,我调查了一下DsrGetDcNameEx2是如何工作的

该方法和GetDcName, DsrGetDcName, DsrGetDcNameEx 都可以根据提供的域名来定位到该域的DC

他们会使用DNS、LDAP或者NetBIOS等方法获取域控制器在域内的位置

他们的工作方式大致如下所述:

1、通过DNS查询或者NetBIOS广播提供的域名获取到域控制器的IP
2、如果通过DNS获取到了域控制器的IP,会向DC发送一个LDAPping报文,如果通过NetBIOS获取到了DC的IP,会向DC发送一个mailslot ping报文,这两个数据包都是通过UDP协议进行发送的,这两个报文中都有一个列表,上面是一些要求DC需要满足的条件
3、DC检查自己是否符合这些要求并发送响应报文
4、最后调用方法的系统会处理发送回来的响应报文

DNS、LDAP方法

发起调用的主机会向远程主机发送一个CLDAP报文(基于UDP,无连接)

对于用户存在的情况,DC会向源主机返回操作码为23的报文,如果用户不存在则返回操作码25

因此我需要自己构造出CLDAP报文
Samba源代码中有一个示例脚本:该脚本可以构造出这样的CLDAP报文
https://github.com/samba-team/samba/blob/master/examples/misc/cldap.pl.

根据以上我写出了下面这个脚本

https://github.com/sensepost/UserEnum/blob/master/UserEnum_LDAP.py

安装这个工具需要asn1tools模块,安装的时候有需要安装diskcache模块,但是使用python2安装的时候他会出现错误,因为默认安装的是针对python3的模块,因此我每年需要指定diskcache模块的版本

Pip install diskcache==4.1.0

之前写的脚本https://github.com/sensepost/UserEnum/blob/master/UserEnum_RPC.py
是直接调用的rpc方法,这种调用方法的方式相比较直接构造数据包发送请求的方式要慢很多,因此能使用ldap我们干嘛还直接调用rpc方法呢

后面我又在想我可以使用通配符来猜解用户名
比如B*、Bo*等

但是当我这样写的时候,构造出来的CLDAP包就无法正常响应了

我又测试了一会儿,发现确实没办法实现这种功能

然后我想着CLDAP可以达到这种**用户名的效果,接下来我想再试试NetBIOS

首先我使用rpcclient发起了一个DsrGetDcNameEx2 方法的调用

然后再wireshark中,我捕捉到了如下数据包

这里发起请求的机器为DC01(192.168.57.2),目标机器为1c.black(192.168.57.120)

1、57.2发送NBNS广播报文,查询1c.black这个名称
2、120向57.2返回NBNS响应报文,其中包含自己的IP(192.168.57.120)
3、57.2发送SMB_NETLOGON广播报文(UDP)
这里明明已经知道了1c.black的IP却还要发送广播,我也不知道为啥
4、120发送NBNS广播报文,查询DC01这个名称
5、57.2向120发送SMB_NETLOGON报文
6、57.2向120返回NBNS报文,报告自己的IP
7、120向57.2返回SMB_NETLOGON响应报文

从以上的报文我们可以看出来
通信双方都发起了NBNS查询,而且查询的名称我们是可以控制的,响应的IP地址我们也可以控制(这个我们只能控制DC01)

但是通信过程一直都是UDP,没有SMB TCP报文,我们无法使用Responder来利用

继续玩儿Responder,我发现至少我可以利用这个来方法来中毒目标系统的NETBIOS名称-ip对应表缓存