内网根底概念
本文多为概念性知识,旨在为内网浸透铺一层概念之路,期望能对刚开端了解内网的师傅有所协助。
内网的概念
究竟什么是内网呢?
内网也指局域网,是指在某一区域由多台核算机互连而成的核算机组。
《内网浸透攻防》中如是说。
作业组
在一个大型单位中,或许有成百上千台核算机,他们彼此衔接组成局域网,假如不进行分组,那么网络联系就会杂乱不堪,此刻 作业组 的呈现,成功解决了这个问题。它将局域网中不同的核算机按功用别离列入不同的作业组,使得网络更有序。
域
域是一个有安全鸿沟的核算机调集(安全鸿沟是指在两个域中,一个域中的用户无法拜访另一个域中的资源),能够简略地把域理解为升级版的作业组。用户要想拜访域内的资源,有必要以合法的身份登录域,而用户对域内的资源具有什么样的权限,还取决于用户在域内的身份。
域内涉及了多个概念,例如 域操控器、单域、域树 等,接下来顺次介绍
域操控器
DC(Domain Controller) ,域操控器是域中一台相似办理服务器的主机,它具有办理域内其他主机的核算机,它担任一切本域内的核算和用户的验证作业,它是整个域的通信纽带,域内一切用来验证身份的账号和暗码哈希都存在域操控器中。所以,内网浸透的终究目标常常便是为了攻下域控服务器,这样就等同于操控整个域内的核算机。
单域
单域,便是指只要一个域环境的网络,这儿需求说明的是,一般在一个域中,至少会有两台域服务器,一台作为DC,另一台作为备份DC
父域和子域
当存在多个域时,第一个域称为父域,各分部的域称为该域的子域。例如,xx公司总部设在北京,而在杭州,上海等地设有分公司,他们进行信息交互这种就需求用到父域和子域,此刻,北京的这个便是父域,而处于杭州、上海的域便是分域。这样有什么优点呢
减小了域之间信息交互的压力(域内信息交互不会紧缩,域间信息交互可紧缩)
不同的子域能够指定特定的安全战略
父子域中域名运用一个.
表明一个层次,放在域名终究的子域称为第一流子域或一级子域,它前面的子域称为二级域 。
现在,比如父域是 quan9i.top ,那么 abc.quan9i.top 便是一级子域,cn.abc.quan9i.top
便是二级域
域树
域树是多个域通过树立信赖联系组成的调集。当两个域内需求彼此拜访时,就需求树立信赖联系。树立信赖联系后,能够将父子域衔接成树状格局,此刻就能够完成彼此拜访。
域森林
域森林是指多个 域树
通过树立信赖联系组成的调集。例如,当时有域树abc.net
和域树abc.com
,两个本来是无法完成彼此拜访的,而当两个域树树立信赖联系后,它们能够组成一个调集形式(域森林),完成彼此拜访。
域名服务器
域名服务器(Domain Name Server,简称DNS) 是指用于完成域名和与之对应的IP地址转换的服务器。简略的说,便是 完成域名到IP地址的转换。同时,域的姓名便是DNS的姓名,之所以呈现这个情况是因为域中核算机运用DNS来定位DC、服务器等核算机。
活动目录
**活动目录(Active Directory,简称AD)**是指域环境中供给目录服务的组件。
它用于 存储有关网络目标(用户、组、核算机、共享资源等)的信息 ,目录服务是指协助用户快速、准确地寻觅其所需求的服务。活动目录完成了目录服务,为企业供给了网络环境的会集式办理机制。
活动目录的逻辑结构包括 安排单元(OU)、域、域树、域森林 ,那什么是逻辑结构呢,它的定义是 不考虑被办理目标的详细位置的安排框架 。
活动目录主要供给以下功用:
1、账号会集办理 : 一切账号均存储在服务器中,以便履行命令和重置暗码等
2、软件会集办理:共同推送软件、装置打印机等。运用软件发布战略分布软件,能够让用户自由选择需求装置的软件
3、环境会集办理:共同客户端桌面、IE、TCP/IP协议等设置
4、增强安全性:共同布置杀毒软件和病毒扫描使命、会集办理用户的核算机权限、共同制定暗码战略等。
5、更可靠、更短的宕机时刻:例如,运用活动目录操控用户拜访权限,运用群集、负载均衡等技能对文件服务器进行容灾设置
域控与活动目录的区别
活动目录数据库,即具有层次结构的数据库,简称为 AD 库。
要完成域环境,其实便是要装置AD库。假如内网中的一台核算机上装置了AD,那它就变成了 DC(用于存储活动目录数据库的核算机,即域控)
安全域的区分
在一个用路由器连的内网中,能够将网络区分为三个区域: 内网(安全级别最高)、DMZ(安全级别中等)、外网(安全级别最低) ,接下来对三个区域别离进行简略介绍。
内网
内网:其具有两个区:
1、核心区(存储企业最重要的数据、文档等信息资产,往往只要很少的主机能拜访)
2、作业区(公司员工日常的作业区,一般能够拜访DMZ,部分主机可拜访核心区)
DMZ
DMZ(Demilitarized Zone,称为隔离区) ,其是一个非安全体系与安全体系之间的缓冲区,也便是说, DMZ 一般坐落内网和外部网络之间。这儿主要用于对外供给服务,能够在此放置一些有必要揭露的服务器设备,例如 企业Web服务器、FTP服务器和论坛服务器等
外网
Internet
,安全级别最低。
三者联系
在装备一个具有DMZ的网络时,一般需求定义如下拜访操控战略,以完成其屏障功用。
1、内网能够拜访外网:内网用户需求自由地拜访外网
2、内网能够拜访DMZ:此战略使内网用户能够运用或许办理DMZ中的服务器
3、外网不能拜访内网:内网中存储的是公司内部数据,这些数据一般是不答应外网用户拜访的(假如要拜访,能够通过VPN方法进行)
4、外网能够拜访DMZ:因为DMZ中的服务器需求为外界供给服务,所以外网有必要能够拜访DMZ
5、DMZ不能拜访内网:假如不履行此战略,当攻击者攻陷DMZ时,内网将无法遭到保护
6、DMZ不能拜访外网:此战略也有例外。例如,在DMZ放置了邮件服务器,就要运转拜访外网,否则邮件服务器无法正常作业
内网信息收集
网络信息
ipconfig /all 检查网络装备信息
netstat -ano 查询端口衔接情况
route print 查询路由表
**arp -a **检查arp缓存
体系信息
systeminfo 查询体系信息以及补丁列表
**echo %PROCESSOR_ARCHITECTURE%**查询体系体系结构
域相关
net view /domain 查找域
net group /domain 用于获取域用户组信息
net user /domain 用于获取一切域用户列表
net user xxx /domain 用于查询指定域用户详细信息
net config workstation 检查当时作业域
net group “domain controllers” /domain 查询域控
wmic useraccount get /all 获取域内用户详细信息
dsquery user 查询存在的用户
其他
tasklist 查询进程列表
netsh firewall show config 检查防火墙装备
schtasks /query /fo LIST /v 查询守时使命
信赖协议
运转 Windows Server 2008 或 Windows Server 2008 R2 的域控运用以下 两个协议之一对用户和应用程序进行身份验证 :**Kerberos 版别 5 (V5)**协议或 NTLM(New Technology LAN Manager) 。
NTLM是Windows NT早期的信赖协议,现在的Server2000、2003等服务器,都是默许采用的Kerberos V5,只要在业务中恣意台核算器不支持Kerberos时,才会运用NTLM。
Kerberos协议
Kerberos
是一种网络身份验证协议。它旨在运用密钥加密技能为客户端/服务端应用程序供给强身份验证。
这个协议主要涉及三个人物
1、拜访服务的客户端(Client): Kerberos客户端代表需求拜访资源的用户进行操作的应用程序,例如打开文件、查询数据库等。每个Kerberos客户端在拜访资源前都会恳求身份验证。
2、供给服务的服务端(Server): 域内供给服务的服务端,服务都有唯一的服务主体名称(SPN)
3、供给认证服务的密钥分发中心(KDC,Key Distribution Center):
KDC是一种网络服务,它向活动目录域内的用户和核算机供给会话收据和暂时会话密钥,其服务账号为krbtgt(创建活动目录时体系主动生成的用户,其暗码由体系随机生成,无法正常登录主机)。KDC运转在每个域操控器上。
他们的联系如下图所示
他们的联系即 Client 要拜访 Server ,则有必要需求 收据 ,而 收据 则是由 KDC 供给
针对 KDC ,这儿需求进行简略说明
KDC 一般装置在 域控中 , KDC 详细分为两部分
Authentication Server 和 Ticket Granting Server
前者的效果是用于验证 Client 的身份(相似咱们刷脸验证,承认与身份证上的人共同),假如验证通过,就会颁布 TGT(Ticket Granting Ticket)收据 给 Client 。然后者的效果是通过 Authentication Server 颁布的 TGT收据 交换 Server服务端 的 Service Ticket 收据(相似电影票二维码扫码取票操作)。
kerberos认证进程
首要,在开端之前对稍后需求用到的名词进行简略介绍
DC(Domain Controller):域操控器。
KDC(Key Distribution Center):秘钥分发中心,默许装置在域控里,包括AS和TGS。
AS(Authentication Service):身份验证服务,用于KDC对Client认证。
TGS(Ticket Grantng Service):收据颁发服务,用于KDC向Client和Server分发Session Key(暂时秘钥)。
TGT(Ticket Granting Ticket):认证收据,用于验证Client的身份。
ST(Server Ticket):服务收据。
AD(Active Directory):活动目录,用于存储用户、用户组、域相关的信息。
Client:客户端,也能够理解为用户。
Server:服务端,能够是某台核算机,也能够是某个域内服务。
krbtgt用户:创建域控时由体系主动生成的用户。
进程一
Client通过As验证,获取TGT
当Client
要拜访Server
时,需求AS
来进行身份认证,Client
输入账密,并向KDC
发送一个AS_REQ
(由运用了Client
的NTLM- Hash
加密的时刻戳、Client
信息以及Server
信息等组成)。
As
收到服务端发送的AS_REQ
,首要向AD
查询是否存在此用户,存在的话则用此用户的NTLM- Hash
来进行解密,假如解密成功,且解密后得到的时刻戳与当时的时刻相差在5分钟内则认为其认证成功。
这儿之所以约束5分钟,是为了确保AS_REQ的安全,在传输它的进程中,或许会被黑客截获,假如黑客想进行重放攻击,就需求花费一守时刻,所以五分钟就起到了包括AS_REQ的效果
这儿存在两个验证
1、Client对As的验证
2、As怎么判别此Client为真
第一个,怎么判别As
为真,运用Client
的NTLM-Hash
进行加密,假如As
为真则能够正常解密AS_REQ
。
第二个,怎么验证Client
为真,假如Client
为真,则As
用Client
的NTLM-Hash
是能够正确解密出来的。
接下来AS
会生成一个AS_REP
,AS_REP
由两部分组成
1、As生成的暂时密钥Session-key,然后运用Client的NTLM-Hash加密,用于Client和KDC进行安全通信
2、TGT,内容由运用特定用户krbtgt的NTLM-Hash加密的Sessions-key、时刻戳以及部分用户信息组成
进程二
Client与TGS认证,获取ST服务收据
当Client
收到了As
的AS_REQ
时,会运用自己的NTLM-Hash
,将被加密过的暂时密钥Session- key
进行解密,然后将其保存在本地,假如需求拜访Server
时就能够构成TGS_REQ
(包括Session- key
、加密的时刻戳以及服务端信息、krbtgt
用户NTLM-Hash
加密的TGT
等)提交给TGS,从而获取对应的ST
当TGS收到TGS_REQ
后,首要对Krbtgt
用户NTLM-Hash
加密的TGT
进行解密,意图是得到Sessions- key
、时刻戳以及服务端信息等。与进程一相似,它有一个时刻校验机制,假如时刻戳和解密时刻相差太久则停止验证,同时TGS
会依据TGT
里的Client
信息和当时信息进行比对,判别是否为同一人,判别无误后会去判别此Client
是否具有拜访Server
的权限,若有则返回TGS_REP
,它由两部分组成
1、TGS生成的新Session-key,然后再运用第一个进程中As生成的Session-key进行加密。
2、运用Server的NTLM-Hash加密的Sessions-key(由TGS生成的)、时刻戳以及用户信息,此即ST服务收据
在此进程中存在一个验证
1、TGS怎么判别Client为真
这儿一开端解密的是Session-key
(As生成的),而这个Session-key
处了Dc
就只要Client
知道。
进程三
Cleint
收到了TGS_REP
,得到加密的Sessions-key
,接下来操作同上,运用刚刚存储的Sessions- key
(As生成的)对Sessions-key
(TGS生成的)进行解密,得到未加密的Session-key
(TGS生成的),然后存储在本地。
当Client
需求拜访Server
时,Client
会产生AP_REQ
AP_REQ
由Sessions-key
(TGS生成的)、时刻戳、服务端信息等内容组成,然后再把ST服务收据
一同发送给Server
。
Server
收到AP_REQ
运用自己的NTLM-Hash
对ST服务收据
进行解密,拿到Sessions- key
(TGS生成的)、时刻戳、服务端信息等数据,然后依据ST
内的时刻戳与解密不时刻作比照,假如时刻未超过8小时则验证成功,反之失败。然后Server
问询DC
该用户是否有拜访权限,假如有则答应Client
拜访Server
图示如下(摘自先知社区,不过好像是来源于csdn的,但未在csdn中找到)
NTLM协议
在学习 NTLM
协议前,首要需求了解两个基本概念,SSPI
和SSP
SSPI
**SSPI(Security Service Provider Interface,安全服务供给接口)**是Windows定义的一套接口,该接口定义了与安全有关的功用函数,包括但不限于:
身份验证机制
为其他协议供给的 Session Securtiy机制
但SSPI
仅仅只是定义了一套接口函数,并未完成详细内容。
SSP
**SSP(Security Serivice
Provider,安全服务供给者)**是SSPI
的完成者。微软自己完成了很多SSP
,用于供给安全功用,包括但不限于:
NTLM SSP:Windows NT 3.51中引进(msv1_0.dll),为Windows 2000之前的客户端-服务器域和非域身份验证供给NTLM质询/呼应身份验证
Kerberos SSP:WIndows 2000 中引进, Windows Vista 中更新为支持AES,为Windows 2000 及更高版别中首选的客户端-服务器域供给彼此身份验证
Digest SSP: 在Windows和非Windows体系间供给HTTP和SASL身份验证的质询/呼应
Negotiate SSP: 默许选择Kerberos,假如不可选则选择NTLM协议。供给单点登录功用
联系图如下
LM Hash
LM hash 本质是DES加密
,目前Windows已将LM Hash
禁用(从 Windows Vista 和 Windows
Server 2008开端,原因是简单被破解)。LM Hash
明文暗码被限定在14
位以内,也便是说,若要停止运用LM Hash
,将用户暗码设置为14位以上即可。
LM Hash 的加密流程如下,这儿以P@ss1234
为例
1、将用户的明文口令转换为大写,并转换为十六进制字符串
p@ss1234 -> P@SS1234 -> 5040535331323334
2、假如转换后的十六进制字符串长度不足14Byte(长度28),则用0来补全
5040535331323334 -> 5040535331323334000000000000
3、 将14B分为两组,每组7B,然后转换为二进制数据,每组二进制数据长度为56bit
4、将每组二进制数据按7bit为一组,分为8组,每组结尾加0,再转换为十六进制,此刻每组也就成了8B长度的十六进制数据了
5、将生成的两组8B的十六进制数据,别离作为DES加密秘钥对字符串"KGS!@#S%"进行加密。然后将密文进行拼接,即可得到终究的LM Hash值
NTLM Hash加密算法
NTLM Hash 算法是微软为了在提高安全性的同时确保兼容性而规划的散列加密算法,它是根据MD4加密算法进行加密的。
其加密流程如下,这儿仍以明文暗码P@ss1234
为例
1、将用户暗码转换为十六进制格局
P@ss1234 -> 5040535331323334
2、将ASCII编码的十六进制格局的字符串转为Unicode编码
5040535331323334 -> 50004000730073003100320033003400
3、对Unicode编码的十六进制字符串进行标准MD4单向Hash加密
50004000730073003100320033003400 -> 74520a4ec2626e3638066146a0d5ceae
上述进程亦可用 Python 完成,代码如下
import hashlib,binascii;
key = "P@ss1234"
NTLM_Hash = binascii.hexlify(hashlib.new("md4",key.encode("utf-16le")).digest()).decode("utf-8")
#binascii.hexlify():返回二进制数据的十六进制表明。 每个字节被转换成相应的 2位十六进制表明形式。
#hashlib.new()是一个通用结构函数,它将所需算法的字符串 name 作为其第一个参数。 它还答应拜访上面列出的哈希值以及您的 OpenSSL 库或许供给的任何其他算法。
#digest():返回摘要,作为二进制数据字符串值
print(NTLM_Hash)
Windows体系存储的NTLM Hash
在Windows
环境中,用户的暗码通过NTLM Hash
加密后存储在C:\Windows\system32\config\SAM
文件中。它的认证进程如下所示:
在用户输入暗码进行本地认证进程中,一切操作都是于本地进行的,体系将暗码转换为NTLM Hash
,然后与SAM
文件中的NTLM Hash
进行比较,相同则暗码正确。
接下来说一点其他的,mimikatz
是怎么抓取暗码的呢。这儿也牵扯到这个,详细如下:
当用户刊出、重启、锁屏后,操作体系就会让winlogon.exe
显现登录界面,也便是输入框。当winlogon.exe
接收输入后,将暗码交给lsass.exe
进程,lsass.exe
进程中会存一份明文暗码,咱们运用mimikatz
便是从这儿(lsass.exe
进程)抓取明文暗码或许Hash
暗码。
NTLM协议认证
NTLM协议 是根据一种 质询/呼应 的验证机制,其由三种类型音讯组成
Type 1 (协商)
Type 2 (质询)
Type 3 (认证)
作业组环境的NTLM认证流程如下图所示
详细认证进程如下
1、当客户端需求拜访服务器的某个服务时,就需求进行身份验证。此刻客户端输入用户名和暗码进行验证后,就会在本地缓存一份服务器暗码的NTLM Hash值,然后客户端向服务端发送一个恳求(包括服务器用户名和其他一些需求协商的音讯),此进程为Type 1 协商音讯
2、服务端收到客户端音讯后,读取服务端所支持的内容,取出部分信息传入NTLM SSP(部分信息指的是自己能承受的服务内容、加密等级、安全服务等),得到Type 2 质询音讯,并将此发回给客户端(音讯包括16位的随机Challenge质询值,服务端也会有缓存)
3、客户端收到Type 2音讯后,读取服务端内容并取出Challenge,然后用进程1中本地缓存的NTLM Hash对Challenge进行加密得到Response音讯。终究将Response、用户名以及其他信息封装到NTLMSSP_AUTH音讯中(Type 3认证音讯),发往服务端
4、服务端收到验证音讯后,取出Net-NTLM Hash,然后用自己暗码的NTLM Hash对进程2中的Challenge值进行加密,得到自己的Net-NTLM Hash,比较两者是否持平,假如持平,则说明暗码正确,反之则错误,认证失败。
参考文献
《域浸透攻防攻略》
《内网安全攻防:浸透测验实战攻略》