这篇文章主要为大家展示了“怎么使用ADSI接口和反射型DLL枚举活动目录”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么使用ADSI接口和反射型DLL枚举活动目录”这篇文章吧。
如果使用传统的PowerShell/C#的话,就可能需要将写好的脚本放置到目标设备的磁盘中,而这样就有可能被安全产品检测到。这里,我们可以选择使用assembly.load等方法直接将工具加载到内存中,而C/C++正好可以帮我们实现类似的功能。这里,我们可以使用反射方法来将已编译好的C/C++恶意程序注入到目标设备的内存之中,下面给出的是目前几种比较热门的方法:
1、DonutPE加载器(参考资料)
2、反射型DLL注入(原始版本)(改进版本)
3、Shellcode反射型DLL注入
好了,我们回到正题上,也就是如何实现活动目录的枚举。我们希望在枚举AD信息的时候不会触发AMSI或者是不留下明显的事件日志(可以通过伪造事件日志的内容来实现),要与活动目录进行对接并枚举其对象属性,我们需要使用到活动目录服务接口(ADSI)。
ADSI,即活动目录服务接口(ActiveDirectoryServicesInterface),是Microsoft新推出的一项技术,它统一了许多底层服务的编程接口,程序员可以使用一致的对象技术来访问这些底层服务。ADSI把这些服务的公共部分提取出来,同时隔离出相异的部分,程序员可以用统一的接口访问底层服务的公共部分,并延伸到底层服务的专有部分。ADSI提供了一组COM接口,可以用来访问来自不同网络提供商的目录服务功能,独立软件供应商和开发人员可以使用ADSI对其产品和应用程序进行目录启用。
非常好,那么我们的重点就要放在如何通过C/C++来构建自己的活动目录枚举工具了。在这里,我们其实不需要自己去重复造轮子了,因为微软的GitHub库已经给我们提供了一份非常优秀的参考样例-QueryUsers,我们可以使用这个样例来开发我们自己的客户端了。
QueryUsers:【GitHub传送门】
QueryUsers可以在活动目录域这个实现分区查询,并且可以指定过滤器匹配的用户对象,该工具使用了IDirectorySearch来实现搜索功能的执行。
在QueryUsers的帮助下,我们可以搜索特定用户或所有用户,并返回所有标识用户的所有属性。QueryUsers的工作机制如下:
1、ADSI是基于COM构建的,因此我们需要使用CoInitialize()函数在程序内初始化COM;
2、我们需要使用ADsOpenObject()对LDAProotDSE进行绑定,因此我们可以收集有关活动目录的信息,并使用返回的IADsCOM对象来获取defaultNamingContext信息;
3、获取到defaultNamingContext之后,我们可以再次使用ADsOpenObject()来对Domain容器进行绑定,它将返回IDirectorySearchCOM接口,而该接口可以用来对活动目录进行查询和搜索;
4、在调用FindUsers()函数时,它将基于函数参数和以下字符串构造一个LDAP过滤器-“(&(objectClass=user)(objectCategory=person)%s)”。如果我们为改程序提供以下搜索过滤器参数“(sAMAccountName=Administrator)”,那么我们的LDAP过滤器实则为(&(objectClass=user)(objectCategory=person) (sAMAccountName=Administrator))”;
5、使用ADS_SEARCHPREF_INFO结构体作为搜索参数的首选项;
6、执行IDirectorySearch对象中的ExecuteSearch()方法,该方法将根据我们的 LDAP 过滤器返回所有结果;
7、最后,使用GetFirstRow()、GetNextColumnName()、GetColumn()和 GetNextRow()方法遍历结果,并输出特定的用户属性;
Cobalt Strike具有用于代码/DLL注入的多种功能选项,并且嵌入有功能非常强大的脚本语言支持,因此开发人员可以根据自己的需要来扩展Cobalt Strike的功能。
为了验证该技术的可行性,我们开发了一种基于ADSI和反射型DLL的活动目录枚举工具,该工具可以直接在Cobalt Strike中使用。我们的PoC工具名叫Recon-AD,该工具目前由其中反射型DLL以及对应的AggressorScript脚本构成。
其主要功能如下:
1、Recon-AD-Domain: 查询域信息(包括域名、GUID、站点名称、密码策略、域控列表等);
2、Recon-AD-Users: 查询用户对象和相应的属性;
3、Recon-AD-Groups: 查询组对象和相应的属性;
4、Recon-AD-Computers: 查询计算机对象和相应的属性;
5、Recon-AD-SPNs: 查询配置了服务主体名称(SPN)的用户对象并显示有用的属性;
6、Recon-AD-AllLocalGroups: 在计算机是上查询所有本地组和组成员;
7、Recon-AD-LocalGroups: 在计算机上查询特定的本地组和组成员(默认 Administrators 组);
广大研究人员可以自行从本项目的GitHub库中下载Recon-AD,并在Cobalt Strike中加载相应的脚本来完成自己的任务。
使用Recon-AD-Domain显示本地机器的域信息:
使用Recon-AD-Groups Domain Admins命令枚举域管理员组的属性信息:
使用Recon-AD-User username命令输出指定用户的属性信息:
以上是“怎么使用ADSI接口和反射型DLL枚举活动目录”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。