AD(活动目录) DC(指域控制器)

相当于一个组件具有以下功能

  • 服务器及客户端计算机管理
  • 用户服务
  • 资源管理
  • 桌面配置
  • 应用系统支撑

攻击AD

  • 利用常规Web渗透进行横向渗透
  • 常规Dump Hash后进行PTH,循环操作,直到获取Domain Admins
  • 利用SYSVOL和组策略首选项(GPP)
  • MS14-068
  • 利用VSS卷影副本拷贝ntds.dit
  • 利用Responder等工具进行ARP
  • Netbios和LLMNR命名投毒
  • kerberoast(破解Ticket)
  • MS17-010

Kerberos协议

用来认证的一种协议
有以下四种

协议内容

  • AS:认证服务器
  • KDC:密钥分发中心
  • TGT:票据授权票据,票据的票据
  • TGS:票据授权服务器

认证过程

  • 用户先向KDC(是一种认证服务一般安装在域控中)发送请求验证自己是域内的机器
  • KDC确认用户并向用户发送凭证
  • 用户向KDC发送网络服务访问请求凭证
  • KDC给用户发送网络服务访问凭证
  • 用户使用网络服务凭证访问相应的网络服务
  • 网络服务器确认网络服务凭证有效并向用户提供网络服务

有两种攻击方式

黄金票据

这种是通过直接伪造身份认证直接跳过3,4认证,相当于直接伪造TGT
每个用户的Ticket都是由krbtgt的密码Hash来生成的,那么,我们如果拿到了krbtgt的密码Hash,其实就可以伪造任意用户的TICKET
不过需要和dc交互

1、域名称            
2、域的SID值
3、域的KRBTGT账户密码HASH
4、伪造用户名,可以是任意的

白银票据

这种是通过直接伪造服务认证直接跳过5认证,因为在TGT已经在PAC里限定了给Client授权的服务(通过SID的值),所以银票只能访问指定服务

1.域名称
2.域的SID值
3.域中的Server服务器账户的NTLM-Hash
4.伪造的用户名,可以是任意用户名.
5.目标服务器上面的kerberos服务

NTLM协议

域渗透涉及到的技术,如哈希传递(PTH)票据传递(PTT)委派攻击等,都是基于域环境下的认证机制来实现的,这也是为什么要了解Windows认证机制的原因之一
NTML分为两种认证一种是本地认证一种是网络认证

本地认证

系统收到输入的密码进行如下操作

用户密码->HEX编码->Unicode编码->MD4

然后与sam数据库(%SystemRoot%\system32\config\sam)中该用户的哈希比对,匹配则登陆成功,不匹配则登陆失败
本地认证中用来处理用户输入密码的进程即lsass.exe,密码会在这个进程中明文保存,供该进程将密码计算成NTLM Hash与sam进行比对
在渗透测试中,通常可从Windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的hash,通过Mimikatz读取lsass.exe进程能获得已登录用户的NTLM hash

网络认证

Net NTLM的认证过程分为三步,也叫挑战响应机制:

  1. 协商
  2. 挑战
  3. 验证

协商:主要用于确认双方协议版本、加密等级等。
挑战:服务器在收到客户端的协商消息之后, 会读取其中的内容,并从中选择出自己所能接受的服务内容,加密等级,安全服务等等。 并生成一个随机数challenge, 然后生成challenge消息返回给客户端。该消息就是挑战/响应认证机制的主要功能体现。
认证:验证主要是在挑战完成后,验证结果,是认证的最后一步。详细过程如下:

第一步,输入密码,然后LSASS会把密码的NTLM Hash后的值先存储到本地。
第二步,客户端把用户名的明文发送给服务端
第三步,服务端会生成一个16位的随机数,即challenge,再传回给客户端
第四步,当客户端收到challenge后,用在第一步中存储的NTLM Hash对其加密,然后再将加密后的challenge发送给服务器,也就是response。
第五步,服务端在收到response后,会向DC发送针对客户端的验证请求。该请求主要包含以下三方面的内容:客户端用户名、客户端NTLM Hash加密的Challenge、原始的Challenge。
第六步,当DC接到过来的这三个值的以后,会根据用户名到DC的账号数据库(ntds.dit)里面找到该用户名对应的NTLM Hash,然后把这个hash拿出来和传过来的challenge值进行比较,相同则认证成功,反之,则失败。

针对ntml的攻击方式有一种叫做pth(哈希传递攻击)
因为有些系统中密码不是以明文形式存在的 但是我们可以抓取到ntlm hash
这样的话我们就可以通过返回的challenge用我们抓到的hash对其加密从而达到一种不用明文就可通过认证的目的
Pass The Hash能够完成一个不需要输入密码的NTLM协议认证流程,所以不算是一个漏洞,算是一个技巧。常用的pth的工具主要有:mimikatz
当然,pth也是有利用条件的。如果目标机器安装了KB2871997,那我们就不能pth了。那我们还有另一个姿势:PassTheKey。对于8.1/2012r2,安装补丁kb2871997的Win7/2008r2/8/2012,可以使用AES keys代替NTLM Hash。在mimikatz抓hash时,可以一并抓到。其实,mimikatz中的pth本身就是ptk了。命令:mimikatz "privilege::debug""sekurlsa::pth /user:a /domain:test.local /aes256:f74b379b5b422819db694aaf78f49177ed21c98ddad6b0e246a7e17df6d19d5c" 除这些外,还有很多其他姿势,比如打了补丁有administrator帐号扔可pth、当开启Restricted Admin Mode后,win8.1和server12 R2默认支持pth、启用WDigest劫持winlogon仙人跳等

Windows Access Token

Windows Access Token(访问令牌),它是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access Token,这个Token在用户创建进程或者线程时会被使用,不断的拷贝,这也就解释了A用户创建一个进程而该进程没有B用户的权限。当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清 除,只有在重启机器后才会清除 Access Token分为两种(主令牌、模拟令牌)

横向移动

SMB

smb也是一种协议,只不过这种协议是用来文件共享的一般都是通过445or139端口实现使内网上的机器能共享文件,打印机,串行端口和通讯等资源

IPC

ipc也是基于SMB协议的一种特殊共享,是进程之间通过命名管道的通信
因为没有密码错误限制所以可以批量爆破域内机器
有些情况内网有些机器不会开3389导致你无法连上的时候你可以通过
ipc复制木马到目标机上运行
常用命令有

0.建立空连接
net use \\192.168.1.1\ipc$ "" /u:""
1.建立正常连接
net use \\192.168.1.1\ipc$ "1qaz@WSX" /user:"Administrator" 
2.查看本机连接共享情况
net use
3.查看已建立连接目标主机的共享资源
net view \\192.168.1.1

WMI

wmi是windows中由一组工具几何组成,用来管理本地或者远程管理windwos系统的
使用wmi进行攻击windows系统不会在日志中记录这些操作
利用条件是135没过滤