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

有关更多概念可以参考内网渗透系列的上一篇文章《内网渗透—获取Windows内Hash密码方法总结》,话不多说,直接开始。

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

攻击者利用wmiexec.py,通过提交目标机的用户名及密码,即可直接获得一个交互式shell,成功进行横向移动。Wmiexec.py脚本是impacket工具包中的一个工具,是一个强化版的wmic,同时还支持socks代理。执行以下命令即可:

Python wmiexec.py<username>:<password>@<目的IP>

03、利用哈希传递攻击进行横向移动

1)攻击简介

哈希传递攻击也称为PTH(Pass The Hash),是一种在内网渗透中很重要的一种横向移动方法,通过PTH攻击者可以在不需要知道明文密码的情况下,利用NTLM Hash和LM HASH直接登录目标机或者反弹Shell。而且需要注意的是,这里的目标机通常是域控(DC)。

其实PTH攻击的产生原因非常简单,因为在域环境中,域管理员是可以利用域账号管理每一台域内主机的,如果管理员利用域账号登陆了某一台主机,则该主机的lsass.exe就会像往常一样,将登录者的账号记录下来(有关lsass.exe的介绍可以翻看《获得域内单机Hash密码方法总结》),但是需要注意的是在Windows Server 2012 以前,lsass.exe是可以记录明文密码的,攻击者就不需要通过PTH进行移动了,只有在Win Server 2012以后的版本,lsass.exe无法获得明文密码,攻击者可以利用某些手段,获得Hash 密码,如果碰巧这就是域管理员所使用的密码hash的话,那么攻击者就可以利用该Hash伪装成域管理员登陆域控或者其他主机。

2)攻击复现

跳板机:192.168.154.10(Windows7)

目标机:192.168.154.30(Windows2008 R2)(域控DOMORE.ME)

攻击者利用Mimikatz进行PTH攻击

攻击者在控制了域内某台跳板机后,从攻击机上传一个Mimikatz到跳板机上,通过执行以下命令可以获得本机账号,如果域管理员曾经使用域账号登陆过这台机器,Mimikatz就可以获得域账号的密码Hash,如下:

在获取密码Hash之后,执行以下命令,就可以将域账号的Hash密码传递到域控当中

sekurlsa::pth /user:<用户名> /domain:<IP或者域名> /ntlm:<域账号的Hash值>

利用此方法,不仅可以登陆域控,也可以登陆域内其他主机,如果输入的是域名则会传递到域控当中,如果输入的是域内机器主机IP则会传递到相应主机中。

执行完上述命令后,会回弹一个shell,利用该shell可以无需用户名和密码远程访问域控或其他域内主机。

04、利用票据传递攻击进行横向移动

1)攻击简介

票据传递攻击也成为PTT,之前我们讲的PTH是基于NTLM认证的,除了这种认证方法外,还有一种认证方法是基于Kerberos协议的,而PTT就是基于Kerberos协议进行攻击。除了协议不同外,两种攻击方法还有一个不同点那就是所需目标机的权限不同。在渗透测试中,想要成功进行PTH攻击,必须获得目标机器的管理权限,而PTT则不需要。

具体关于Kerberos的认证协议是怎么工作的,这个我会放到下一期单独讲解。简单来说,Kerberos提供了两个重要的东西:黄金票据、白银票据,用来维持用户对域控的权限。其中还有许许多多的认证信息伴随着两个票据的产生,其中有一个叫做PAC(Privilege Attribute Certificate)的东西,是我们着重要关注的对象。

PAC又叫特权属性证书,是用来验证客户端的访问权限的。其中有个经典的漏洞就是利用了他,MS14-068,该漏洞允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意的PAC(表示所有用户权限的结构)。该漏洞位于kdcsvc.dll域控制器的密钥分发中心(KDC)中。普通用户可以通过呈现具有改变了PAC的Kerberos TGT来获得票证,进而伪造票据获得管理员权限。

2)攻击复现

跳板机:192.168.154.20(WindowsServer 2008)

目标机:192.168.154.30(WindowsServer 2012)(域控DOMORE.ME)

攻击者在跳板机上,查询该台机器在域内的SID值,whoami /all

攻击者利用MS14-068的EXP,生成基于该SID的票据,执行以下命令

ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器ip地址 -p 域成员密码

EXP的下载项目为:

https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068

可以看到所生成的票据,后缀为ccache

攻击者在跳板机上打开Mimikatz,首先清楚当前机器中所有凭证,如果有域成员凭证会影响凭证伪造。Kerberos::purge

执行以下命令,将票据注入到内存当中:

mimikatz # kerberos::ptc 票据文件

注入成功后,可以与域控直接建立远程连接,执行命令等操作,如下。

声明:本文来自第59号,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。