从域外对域内进行信息收集、密码喷洒

一般我们红队人员与目标内网建立了socks5隧道后,就可以从域外(这里域外指的是红队人员的个人PC)对域内机器进行信息搜集了,很多工具不用上传到目标机器,也就不易被AV检测到,但是有可能会被一些流量检测设备发现有大量socks5流量。

接下来介绍下如何通过域外对域内进⾏更深的信息搜集:枚举域⽤户、查看域内⽤户、查看域内组、查看域内机器列表......

LDAP #

LDAP(Lightweight Directory Access Protocol),轻量⽬录访问协议,是⼀种⽤来查询与更新 Active Directory 的⽬录服务通信协议。AD 域服务利⽤ LDAP 命名路径(LDAP naming path)来表示对象在 AD 内的位置,以便⽤它来访问 AD 内的对象,默认端⼝ 389。

LDAP 数据的组织方式 #

LDAP名称路径如下

标识名称(distinguished Name,DN):它是对象在 Active Directory 内的完整路径,DN 有三个属性,分别

是 CN,OU,DC

  • DC (Domain Component):域名组件,例如test.lab中的test和lab
  • CN (Common Name):通⽤名称,⼀般为⽤户名或计算机名;
  • OU (Organizational Unit):*组织单位;也叫容器,可以理解为一个部门

例如,如上⽤户账户,其 DN 为:

CN=yuwin2012,OU=财务部,OU=readteam,DC=test,DC=lab

此DN表示yuwin2012存储在test.lab\readteam\财务部 路径中

通过对应的LDAP的语法,我们可以在域中可以准确、单一的请求我们想要查询的数据。我们再使用adfind来进行演示,获取域内用户列表信息:

LDAP中还有几个关键词:

  • RDN(Relative Distinguished Name,相对标识名称):RDN⽤来代表DN完整路径中的部分路径,例如上⾯路径中的 CN=yuwin2012与 OU=财务部等都是 RDN。
  • Base DN:LDAP ⽬录树的最顶部就是根,也就是所谓的 "Base DN",如 "DC=test,DC=lab"

除了 DN 与 RDN 这两个对象名称外,另外还有如下两个名称:

  • GUID(Global Unique Identifier,全局唯⼀标识符):GUID 是⼀个128位的数值,系统会⾃动为每个对象指定⼀个唯⼀的GUID。虽然可以改变对象的名称,但是其GUID永远不会改变。
  • UPN(User Principal Name,⽤户主体名称):每个⽤户还可以有⼀个⽐DN更短、更容易记忆的 UPN,例如上⾯的 yuwin2012⾪属于 test.lab,则其 UPN 可以为 yuwin2012@test.lab。⽤户登录时所输⼊的账户名最好是 UPN,因为⽆论此⽤户的账户被移动到哪⼀个域,其 UPN 都不会改变,因此⽤户可以⼀直使⽤同⼀个名称来登录。

环境搭建 #

通过vps中的cs上线win7主机,然后cs开启了一个socks4代理,真实机进行连接,然后在我们自己的主机上进行测试,这样工具就无需传到目标机器。这种方式称为域外

  • 域名:test.lab
  • 域控:192.168.10.2
  • 成员机:win7 192.168.10.5;192.168.111.143
  • 成员机:win2012 192.168.10.4

一、域内用户枚举 #

正常域用户登录主机,我们可以通过 "net user /domain"来列举出域内的用户。但是当我们用非域用户进行登录时,是不能使用 "net user /domain"这条命令的。或者当主机不在域内但是能与域控通信时,以上两种情况我们可以通过以下方法对域内用户进行枚举。

枚举原理 #

Kerberos本身是一种基于身份认证的协议,在 Kerberos 协议认证的 第一阶段AS-REQ ,当用户不存在时,返回包提示错误。当用户名存在,密码正确和密码错误时,AS-REP的返回包不一样。所以可以利用这点,对域内进行域用户枚举和密码喷洒攻击。

在AS-REQ阶段客户端向AS发送用户名,AS对用户名进行验证,用户存在和不存在返回的数据包不一样

三种状态的错误代码分别为:

  • KRB5DC_ERR_PREAUTH_REQUIRED 需要额外的预认证(用户存在)
  • KRB5DC_ERR_CLIENT_REVOKED 客户端凭证已被吊销(禁用 )
  • KRB5DC_ERR_C_PRINCIPAL_UNKNOWN 在Kerberos数据库中找不到客户端(不存在)

当发送一个存在的用户yuwin7

返回“KRB5DC_ERR_PREAUTH_REQUIRED”,并携带"e-data"数据

当用户不存在返回“KRB5DC_ERR_C_PRINCIPAL_UNKNOWN”,不携带"e-data"数据

所以,根据AS的返回包来对域用户进行枚举

枚举工具 #

先准备一个用户字典users.txt,用于对域内用户进行枚举

kerbrute工具

下载:GitHub - ropnop/kerbrute: A tool to perform Kerberos pre-auth bruteforcing

kerbrute_windows_amd64.exe userenum --dc 域控ip -d 域名 用户名字典.txt
kerbrute_windows_amd64.exe userenum --dc 192.168.10.2 -d test.lab users.txt

或者是当使用非域用户进行登录时,也能进行枚举

二、ADfind 搜集域内各类信息 #

ADfind 是⼀款 C++编写的⼯具,是⼀款⾮常知名的⼀款域内信息查询⼯具

获取域内用户信息 #

adfind.exe -h 192.168.10.2 -u test\yuwin7 -up yuwin7.com -b dc=test,dc=lab -f "objectcategory=user"
#yuwin7/yuwin7.com 为抓取到的域账号和密码

获取域内⽤户组列表信息 #

adfind.exe -h 192.168.10.2 -u test\yuwin7 -up yuwin7.com -b dc=test,dc=lab -f "objectcategory=group"

获取指定域内组成员列表信息 #

获取test.lab\readteam\财务部 组中的成员信息

adfind.exe -h 192.168.10.2 -u test\yuwin7 -up yuwin7.com -b "OU=财务部,OU=readteam,DC=test,DC=lab" member

获取域内完整 OU 列表信息 #

可以在域控中看一下

使用 csvde 搜集域内各类信息 #

Csvde 是 Windwos server 2008 的内置命令⾏⼯具,位于 %windir%/ system32 ⽂件夹中。如果安装了AD 或者Active Directory轻型⽬录服务(AD LDS)服务器⻆⾊,则此功能可⽤。

适⽤于:Windows Server 2003,Windwos Server 2008,Windwos Server 2003 R2,Windwos Server 2008 R2,Windwos Server 2012,带有SP1,Windwos 8的Windos Server 2003.

也就是说我们如果想要利⽤ csvde 去搜集域内信息的话,我们在域外需要安装⼀个 AD(域控制器)

这里没有win2008就不演示了

Ad Explorer 图形化查看域内各类信息 #

AD Explorer是独⽴的可执⾏⽂件,⽆需安装就可以使⽤。使⽤前⾸先需要⼀个域帐户 ( 任何⼀个域帐户都可以), 可以利⽤该账户与域控制器通信并⽤它枚举域。它能够列出域组织架构,⽤户帐户,计算机帐户等。它可以帮助你寻找特权⽤户和数据库服务器等敏感⽬标。

Ad Explorer 下载地址:http://live.sysinternals.com/

输入域控ip,以及任意普通域⽤户登陆即可查看到域内详细信息

总结 #

在内⽹渗透中,有些苛刻的条件不允许我们上传⽂件到⽬标机器,但是⼿动去执⾏命令搜集信息 效率⼜不⾼,所以我们就需要从域外对域内进⾏信息搜集,通过 socks 隧道使⽤域外的⼯具对域内进⾏信息搜集,这样也能造成⽂件不落地,也⽅便,以上很多⼯具其原理就是通过 LDAP 的 389 端⼝进⾏ LDAP 查询。

三、密码喷洒攻击 #

在常规的爆破中,我们都是先用很多密码去碰撞一个账号,这样很容易导致账号被锁定。而密码喷洒就是先用一个密码去碰撞很多账号,此方法能有效的避免账号被锁定的问题

获取了域用户后,进行密码喷洒

喷洒原理 #

在确认用户存在后,客户端又会发送一个AS-REQ请求,如果密码正确,则返回AS-REP。否则返回 KRB5KDC_ERP_PREAUTH_FAILED

喷洒工具 #

kerbrute工具

  1. 使用单个密码依次去碰撞n个用户名
kerbrute_windows_amd64.exe passwordspray --dc 192.168.10.2 -d test.lab users.txt yuwin7.com -v

crack.exe

crack 是⼀款⾮常好⽤的密码喷洒⼯具,并且速度快,⽀持对⼀个 C、B 段进⾏基于 smb 密码喷洒。—> crack

  1. 基于⽤户字典密码字典喷洒

指定很多个密码,那就不叫密码喷洒了。和常规的口令爆破是一样的,账户容易被锁定

crack.exe -P pass.txt -U user.txt -i 192.168.52.138 -s smb
#无需指定域也能对域账户进行爆破

  1. 基于⽤户字典单个密码喷洒
crack.exe -P yuwin7.com -U users.txt -i 192.168.10.2 -s smb

ADPwdSpray.py

地址:https://codeload.github.com/3gstudent/pyKerbrute

该脚本可以针对明文密码或者哈希进行喷洒

#针对明文进行喷洒
python2 ADPwdSpray.py 192.168.10.2 test.lab users.txt clearpassword 123.com tcp
 
#针对哈希进行喷洒
python2 ADPwdSpray.py 192.168.10.2 test.lab users.txt ntlmhash afffeba176210fad4628f0524bfe1942 udp

还有其他很多密码爆破工具,如超级弱口令检测工具、fscan等。