本篇是内网渗透系列的第二篇,我们主要来聊一聊在内网渗透中都有哪些方法可以帮助我们进行横向移动。在开始之前,我们先简单介绍一下什么是横向移动,所谓横向移动就是当攻击者获得了某台内网机器的控制权限后,会以被攻陷的主机为跳板,继续访问或控制其他内网机器的过程,我们称之为横向移动。

01、Windows远程连接命令介绍

在上一篇文章中,我们介绍了如何获取Windows单机的Hash密码,这一步是进行横向移动的基础,接下来我们可以通过Windows自带的远程连接命令进行操作,也可以通过一些PTH的方法,将散列值或明文密码进行传递,当然这是后面的内容会介绍到的,这里我们先了解一下有关Windows自带的远程连接命令—-IPC。

IPC$(Internet Process Connection)是“进程间通信”的简称,其本质是一个共享的“命名管道”资源,主要的作用是为了让进程间通信而开放一个命名管道,通过提供可信任的用户名和口令,从而到达连接双方可以建立一个安全的通道并以此进行加密数据交换的功能,最终显现出来的效果就是能够实现对远程计算机的访问。

其实说白了IPC$有点类似于共享目录,但功能比他多得多。通过IPC$与目标机建立连接,不仅可以访问目标机器中的文件,进行上传、下载,还可以在目标机上运行命令。使用下面的命令就可以很轻松地创建一个IPC$连接了。

Net use \\<目标机IP>\ipc$ “password” /user:”username”

看到上面的命令,我们可以知道,要想建立IPC连接必须要满足三个条件:

① 目标机开启了139和445端口;

② 目标主机管理员开启了ipc$默认共享;

③ 知道目标机的账户密码。

可能到这里会有一些人有疑问,为什么我都知道了目标机的用户名和密码还要使用IPC?因为在真实环境中,并不是内网的所有机器都开放了3389(远程桌面)让你登陆,对于一些没有开启该服务的机器想要控制它就必须得通过IPC连接的方法了。而且要想直接获取目标机的用户名和密码是比较困难的,在不知道口令的情况下想要直接通过远程桌面来进行爆破是行不通的,但是IPC不仅可以批量爆破,还允许匿名登陆,所以IPC连接具有更强的灵活性。

02、IPC+计划任务进行横向移动

通过计划任务进行横向移动其实类似于我们再进行Linux反弹shell时所依赖的计划任务一样,都是通过计划任务机制,让其自动执行攻击者上传的木马,从而达到受控的目的。在Windows中,能够创建或修改计划任务的主要有两个命令:schtasks和at。其中at命令主要工作在WindowsServer 2008之前版本的操作系统中,在之后的版本主要工作的都是schtasks命令。

1)利用schtasks命令

具体的操作流程如下:

① 与目标机建立IPC连接

② 使用copy命令,将木马复制到目标机中

③ 目标机上创建计划任务,使其自动触发木马文件

攻击机:192.168.210.38(KaliLinux)

跳板机:192.168.20.35(Windows10)

目标机:192.168.210.102(Windows 10)

跳板机与目标机创建IPC连接

攻击机上生成木马

在跳板机上使用copy命令,将攻击机上生成的木马文件复制到目标机中

copy shell.exe \\192.168.210.102\c$

利用schtasks命令创建一个名为“hack”的计划任务,该任务每分钟执行一次shell.exe。

schtasks /create /s 192.168.210.102 /uusername /p password /tn hack /sc minute /mo 1 /tr c:\shell.exe /ru system /f

除了利用木马获得权限外,还可以通过计划任务直接执行系统命令,但由于结果不会回显,所以我们需要先将结果保存在一个文件中,再通过type指令读取文件内容获得执行结果。

2)利用at命令

使用at命令与上面的schtasks命令类似,唯一有所区别的是利用at命令时的命令格式与schtasks不同。

攻击机:192.168.210.38(KaliLinux)

目标机:192.168.210.102(Windows 10)

跳板机:192.168.210.107(Windows Server 2008 R2)

跳板机与目标机建立IPC连接

使用at命令创建计划任务,让目标机运行木马程序


03、IPC+Windows服务来进行横向移动

使用Windows服务来进行横向移动有点类似与上一部分的利用计划任务进行横向移动,其核心也是将木马文件传入目标机中,然后通过SC命令创建一个Windows服务用来指向传入的木马文件,最后启动该服务或者重启目标机即可触发该木马,实现横向移动。

具体的操作流程如下:

① 与目标机建立IPC连接

② 使用copy命令,将木马复制到目标机中

③ 利用sc命令创建一个Windows服务指向木马文件

④ 启动该服务触发木马

攻击机:192.168.210.38(KaliLinux)

跳板机:192.168.20.35(Windows10)

目标机:192.168.210.107(Windows Server 2008 R2)

先让跳板机与目标机建立IPC连接,然后利用Copy命令将木马文件shell1.exe复制到目标机中。

利用SC命令创建一个名为hacker的服务,命令如下:

sc \\<IP> create <servicename>binpath=”<path>”

sc \\192.168.210.107 create hackerbinpath=”c:\shell1.exe”   #创建服务

sc \\192.168.210.107 start hacker      #启动hacker服务


04、总结

以上介绍的只是我们在内网渗透中进行横向移动的常见方法,下一期我们会介绍其他的横向移动方法,例如如何利用PTH的方法,将散列值或明文密码传入目标机中进行横向移动,或者利用Windows自带工具PsExec、WMI进行横向移动以及寻找域控的方法。

上一篇我们介绍了内网渗透中横向移动的前两种攻击方法:利用IPC和Windows系统服务。通过以上两个方式,我们成功的进行了简单的内网横向移动。本期我们将继续介绍横向移动的其余方法,而且是更加贴近实战的方式,话不多说,直接开始!

01、利用PsExec工具进行横向渗透

1)PsExec工具介绍

PsExec 是 windows 下非常好的一款远程命令行工具。PsExec的使用不需要对方主机开方3389端口,只需要对方开启admin$共享 (该共享默认开启)。但是,假如目标主机开启了防火墙,PsExec也是不能使用的,会提示找不到网络路径。由于PsExec是Windows提供的工具,所以杀毒软件将其列在白名单中。

工具连接:

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

2)攻击流程

目标机上开启了admin$共享,且未开启防火墙,导致跳板机可以与目标机建立ipc$连接,同时释放二进制文件psexecsvc.exe到目标机中,然后在跳板机上通过执行运行PsExec,会为目标机远程创建一个PsExec服务并启动,接下来攻击者只需在跳板机上利用PsExec的远程命令构造一个交互shell即可实现横向移动。

3)攻击复现

跳板机:192.168.20.35(Windows10)

目标机:192.168.210.102(Windows 10)

首先攻击者在跳板机上建立与目标机的IPC连接。

其次攻击者使用PsExec.exe工具,向目标机传送远程命令(远程创建一个PsExec的服务,执行远程指令并回显数据),其中-accepteula参数是因为第一次执行PsExec时会弹出确认框,而使用该参数就可以在静默模式下运行而不会被发现,-s参数是以system权限运行该进程,获得一个system权限的交互式shell,实现横向移动。

执行命令:PsExec.exe-accepteula \\<目标机IP> -s cmd.exe

在使用PsExec执行远程命令时,会在目标机中创建一个新的服务,如下图。在结束交互后,PsExec服务会自动删除,但是在创建以及删除时会产生大量日志信息,所以可以基于此对攻击者进行溯源。

02、利用WMI进行横向渗透

1)WMI工具介绍

WMI是“Windows Management Instrumentation”的缩写,WMI是从Windows98开始,系统自带的一系列工具集。WMI提供了/node选项,可以通过135端口上的RPC服务进行远程访问,或者执行远程命令。

由于刚刚讲过的PsExec在内网中大杀四方后,很多安全厂商开始将PsExec加入了黑名单,所以攻击者暴露的可能性陡然增加。但是根据研究情况来看,Windows操作系统默认不会将WMI的操作记录到日志当中,而且因为采用的是无文件攻击,所以导致WMI具有极高的隐蔽性。由此,越来越多的APT开始使用WMI进行攻击,利用WMI可以进行信息收集、探测、反病毒、虚拟机检测、命令执行、权限持久化等操作。

2)攻击流程

目标机上开启了135端口和445端口,攻击者可以直接在跳板机上利用WMI命令,远程执行指令,例如开启目标机的远程桌面服务、或者结合ipc+type的方式实现命令交互(WMI执行远程命令没法回显)、或者利用WMIEXEC.py(强化版WMI)获得交互式shell,实现横向移动。

当然在整个攻击过程中,如果攻击者无法直接在跳板机上操作,则需要进行一下socks代理,将攻击机上的流量转发到跳板机上,进而传达到目标机上,具体的操作过程可以参考前几篇文章《利用EarthWorm实现内网穿透》。

3)攻击复现

攻击机:192.168.210.38(KaliLinux)

跳板机:192.168.20.35(Windows10)

目标机:192.168.210.102(Windows 10)

攻击者利用WMIC执行远程命令,查看目标机上的进程信息。

wmic /node:<目标机IP>/user:<name> /password:<password> process list brief

攻击者利用WMIC并结合ipc+type执行远程交互指令。攻击者通过WMIC命令启动目标机上的cmd程序,执行命令并将结果保存在C:\result.txt文件中,然后利用type命令读取目标机上result.txt文件的内容,实现交互。

wmic /node:192.168.183.130/user:administrator /password:Liu78963 process call create "cmd.exe /c<命令> > C:\result.txt"

Type \\192.168.210.102\c$\result.txt

<p style="box-sizing: border-box; margin-top: 16px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell%