loecho@垃圾桶

内网渗透:Widows认证学习记录

2020-10-09 · 4 min read
内网渗透

00. 密码存储路径:

  • %SystemRoot%\system32\config\sam

  • 流程: 输入密码与Sam进行对比

  • Sam: 存储windows ntlm

01. NTLM (NT LAN Manager )hash

  • ntlm Hash 是支持Net NTlm认证新协议及本地认证过程中重要参与物,长度为32,由数字贺字母组成
  • WIndows 不存储用户的明文密码,只存储ntlm,后续对产生的ntlm与sam文件中的ntlm进行比较
  • NTLM 前 版本为:LM_Hash (Windows XP WIndows 2003)

02. NTLM 生成:

  • 基本流程:

    • 字母转hex(十六进制)
    • 十六进制转Unicode
    • unicode 通过 md4 加密得到ntlm,最终生成结果为:32位:
    • 实现代码:
    # poc-t 框架下,流程生产:
    
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    '''
     @Name:     getntlm.py
     @Author:   loecho
     @Email:    1loechome@gmail.com
     @Blog:     https://www.loecho.me
     @Time:     2020/7/23 17:58
    '''
    
    import hashlib, binascii
    
    def poc(password):
    
        ntlmHash = binascii.hexlify(hashlib.new('md4', password.encode('utf-16le')).digest())
        with open(r'ntlmHash.txt', 'a')as f:
            f.write(ntlmHash+'\n')
            return '[+] htlmHash: ' + ntlmHash
            #print ntlmHash
            # return '[+]'+ password+'\t'+'[+]' + ntlmHash
    
    # 直接调用库生产:
    
    Python 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 16:30:00) [MSC v.1900 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from passlib.hash import nthash
    >>> ntlm_hash = nthash.hash('loecho')
    >>> ntlm_hash
    '659ff5f9cbeaef25947510fab544cfee'
    >>>      
    
  • POC-T 生成:

Administrator !@#tools9012#@! B700A mimikatz 10.6.19.12 1598925126465
image-20200829094124601
  • 直接生成:
image-20200829094828999

03. LM-Hash

image-20200829100700611
  • 小写转大写字母
  • 密码未达到七位,填充14位,每8比特填充0
  • 由于DES加密,Key位硬编码,单次DES,安全性低
  • DES结果脆弱,较容易被破解猜解

04. 本地认证流程:

  • WIndows Logon Process ,接受输入
  • LSASS,对输入进行认证处理

05. Windows 网络认证:

  • 内网渗透,工作组环境,只能点对点认证
  • 内网渗透,域环境,NTLM认证协议

NTLM 协议:

  • SMB协议,早期为明文口令
  • WindowsNT挑战/相应验证机制,最新NTLMv2

挑战(Challenge)/响应(Response)

image-20200829101839969
  • 协议协商

  • 客户端--->服务端:信息包含用户名

  • 服务端查找后与对应用户名的ntlm+16为随机字符,生产challenge1,发送给客户端

  • 客户端接收challenge,使用对应NTLM Hash 加密Challenge生产Response,发送至服务端

    image-20200829102221624

NTLM v2 协议

  • NTLM v1 与 NTLM v2 最显著的区别就是Challenge与加密算法不同

  • CHallenge: NTLM v1 的Challenge有8位, NTLM v2的Challenge位16位

  • Net-NTLM Hash: NTLM v1的主要加密算法DES NTLM v2的主要加密算法HMAC-MD5

  • Responder smbexec

Pass The Hash (哈希传递)

  • 不需要账号密码,获得认证的过程

    必要条件:

    • 互通

    • 认证的用户名

    • 需要NTLM Hash

Active Directory(活动目录)概念

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

域认证体系 - Kerbroes

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

域认证所参与的角色

  • Client
  • Server
  • KDC (Key Distribution Center) = DC
    • AD (Accent Database): 存储所有client的白名单,只有存在Celient才能申请到TGT
    • AS: 为Client生成TGT的服务
    • TGS:为Client生成某个服务ticket

认证流程:

image-20200902170705754
  1. image-20200902170832032
image-20200902170849927
image-20200902171115988
image-20200902171244873
image-20200902171437186
image-20200902171854778
image-20200902171936275
image-20200902171958594
image-20200902172120335
  • 针对获得到NTLM Hash的服务
    • Mimikatz
    • 针对单一服务进行伪造
    • DCSync 域同步 ---> LDAP
image-20200903170209253
image-20200903170506436
loecho@垃圾桶