域渗透基本概念

域渗透基本概念

0x01 什么是内网?

内网就是局域网(LAN),比如内网中的机器,输入ipconfig /all发现我们的ip是192.168..,内网中一号机器是192.168.0.1,二号机器是192.168.0.2,以此类推,但是我们在浏览器中输入 ip.cn 发现都是同一个ip。

0x02 什么是工作组?

这是局域网中的一个概念,当我们局域网内的主机太多时,或者需要对不用户进行功能分类时,就需要用到工作组。就相当于把我们的文件分类装在不同的文件夹中,一个是学习一个是工作。我们可以右击 此电脑 的属性,发现可以直接看到我们所处的工作组,其右侧可以进行设置更改。工作组的凭证都是放在本地的。

0x03 什么是域?

域英文叫DOMAIN——域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation)。信任关系是连接在域与域之间的桥梁。当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理,以及相互通信和数据传输。

域既是 Windows 网络操作系统的逻辑组织单元,也是Internet的逻辑组织单元,在 Windows 网络操作系统中,域是安全边界。域管理员只能管理域的内部,除非其他的域显式地赋予他管理权限,他才能够访问或者管理其他的域,每个域都有自己的安全策略,以及它与其他域的安全信任关系。

可以把域和工作组联系起来理解,在工作组上你一切的设置在本机上进行包括各种策略,用户登录也是登录在本机的,密码是放在本机的数据库来验证的。而如果你的计算机加入域的话,各种策略是域控制器统一设定,用户名和密码也是放到域控制器去验证,也就是说你的账号密码可以在同一域的任何一台计算机登录。登陆到域中的时候,身份验证是采用Kerberos协议在域控制器上进行的,登陆到此计算机则是通过SAM来进行NTLM验证的

0x04 什么是域控制器?

在“域”模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,相当于一个单位的门卫一样,称为“域控制器(Domain Controller,简写为DC)”。 域控制器中包含了由这个域的账户、密码、属于这个域的计算机等信息构成的数据库。当电脑联入网络时,域控制器首先要鉴别这台电脑是否是属于这个域的,用户使用的登录账号是否存在、密码是否正确。如果以上信息有一样不正确,那么域控制器就会拒绝这个用户从这台电脑登录。不能登录,用户就不能访问服务器上有权限保护的资源,他只能以对等网用户的方式访问Windows共享出来的资源,这样就在一定程度上保护了网络上的资源。

域控是活动目录的存储地方,也就是说活动目录存储在域控制器内。安装了活动目录的计算机就称为域控制器,其实在你第一次安装活动目录的时候,你安装活动目录的那台计算机就成为了域控制器。一个域可以有一台或多台域控制器。最经典的做法是做一个主辅域控。

0x05 什么是活动目录?

活动目录(Active Directory)简称AD。它基于DNS,以树状结构存储了一个域内有关网络对象(例如用户、用户组、计算机、域、安全策略等等)的信息,其中包含所有域用户和计算机帐户的密码哈希值。它提供基础网络服务(DNS/DHCP等)、计算机管理、用户服务、资源管理、桌面配置、应用系统支撑等功能。

活动目录是微软Windows Server中,负责架构中大型网路环境的集中式目录管理服务(Directory Services)。目录服务在微软平台上从Windows Server 2000开始引入,所以我们可以理解为活动目录是目录服务在微软平台的一种实现方式。当然目录服务在非微软平台上都有相应的实现。

Windows Server 2003的域环境与工作组环境最大的不同是,域内所有的计算机共享一个集中式的目录数据库(又称为活动目录数据库),它包含着整个域内的对象(用户账户、计算机账户、打印机、共享文件等)和安全信息等等,而活动目录负责目录数据库的添加,修改,更新和删除。所以我们要在Windows Server 2003上实现域环境,其实就是要安装活动目录。活动目录为我们实现了目录服务,提供对企业网络环境的集中式管理。比如在域环境中,只需要在活动目录中创建一次Bob账户,那么就可以在任意200台电脑中的一台上登录Bob,如果要为Bob账户更改密码,只需要在活动目录中更改一次就可以了,也就是说域用户信息保存在活动目录中。

ntds.dit是AD中的数据库文件,它被保存在域控制器中c:\windows\system32\ntds\ntds.dit的位置。

0x06 什么是域树、林和组织单元

活动目录的逻辑结构包裹:域(Domain)、域树(Domain Tree)、林(Forest)和组织单元(Organization Unit)。

  • 域是一种逻辑分组,准确的说是一种环境,域是安全的最小边界。域环境能对网络中的资源集中统一的管理,要想实现域环境,你必须要计算机中安装活动目录。 域树是由一组具有连续命名空间的域组成的。
  • 假如最上层的域名为contoso.com,这个域是这棵域树的根域(root domain),此根域下面
    有2个子域,分别是gsd.contoso.com和ged.contoso.com。我们可以看出他们的命名空间具有连续性。例如,域gsd.contoso.com的后缀名包含着上一层父域的域名contoso.com。其实子域gsd.contoso.com和ged.contoso.com还都可以有自己的子域。域树内的所有域共享一个Active Directory(活动目录),这个活动目录内的数据分散地存储在各个域内,且每一个域只存储该域内的数据,如该域内的用户账户,计算机账户等,Windows Server 2003将存储在各个域内的对象总称为Active Directory。
  • 林(Forest)是有一棵或多棵域树组成的,每棵域树独享连续的命名空间,不同域树之间没有命名空间的连续性。林中第一棵域树的根域也整个林的根域,同时也是林的名称。
  • 组织单元(OU)是一种容器,它里面可以包含对象(用户账户,计算机账户等),也可以包含其他的组织单元(OU)。

0x07 什么是SAM?

SAM(security account manager 安全账户管理器)。SAM是用来存储Windows操作系统密码的数据库文件,为了避免明文密码泄漏,SAM文件中保存的是明文密码经过一系列算法处理过的Hash值,被保存的Hash分为LM Hash、NTLMHash。在用户在本地或远程登陆系统时,会将Hash值与SAM文件中保存的Hash值进行对比。在后期的Windows系统中,SAM文件中被保存的密码Hash都被密钥SYSKEY加密。它存在c:/windows/system32/config/SAM,类似于linux里的/etc/shadow文件。我们可以通过删除/替换 SAM文件,通过PE 免密登录一些老版本系统的管理员账号。

获取Hash方法:

  1. 使用mimikatz等工具读取lsass.exe进程,获取Hash
  2. net-NTLM Hash可以使用Responder或Inveigh等工具获取

破解Hash:

  • LM Hash
    1. john –format=lm hash.txt
    2. hashcat -m 3000 -a 3 hash.txt
  • NTLM Hash
    1. john –format=nt hash.txt
    2. hashcat -m 1000 -a 3 hash.txt
  • Net-NTLMv1
    1. john –format=netntlm hash.txt
    2. hashcat -m 5500 -a 3 hash.txt
  • Net-NTLMv2
    1. john –format=netntlmv2 hash.txt
    2. hashcat -m 5600 -a 3 hash.txt

0x08 什么是Kerberos协议?

kerberos 是一种由MIT(麻省理工大学)提出的一种网络身份验证协议,它旨在通过使用加密技术为客户端/服务端应用程序提供强大的认证服务。

kerberos协议中主要由三个角色:

(1)访问服务的client(一下表述为Client或者用户)

(2)提供服务的server(一下表述为服务)

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

其中KDC服务默认会安装在一个域的域控中,而Client和Server为域内的用户或者是服务,如HTTP服务,SQL服务,远程桌面服务。在kerberos中Client是否有权限访问Server端的服务有KDC发放的票据决定。

协议过程:

  1. AS_REQ:Client向KDC发起AS_REQ请求内容为:明文形式的用户名、通过Client密码Hash 后加密的时间戳、ClientID、网络地址、加密类型等内容。

  2. AS_REP:当KDC接收到请求之后,通过AD获取该用户的信息。通过获取的密码信息生成一个秘钥对Authenticator进行解密。如果解密后的内容和已知的内容一致,则证明请求着提供的密码正确,即确定了登录者的真实身份。AS成功认证对方的身份之后,会先生成一个用于确保该用户和KDC之间通信安全的会话秘钥——Logon Session Key,并采用该用户密码派生的秘钥进行加密。KAS接着为该用户创建“认购权证”——TGT。TGT主要包含两方面的内容:用户相关信息和Logon Session Key,而整个TGT则通过KDC自己的密钥进行加密。最终,被不同密钥加密的Logon Session Key和TGT返回给客户端。

  3. TGS_REQ:Client凭借TGT票据向KDC发起针对特定服务的TGS_REQ请求,该请求主要包含如下的内容:客户端用户名、通过Logon Session Key加密的Authenticator、TGT和访问的服务器(其实是服务)名。

  4. TGS_REP:KDC使用 NTLM-hash进行解密获取Logon Session Key,然后通过Logon Session Key解密Authenticator,进而验证了对方的真实身份。TGS完成对客户端的认证之后,会生成一个用于确保客户端-服务器之间通信安全的会话秘钥——Service Session Key,该会话秘钥通过Logon Session Key进行加密。然后出售给客户端需要的入场券——ST。ST主要包含两方面的内容:客户端用户信息和Service Session Key,整个ST通过服务器密码派生的秘钥进行加密。最终两个被加密的Service Session Key和ST回复给客户端。

  5. AP_REQ:Client拿着TGS票据去请求服务,但是,服务端在接收到ST之后,如何确保它是通过TGS购买,而不是自己伪造的呢?这很好办,不要忘了ST是通过自己密码派生的秘钥进行加密的。具体的操作过程是这样的,除了ST之外,服务请求还附加一份通过Service Session Key加密的Authenticator。

  6. AP_REP:服务器在接收到请求之后,先通过自己密码派生的秘钥解密ST,并从中提取Service Session Key。然后通过提取出来的Service Session Key解密Authenticator,进而验证了客户端的真实身份。现在服务器已经可以确保客户端是它所声称的那么用户,客户端还没有确认它所访问的不是一个钓鱼服务呢。为了解决客户端对服务器的验证,服务要需要将解密后的Authenticator再次用Service Session Key进行加密,并发挥给客户端。客户端再用缓存的Service Session Key进行解密,如果和之前的内容完全一样,则可以证明自己正在访问的服务器和自己拥有相同的Service Session Key,而这个会话秘钥不为外人知晓。解出来之后服务器会得到一个账户的PAC,然后服务器会就拿着PAC去KDC那边问Client有没有访问权限,域控解密PAC。获取Client的sid,以及所在的组,再根据该服务的ACL,判断Client是否有访问服务的权限。

PAC的全称是Privilege Attribute Certificate(特权属证书)。不同的账号有不同的权限,PAC就是为了区别不同权限的一种方式。

TGT:认证票据(购票许可证)

TGS:票据发放服务

TGS tikcet:服务票据 后面简称ST(Service ticket,入场券)

0x09 什么是NTLM?

在允许的环境下,Kerberos是首选的认证方式。在这之前,Windows主要采用另一种认证协议——NTLM(NT Lan Manager)。NTLM使用在Windows NT和Windows 2000 Server(or later)工作组环境中(Kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。较之Kerberos,基于NTLM的认证过程要简单很多。NTLM采用一种质询/应答(Challenge/Response)消息交换模式。

  1. 首先,用户通过输入Windows帐号和密码登录客户端主机。在登录之前,客户端会缓存输入密码的哈希值,原始密码会被丢弃(“原始密码在任何情况下都不能被缓存”,这是一条基本的安全准则)。成功登录客户端Windows的用户如果试图访问服务器资源,需要向对方发送一个请求。该请求中包含一个以明文表示的用户名。

  2. 服务器接收到请求后,生成一个16位的随机数。这个随机数被称为Challenge或者Nonce。服务器在将该Challenge发送给客户端之前,该Challenge会先被保存起来。Challenge是以明文的形式发送的。

  3. 客户端在接收到服务器发回的Challenge后,用在步骤一中保存的密码哈希值对其加密,然后再将加密后的Challenge发送给服务器。

  4. 服务器接收到客户端发送回来的加密后的Challenge后,会向DC(Domain)发送针对客户端的验证请求。该请求主要包含以下三方面的内容:客户端用户名;客户端密码哈希值加密的Challenge和原始的Challenge。

  5. DC根据用户名获取该帐号的密码哈希值,对原始的Challenge进行加密。如果加密后的Challenge和服务器发送的一致,则意味着用户拥有正确的密码,验证通过,否则验证失败。DC将验证结果发给服务器,并最终反馈给客户端。

NTLM(New Technologies Lan Manager)HASH,通常是指SAM文件或ntds.dit文件中存储的HASH,生成流程是 :16进制编码 ==> unicode编码 ==> MD4加密。

NET-NTLM HASH 是在上面的NTLM认证过程中,从服务器端返回的一个hash值,里面存储了用户名、ip、加密算法,密码hash等。

对NTLM Hash可以通过这些方式获取:

  1. 导出SAM文件,配合SYSKEY利用mimikatz等工具获得
  2. 改注册表用minikatz读取lsass.exe进程获取(2012 r2和8.1及以上版本都禁止明文缓存到内存,而mimikatz是基于内存获取明文密码)
  3. NTLM哈希传递
  4. 对NET-NTLM HASH 可通过使用Responder和Inveigh等工具进行中间人攻击,伪造服务器端简历SMB连接获取。

0x10 什么是SMB?

SMB(Server Message Block)被称为服务器消息块,又叫网络文件共享系统(CIFS)。在Windows2000中,SMB除了基于NBT实现,还可以直接通过445端口实现。主要作用是使网络上的机器能够共享计算机文件、打印机、串行端口和通讯等资源。

CIFS消息一般使用NetBIOS或TCP协议发送,分别使用不同的端口139或445,当前倾向于使用445端口。

  • 直接运行在 TCP 上 port 445
  • 通过使用 NetBIOS API
    • 基于 UDP ports 137, 138 & TCP ports 137, 139
    • 基于一些传统协议,例如 NBF

0x11 什么是IPC?

IPC(Inter-Process Communication 进程间通信),用于进程之间的通信。

在NT/2000以后开始使用IPC$(Internet Process Connection),它是为了让进程间通信而开放的命名管道,通过验证账号和密码,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现在远程管理和查看计算机的共享资源。

IPC$(Internet Process Connection)可以被理解为一种“专用管道”,可以在连接双方建立一条安全的通道,实现对远程计算机的访问。Windows NT/2000/XP提供了IPC$功能的同时,在初次安装系统时还打开了默认共享,即所有的逻辑共享(C$,D$,E$……)和系统目录(ADMIN$)共享。所有这些共享的目的,都是为了方便管理员的管理,但在有意无意中,导致了系统安全性的隐患,我们在cmd命令行中输入 net share 就能查看共享。

我们常说的IPC$漏洞就是IPC的空连接,但是它原本的危害就很小,只能访问 everyone 权限的共享,访问小部分注册表等。而且在2000及之后的版本,更是设置了权限和禁用空连接。

IPC$是基于SMB和NetBIOS,所以使用的端口也是139/445,实际访问哪个端口由是否允许NetBIOS决定。

建立空会话:net use \\ip\ipc$ "" /user:"" (注:前边引号“”内为空密码,后边user:""引号中为空用户名)

删除IPC$连接:net use \\192.168.1.101\ipc$ /del

已建立连接后:

查看远程主机的共享资源:net view \\ip

得到远程主机的 NetBIOS 用户名列表(需要打开自己的 NBT ):nbtstat -A ip

将目标C盘映射到本地Z盘:net use z: \\192.168.1.101\c$

注意:不管我们是否建立IPC$成功,都会在日志中留下记录。

0x12 什么是NetBIOS?

NETBIOS(网络基本输入输出系统),严格讲不属于网络协议,NETBIOS是应用程序接口(API),早期使用NetBIOS Frames(NBF)协议进行运作,是一种非路由网络协议,位于传输层;后期NetBIOS over TCP/IP(缩写为NBT、NetBT)出现,使之可以连接到TCP/IP,是一种网络协议,位于会话层。基于NETBIOS协议广播获得计算机名称——解析为相应IP地址,WindowsNT以后的所有操作系统上均可用,不支持IPV6

NETBIOS提供三种服务

  • NetBIOS-NS(名称服务):为了启动会话和分发数据报,程序需要使用Name Server注册NETBIOS名称,可以告诉其他应用程序提供什么服务,默认监听UDP137端口,也可以使用TCP 137端口。
  • Datagram distribution service(数据报分发服务):无连接,负责错误检测和恢复,默认在UDP 138端口。
  • Session Server(会话服务):允许两台计算机建立连接,默认在TCP 139端口。

利用NETBIOS发现主机

  1. nbtstat(Windows自带命令)

    获取目标主机MAC地址nbtstat -A 192.168.100.200

  2. nbtscan

    扫描指定网段的主机名和网络开放共享nbtscan.exe 192.168.100.1/24

0x13 什么是WMI?

WMI(Windows管理规范)是Windows 2K/XP管理系统的核心;对于其他的Win32操作系统,WMI是一个有用的插件。用户可以使用 WMI 管理本地和远程计算机。它提供了一个访问操作系统构成单元的公共接口。其默认打开的是135端口。

WMI由一系列对Windows Driver Model的扩展组成,它通过仪器组件提供信息和通知,提供了一个操作系统的接口。在渗透测试过程中,攻击者往往使用脚本通过WMI接口完成对Windows操作系统的操作,远程WMI连接通过DCOM进行。例如:WMIC、Invoke-WmiCommand、Invoke-WMIMethod等。另一种方法是使用Windows远程管理(WinRM)。

0x14 什么是Windows Access Token?

windows访问令牌,包含了登陆会话的安全信息(比如各种SID)。当用户登陆时,系统创建一个访问令牌,然后以该用户身份运行的的所有进程都拥有该令牌的一个拷贝。该令牌唯一表示该用户、用户的组和用户的特权。有两种令牌:主令牌和模拟的令牌。主令牌是与进程相关的;模拟的令牌是与模拟令牌的线程相关的。当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清 除,只有在重启机器后才会清除 。

0x15 什么是SID?

SID是安全标识符,是标识用户、组和计算机帐户的唯一的号码。在第一次创建该帐户时,将给网络上的每一个帐户发布一个唯一的 SID。它用来跟踪每个账户,而且永远不会更改,即使我们更改了管理员的名字它也不会变。

0x16 虚拟安全域

虚拟安全域是指,把相同安全等级、相同安全需求的计算机,归入一个逻辑组内,对这个组配置访问控制策略。可在复杂的网络中进行简单方便的安全管理。通常安全域之间通过防火墙进行危险隔离,常见的划分如下。

在这里插入图片描述
DMZ区里是一些需要被外网访问到的服务器(比如Web服务器,邮件服务器等),而我们内网中的文件服务器和数据库服务器又是不想被外网访问到的,如果把它们都放在一个区域,制定相同的策略,会有很大的风险,所以用防火墙设备把它们分割开。内网部分又可以分为办公区和核心区,只有运维人员和IT主管能进入核心区。

0x17 什么是堡垒机?

堡垒机是一种针对 内部运维人员 的运维安全审计系统。它的主要的功能是就是限制登录入口,集中权限账号管理,对不合法命令进行命令阻断,记录运维人员的操作,出事了追责。它和防火墙直观上的区别就是,防火墙是用于外网和DMZ,DMZ和内网之间的,堡垒机是用于运维人员和内网之间的。

0x18 域中计算机的分类

域类的计算机分为域控制器、成员服务器、独立服务器和客户机四种。

域控制器:在第四点已经说了;
成员服务器:加入了域,但是没有安装AD,例如Web服务器、邮件服务器、防火墙这些;
独立服务器:既没有加入域也没有安装AD,可有可无。
客户机:使用资源的机器。

0x19 域内权限

域相关内置组分为域本地组、全局组、通用组。组的概念在上面说过了。

域本地组:域本地组的成员可以来自森林中的任何域,用来规定访问同一个域内的资源权限,存储在DC中,不可嵌套在其他组下;

全局组:全局组的成员来自自己的域(必须同一个域),用来访问任意域中的资源,存储在DC中,可嵌套在其他组中;

通用组:通用组成员来自森林中的任何域,用来访问任意域中的资源,存储在GC(全局编录)中。

A-G-DL-P 策略:
先将A(Account用户账号)添加到G(Global Group全局组)中,再将其添加到DL(Domain Local Group域本地组)中,最后授予P(Permission 资源许可权限)。

一些重要的域本地组:
管理员组(Administratos):权力值max;

远程登录组(Remote Desktop Users):具有远程登录权限;

打印机操作员组(Print Operators):管打印机,并且可以在登录登录和关闭域控;

账号操作员组(Account Operators):创建和管理域内的用户和组,可登录域控,默认没有成员;

服务器操作员组(Server Operators):管理域服务器,可管理共享目录、打印机、备份、关闭域控等,默认没有成员;

备份操作员组(Backup Operators):执行备份和还原操作,可登录域控和关闭域控,默认没有成员。

一些重要的全局组、通用组:
域管理员组(Domain Admins):该组成员默认会被添加到每台域成员计算机的管理员组,所以也继承了管理员组的权限;

企业系统管理员组(Enterprise Admins):是域森林根域中的一个组,该组成员在域森林的每个域内都是管理员组成员;

架构管理员组(Schema Admins):是域森林根域中的一个组,可以修改AD和域森林的模式;

域用户组(Domain Users):所有域成员所在的组。


域渗透基本概念详解

posted @ 2020-11-01 16:16  tomyyyyy  阅读(1107)  评论(0编辑  收藏  举报