文章参考自三好学生域渗透系列文章

看了内网渗透第五篇文章,发现如果想要真正了解PTT,PTH攻击流程,还需要了解windows的认证机制,包括域内的kerberos协议。

windows认证机制

在域渗透中,横向移动最重要是对windows认证协议的理解

首先介绍一下windows密码的Hash:

早期SMB协议在网络上传输明文口令,后来出现"LAN Manager Challenge/Response"验证机制,简称LM,由于容易被破解,微软提出了windows NT挑战/响应机制,称之为NTLM。现在已经有了更新的NTLM v2以及Kerberos验证体系。windows加密过的密码口令,我们称之为hash,windows的系统密码hash默认情况下一般有两部分组成:LM-hash,NTLM-hash 。

NTML hash:

在windows系统中比较常见的是从系统导出来的NTLM hash,通过Hashcat能够破解出明文密码。NTLM hash通常是指windows系统下Securtiy Account Manager中保存的用户密码hash。在渗透测试中,通常可从windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的hash,通过mimikatz读取lsass.exe进程能获得已登陆用户的NTLM hash。

NET-NTLM hash:

通常是指网络环境下NTLM认证中的hash

NTLM认证采用质询/应答(Challenge/Response)的消息交换模式,流程如下:

  1. 客户端向服务器发送一个请求,请求中包含明文的登录用户名。服务器会提前存储登录用户名和对应的密码hash

  2. 服务器接收到请求后,生成一个16位的随机数(这个随机数被称为Challenge),明文发送回客户端。使用存储的登录用户密码hash加密Challenge,获得Challenge1

  3. 客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,获得Challenge2(这个结果被称为response),将response发送给服务器

  4. 服务器接收客户端加密后的response,比较Challenge1和response,如果相同,验证成功

在以上流程中,登录用户的密码hash即NTLM hash,response中包含Net-NTLM hash

更多NTLM认证的资料可参考:

http://davenport.sourceforge.net/ntlm.html

在NTLM认证中,NTLM响应分为NTLM v1,NTLMv2,NTLM session v2三种协议,不同协议使用不同格式的Challenge和加密算法

所以也就存在不同协议的Net-NTLM hash,即Net-NTLM v1 hash,Net-NTLM v2 hash

NTLM认证

在工作组中使用的ntlm认证,如果在域中,则使用Kerberos的认证方式

工作组中:

  • 客户端发起认证请求
  • 服务端收到认证请求,向客户端发送随机数(chanlleng/挑战)
  • 客户端使用NTLM Hash打乱该随机数,生成Net-NTLM Hash,发送回服务端 (这里会造成pth攻击)

域环境中:

比起工作组,域中多了一个域控的角色

  • 首先在client输入username,password和domain,然后client会把password hash后的值先缓存到本地
  • 之后,client把username的明文发送给server(DC)
  • DC会生成一个16字节的随机数,即challenge(挑战码),再传回给client
  • 当client收到challenge以后,会先复制一份出来,然后和缓存中的密码hash再一同混合hash一次,混合后的值称为response,之后client再将challenge,response及username一并都传给server
  • server端在收到client传过来的这三个值以后会把它们都转发给DC
  • 当DC接到过来的这三个值的以后,会根据username到域控的账号数据库(ntds.dit)里面找到该username对应的hash,然后把这个hash拿出来和传过来的challenge值再混合hash
  • 将上一步混合后的hash值跟传来的response进行比较,相同则认证成功,反之,则失败,当然,如果是本地登录,所有验证肯定也全部都直接在本地进行了

Kerberos协议

在域环境中,Kerberos协议被用来作身份认证,下图是详细的认证过程:

这里仅介绍几个名词:

  • KDC(Key Distribution Center):密钥分发中心里面包含两个服务:AS和TGS
  • AS(Authentication Server):身份认证服务
  • TGS(Ticket Granting Server):票据授予服务
  • TGT(Ticket Granting Ticket):由身份认证服务授予的票据,用于身份认证,存储在内存,默认有效期为10小时
  • Pass The Ticket:如果我们能够拿到用户的TGT,并将其导入到内存,就可以冒充该用户获得其访问权限

详细认证过程,分为三个步骤:

第一:从AS服务器中获取TGT票据
用户在客户端输入账号和密码之后,会对密码进行hash处理,作为user-secret-key
. 客户端将用户名发送给AS服务器申请服务,在AS服务器中会对用户名进行验证,在AS服务器本地数据库中查询到该用户名的密码,并使用hash生成user-secrect-key.
. AS服务器向用户发送两样东西:
) Client/TGS会话密钥,使用user-secrect-key进行加密
) TGT,包含TGS会话密钥,用户信息,时间戳,TGT有效期。使用TGS密钥进行加密
. 用户接收到消息之后,回使用本地的user-secret-key对消息1)进行解密,如果解密成功,说明用户提供的凭证是正确的,此时用户得到了加密后的TGT。

第二:从TGS服务器中获取访问权限
. 客户端向TGS服务器发送信息:
) 第一步骤中的TGT
) 认证信息(认证符(Authenticator)),包含用户id以及时间戳,通过TGS会话密钥进行加密。
. TGS服务器收到消息之后,会使用TGS密钥对消息1)进行解密,获取到TGS会话密钥,进而对消息2)进行解密,在对用户id以及时间戳进行认证,如果认证成功,向客户端发送消息:
) client-server-ticket(包含SS会话密钥,用户名信息以及时间戳),使用ss密钥进行加密
) ss会话密钥使用TGS会话密钥进行加密
. 客户端收到信息之后会对消息2)进行解密,获得ss会话密钥。

第三:访问服务
. 客户端向ss服务器发送以下消息:
)第二步骤中的client-server-ticket
)新的Authenticator,包含用户信息,时间戳。通过SS会话密钥进行加密
. SS服务器收到消息之后,会使用ss密钥对消息1)进行解密,解密之后使用ss会话密钥对消息2)解密,解密成功之后会得到authenticator,认证之后,发送:
)新时间戳,Client发送的时间戳加1,通过ss会话密钥进行加密
. 客户端收到时间戳之后,解密确认,成功之后发送服务请求
. ss服务器收到之后提供服务。

到这里,windows基本认证步骤完成了,横向移动的手法请移步我的第五篇文章

7.内网渗透之windows认证机制的更多相关文章

  1. 内网渗透之Windows认证(二)

    title: 内网渗透之Windows认证(二) categories: 内网渗透 id: 6 key: 域渗透基础 description: Windows认证协议 abbrlink: d6b7 d ...

  2. 内网渗透 - 提权 - Windows

    MS提权 MS16- MS16- 提权框架 Sherlock 信息收集 ifconfig -a cat /etc/hosts arp -a route -n cat /proc/net/* ping扫 ...

  3. 5.内网渗透之PTH&PTT&PTK

    ---------------------------------------------- 本文参考自三好学生-域渗透系列文章 内网渗透之PTH&PTT&PTK PTH(pass-t ...

  4. Linux内网渗透

    Linux虽然没有域环境,但是当我们拿到一台Linux 系统权限,难道只进行一下提权,捕获一下敏感信息就结束了吗?显然不只是这样的.本片文章将从拿到一个Linux shell开始,介绍Linux内网渗 ...

  5. 3.内网渗透之reGeorg+Proxifier

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxIAAAE2CAIAAAB6BDOVAAAgAElEQVR4Aey9Z5Aex3X327MRGVzkRH ...

  6. 安全学习概览——恶意软件分析、web渗透、漏洞利用和挖掘、内网渗透、IoT安全分析、区块链、黑灰产对抗

    1 基础知识1.1 网络熟悉常见网络协议:https://www.ietf.org/standards/rfcs/1.2 操作系统1.3 编程2 恶意软件分析2.1 分类2.1.1 木马2.1.2 B ...

  7. cmseasy&内网渗透 Writeup

    某CTF内网渗透 题目:www.whalwl.site:8021 目录 cmseasy 内网横向渗透 cmseasy 简单看一下网站架构 Apache/2.4.7 (Ubuntu) PHP/5.5.9 ...

  8. 【CTF】msf和impacket联合拿域控内网渗透-拿域控

    前言 掌控安全里面的靶场内网渗透,练练手! 内网渗透拿域控 环境:http://afsgr16-b1ferw.aqlab.cn/?id=1 1.进去一看,典型的sql注入 2.测试了一下,可以爆库,也 ...

  9. 内网渗透测试思路-FREEBUF

    (在拿到webshell的时候,想办法获取系统信息拿到系统权限) 一.通过常规web渗透,已经拿到webshell.那么接下来作重要的就是探测系统信息,提权,针对windows想办法开启远程桌面连接, ...

随机推荐

  1. Spring Boot系列—(一)入门

    前言 因为项目组需要进行微服务改造,而微服务开发中需要以Spring Boot为基础.因此需要先弄懂SpringBoot. 我们先来看看SpringBoot的背景由来,SpringBoot是什么,一个 ...

  2. return super(ParamValueInline,self).formfield_for_foreignkey(db_field,request,**kwargs)自己返回自己的父类

    作者:刘强胜链接:https://www.zhihu.com/question/30361435/answer/83940591来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  3. ncdu 查找linux下最占空间的文件(交互式查询)

    安装 wget -c https://dev.yorhel.nl/download/ncdu-1.11.tar.gz tar xzvf ncdu-1.11.tar.gz cd ncdu-1.11 ./ ...

  4. Linux修改数据库的访问权限

    以下方法可以帮助你解决这个问题了,下面的语句功能是,建立一个用户为monitor密码admin权限为和root一样.允许任意主机连接.这样你可以方便进行在本地远程操作数据库了. CREATE USER ...

  5. Oracle 13c OEM 安装手册

    1       安装准备工作 以下包已Redhat 为准,其他版的操作系统以官方手册为准. 1.1         Oracle Management Service 依赖如下包 glibc-comm ...

  6. 使用resteasy作为dubbox消费者

    dubbox服务提供者是REST风格的,消费者可能是从dubbox过来的,也可能是从第三方外部系统过来的.后者的话我们没得选,只能以服务提供者直连,服务治理平台和监控中心手再长,也管不到别人的地盘.但 ...

  7. layui导航的使用

    在项目开发的时候,需要后台的系统好看点,左边的导航需要设计为多级的,而且要点击当前的链接页面,刷新后要实现选中状态 学习源头:http://www.layui.com/doc/element/nav. ...

  8. Vue.js:路由

    ylbtech-Vue.js:路由 1.返回顶部 1. Vue.js 路由 本章节我们将为大家介绍 Vue.js 路由. Vue.js 路由允许我们通过不同的 URL 访问不同的内容. 通过 Vue. ...

  9. PHP实现日志写入log.txt

    引言:有时候调试,看不到效果,需要通过写入文件来实现. 案例: <?php $myfile = fopen("log.txt", "a+") or die ...

  10. js判断是否是用微信浏览器打开

    有时候微信开发,需要根据使用的浏览器不同,来进行不同的处理. 下面的代码,可以判断是否使用的是微信浏览器. <!DOCTYPE HTML> <html lang="en&q ...