在域环境中Ldap属于比较基础,且重要的知识点,通过了解Ldap的相关内容,可以快速的判断域内的环境。以及可能存在的缺陷,常常会有人遇到ldap的相关的应用,因为对ldap一知半解,从而失去了利用机会,我们在平台中配套了对应的实战环境,目前环境将作为公开挑战已上线xbitsplatform靶场平台。
团队靶场-How2UseLdap Write Up
============================
获取到win10机器中的flag。
• Ldap 相关利用
• 域外凭证利用
• 基于资源的约束委派
• 域控DNS获取
• GPO 策略下发
• DC 10.0.0.10 [135,445,389,88]
• Ldap 10.0.0.177 [80]
• flag 10.0.0.12 [135,139,445]
• rbcd win8 10.0.0.13 [135,139,445]
• rbcd2 win12 10.0.0.14 [135,139,445]
首先通过对 IP 段进行扫描判断域内主机,以及域控机器
拿到资产信息后首先对已知 ip 进行端口扫描,发现只有10.0.0.177
这台机器开放了 Web 端口。其他机器都开放了一些常规的端口,没有可以进行利用的点。目前主流的突破口都是从 web 方面进行突破,下面主要测试该 Web 应用是否存在一些可以利用的地方。
打开网站后,发现是员工信息查询页面,根据上面"请输入域账户"的提示,判断使用了域环境的验证方式。域环境验证的方式主要可以通过 Ldap 与 Kerberos 进行验证。这里需要确定他使用的验证方式。
一般发现 web 应用使用什么样的验证方式,可以使用下面几种方式来确定:
• 通过网站页面信息
• 网站验证方式选择框
• 数据包
• 网站源码泄露
• phpinfo
进行目录扫描发现敏感文件,phpinfo.php
,readme.txt
。
当目标使用一些域内验证技术的时候需要开启对应的扩展,通过 phpinfo,看到了目标开启了 ldap 支持。可以推断使用了 ldap 方式对用户进行验证。
如果是 ldap 验证的话,在这里可以尝试利用 ldap 注入,来进行测试,账户登录一般使用filter加上对应的ldap语法
去对值进行匹配,在语法中*表示匹配所有。通过在 ldap 登录处尝试输入通配符*
,使其成功匹配。发现可以成功登录。
在登录过后发现,存在几百个用户,到这一步,我们就获取到了域内存在的账户,正常来说我们可以尝试直接对账户进行密码喷洒,但是对全部账户进行喷洒的话,动静会很大。这一步暂且停止。
通过观察之前的登录页面发现具有查询手机号和邮箱这两个选项,抓包发现其中的 attr 参数中的值,为 ldap 目录中用户对应的属性名,如 email 为userprincipalname
,手机号为homePhone
,这里笔者想既然应用直接使用用户属性中的名称,那么能否将该值设置为用户中的其他属性,从而显示其他的内容呢?
结合上面遇到的问题,可以通过对域内账户的权限进行判断,找到一些合适的账户。对于账户权限的判断,在 ldap 中可以通过用户属性useraccountcontrol
对账户状态进行判断。
这里通过将 attr 的值设置为useraccountcontrol
,进行测试,发现能够成功查询,接下来可以利用它显示出来的内容判断用户的权限。
**(对该属性的值做一个简单解释)**一个账户具有不同的属性,而这个值就是不同属性相加之后得到的值。514=512+2=账号存在且关闭 66048=65536+512=密码永不过期+账号正常
这里发现大部分账户的权限都为 514 也就是不可登录,我们筛选出 66048 的账户。收集为66048
的账号:weishen weishentql dashe dashenb weizi666 weizi
收集到可以登录的账户后对账户进行密码喷洒,找到能够进行登录的账号。
这里配合上面的 readme.txt 文件中提示的密码对 ldap 账户进行喷洒。喷洒工具可以使用 3gstudent 师傅编写的一款喷洒 ldap 账户密码的 powershell 程序。
`Set-ExecutionPolicy Bypass Import-Module .\ldap_password.ps1 Invoke-DomainPasswordSprayOutsideTheDomain -Domain "10.0.0.10/DC=ds,DC=local" -UserList .\user.txt -Password p@ssw0rd -Verbose`
这里通过对密码进行喷洒,我们获取可以登录的 ldap 凭证,然后我们可以利用这个凭证直接访问 ldap 数据库,查询其中的 ldap 信息,为了便于分析我们也可以通过 Adfind 将该域的 ldap 全部下载到本地进行查看。
在一些域内有些机器可能被设置了防火墙,从而无法被扫描到。当我们获得凭证了,为了获取更为详细的域内机器,可以对域控 dns 服务器中的 DNS 信息进行查询,从而获取到一些被防火墙忽略的机器。
可以利用 adidnsdump 项目,来获取域控中的 dns 信息 https://github.com/dirkjanm/adidnsdump
可以发现域中还存在 10.0.0.12 这台机器没有被扫描到。
使用下面的语句可以从域外进行 ldap 信息的获取
`Adfind.exe * -h 10.0.0.10 -u <user> -up <password> > info.txt`
将 ldap 导入到本地后。我们对文件进行分析,可以了解目前的域环境。主要关注域策略,账户、机器、组之间的关系。
通过 ldap 信息,我们可以获取组策略中的一些信息,密码尝试次数,过期时间,如果需要进一步喷洒,可以参考这些信息,对自己的喷洒方案进行调整。
尝试定位到用户。查看对应 ldap 内容可以了解该对象的常见的属性。
用户的话一般关注以下属性 whenCreated(创建时间) memberOf(所属组) userAccountControl(权限) lastLogon(上次登录时间) pwdLastSet(上次密码修改时间) lastLogonTimestamp(上次登录时间) 通过这些可以确定账户的权限,账户当前的状态。
在对机器的 ldap 信息进行查看时发现,这里机器中存在 mS-DS-CreatorSID 这个属性,如果存在这个属性的话,表示这台机器是由某个域用户加入机器的,该域用户对该机器具有 msDS-AllowedToActOnBehalfOfOtherIdentity 权限,如果控制了这个账户那么就等于拿下了对应的机器
接下来查询具有 mS-DS-CreatorSID 属性的机器AdFind.exe -h 10.0.0.10 -u dashe -up "p@ssw0rd" -b "DC=ds,DC=local" -f "objectClass=computer" mS-DS-CreatorSID
发现机器是由 SID 为S-1-5-21-1946571181-3420340102-3117322147-1106
的用户拉入域。该用户对该机器有控制权。通过搜索 SID,发现该用户为dashe
若要利用基于资源的约束委派攻击,需要有权限控制机器账户中的 msDS-AllowedToActOnBehalfOfOtherIdentity 属性,之后我们需要利用当前域账户建立一个机器账户。之后使用该机器账户去向该机器进行委派。
在上文中提到经过验证的域账户具有将域外主机拉入域内的功能,这是由 MAQ(MachineAccountQuota)进行的,MAQ 允许域用户将计算机帐户对象添加到域。默认情况下,普通域账户可以创建 10 个计算机帐户。通过 MAQ 创建的账户会存放在域计算机组中。同时域用户对于他创建的机器账户具有对象属性的访问权限如(msDS-AllowedToActOnBehalfOfOtherIdentity)
同时通过之前的 ldap,也能查询到对应的信息。
利用 impacket-addcompute 在域外添加服务账户
`impacket-addcomputer "ds.local/dashe:p@ssw0rd" -dc-ip 10.0.0.10 -computer-name test_computer598$ -computer-pass p@ssw0rd`
相比较于非约束委派,约束委派是正向委派,由用户主动发起。接下来利用 impacket 套件中的 rbcd 将 win8 机器与服务账户 test_computer598$建立委派。
`impacket-rbcd -delegate-to win8$ -delegate-from test_computer598$ -dc-ip 10.0.0.10 ds/dashe:p@ssw0rd -action write`
当建立委派之后进行票据导出
`impacket-getST -dc-ip 10.0.0.10 ds.local/test_computer598\$:p@ssw0rd -spn cifs/win8.ds.local -impersonate administrator`
在进行票据导出的时候有一个需要注意的地方,这步操作需要与域控进行交互,所以需要与域控的时间同步。
在操作时如果提示 clock Skew too great
,就是由于时间没有同步造成的。
经过搜索相关的资料发现可以使用下面的命令,将域控时间和本机时间直接同步sudo ntpdate 10.0.0.10
导入票据
export KRB5CCNAME=administrator.ccache
导入完该票据后,我们可以利用impacket-smbclient
来上传 mimikatz 等工具来获取用户 hash,这里笔者使用 procdump 获取 dmp 文件,本机 mimikatz 解析的方式获取 hash。
`impacket-smbclient administrator@win8.ds.local -k -no-pass -dc-ip 10.0.0.10 info use c$ put procdump64.exe`
这里如果出现无法连接445
的错误,是因为目前机器是在域外,没有域控的路由表,可以手动修改 hosts 文件。将 win8.ds.local 与他的 ip 对应。
`vim /etc/hosts sudo /etc/init.d/networking restart`
也可以直接将域控的 ip,设置为本机的 dns 服务器
利用impacket-smbexec
执行命令,使 procdump 获取 dmp 文件
impacket-smbexec administrator@win8.ds.local -k -no-pass -dc-ip 10.0.0.10
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
本地利用 mimikatz 解析 lsass.dmp 文件 通过查看 lsass.dmp 解密出来的 hash,发现域管曾经登录过这台机器。从而拿到域管账户。
`mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" "exit" > pssword.txt`
接下来对 10.0.0.12 机器进行扫描,发现该机器不通,通过查看 ldap 文档中 lastLogon 属性的值,确定最后登录的时间,判断该机器是否存活。
利用 windows 中的 w32tm.exe 可以对其进行解密,发现最后登录的时间是 4 月 28 号,判断应该是防火墙的原因导致不通。w32tm.exe /ntte xxxxxxxx
既然我们拿到了域管的账户,接下来登录域控,进行 GPO 策略的下发,从而关闭目标机器的防火墙,但是发现无法进行 rdp 连接。只能想办法通过使用命令的方式去添加 GPO。
使用命令创建策略可以利用 github 上面的 pyGPOAbuse 项目实现。https://github.com/Hackndo/pyGPOAbuse
安装时有一个需要注意的地方,使用 pyGPOAbuse 的时候,python 需要大于 3.8,不然安装 msldap 的时候会产生错误。
这里指定域管的账户,与对应的 ntlmhash,gpo_id,域控的地址。进行组策略的创建。需要注意的是此处的GPO-id
为默认域 GPO 的组策略 id。默认的组策略主要有两个:一个是域控的策略(6AC1786C-016F-11D2-945F-00C04fB984F9) 一个是域机器的策略(31b2f340-016d-11d2-945f-00c04fb984f9) 这里因为目标机器是域机器,我们需要使用 31b2f340-016d-11d2-945f-00c04fb984f9 作为组策略 id。
`python3 pygpoabuse.py ds.local/administrator -hashes :f1b7ec38edc8b8046053884234a9d01a -gpo-id "31b2f340-016d-11d2-945f-00c04fb984f9" -powershell -command "Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False" -taskname "Completely Legit Task" -description "Dis is legit, pliz no delete" -dc-ip 10.0.0.10 -v`
组策略添加成功
之后等待目标机器执行组策略,执行策略后防火墙会关闭。
之后可以通过 psexec 明文密码的方式访问目标机器获取 flag。
本环境在域渗透中属于基础知识,其中大多的技术点都是围绕 ldap 展开,之后利用委派拿下机器,dump 域管 hash,下发 gpo 关闭目标防火墙,获取 flag。实际上对于获取 ldap 信息之后的利用也远远不止上面提到的内容。师傅们也可以继续查询相关的内容。
https://dirkjanm.io/getting-in-the-zone-dumping-active-directory-dns-with-adidnsdump/
https://www.4hou.com/posts/K5MR
本挑战为xbitsplatform公开环境,师傅可以直接通过 www.xbitsplatform.com 访问平台。同时环境中使用的工具,和ldap的相关笔记也会上传到知识星球。