本文为该文章内容笔记。
Windows系统账号特性
普通家用Windows对密码无限制,但Windows服务器需要注重账号密码的管理。
管理服务器时,要合理配置用户权限。
密码策略加强
win R
打开运行,secpol.msc
打开本地安全策略,可以看到对密码复杂性的要求。(操作后发现Win10家庭版没有组策略编辑器,根据解决Win10家庭版找不到本地安全策略(组策略)问题成功添加)
可以根据实际需求对服务器密码进行加固。
除去密码策略,还可以对Administrator的用户名进行修改,在本地安全策略中选择本地策略中的安全策略,重命名系统管理员账号。
对账户进行输入锁定策略加强
可以设置账户锁定时间、阈值及重置账户锁定计数器。
禁用Guest用户和无关账户
Win R
打开compmgmt.msc
进入计算机管理
(Win10家庭版提示此管理单元不能用于这一版本的Windows10,需要在控制面板-用户账户中进行修改)
Guest用户可以无密码登录到计算机,但权限较低,不过最好还是禁用。
用户权限分配
可以在这里设置用户的一些权限。
设置主机安全审计
可以在这里设置日志审核策略。
查看系统事件查看器和任务计划程序
设置日志文件大小
Win R
输入eventvwr
,可设置应用日志、系统日志、安全日志属性中的日志大小,并设置当达到最大的日志尺寸时的相应策略。
在事件查看器中可以看到各种警告和错误信息
常见事件ID
事件ID | 说明 |
---|---|
1102 | 审核日志已清除 |
1104 | 安全日志现已满 |
4608 | Windows正在启动 |
4609 | Windows正在关闭 |
4624 | 登录成功 |
4625 | 登录失败 |
4634 | 注销成功 |
4647 | 用户启动的注销 |
4657 | 注册表值已更改 |
4672 | 使用超级用户(如管理员)登录 |
4720 | 创建用户 |
4741 | 已创建计算机用户 |
4742 | 计算机账户已更改 |
4743 | 计算机账户已删除 |
登录类型
2 c(Interactive)用户在本地进行登录。
3 网络(Network)通常为连接到共享文件夹或共享打印机时。
4 批处理(Batch) 通常表示某计划任务启动。
5 服务(Service)每种服务被配置在某个特定的用户帐号下运行。
7 解锁(Unlock)屏保解锁
8 网络明文(NetworkCleartext) 登录的密码在网络上是通过明文传输的,如FTP。
9 新凭证(NewCredentials) 使用带/Netonly参数的RUNAS命令运行一个程序。
10 远程交互(RemoteInteractive)通过终端服务、远程桌面或远程协助访问计算机。
11 缓存交互(CacheInteractive)以一个域登录而又没有域控制器可以用。
查看任务计划程序
有时可能会被入侵,设定计划任务,定时执行某些程序,这些程序可能是一些监听木马和后面程序,输入taskschd.msc
进入到任务计划程序,查看是否存在可疑任务计划。
mimikatz抓取密码
是法国人benjamn开发的一款轻量级调试工具,功能强大,可以直接读取WindowsXP-2012等操作系统的明文密码。
对于Windows2012以上的系统和不能获取到的明文密码,可以搭配procdump和mimikatz来获取密码。
mimikatz # log
mimikatz # privilege::debug
mimikatz # sekurlsa::logonpasswords
在Windows Server 2008 R2 x64虚拟机上测试结果如下:
msv:账户对于密码的各种加密协议的密文,包括LM、NTLM和SHA1。
tspkg, wdigest,kerberos:账户对应的明文密码。
SSP:最新登录到其他RDP终端的账户和密码。
防止mimikatz获取密码
mimikatz需要管理员权限才能有debug权限。
Windows系统中调试权限可以用来调试进程,甚至调试内核。mimikatz需要通过debug对进程进行调试。用户登录时会把账户密码保存到lsass中,经过wdigest和tspkg两个模块的调试之后使用算法进行加密并存储都内存中,而mimikatz能够通过逆算法获取到明文密码。
把administrator去除掉,注销登录系统,mimikatz就不能再获取到权限了。
WDigest
WDigest协议是在Windows XP中被引入的,旨在与HTTP协议一起用于身份认证。默认情况下,MIcrosoft在多个版本的Windows(Windows XP-Windows8.0和Windows Server2003-Windows Server 2012)中启用了此协议,这意味着纯文本密码存储在LSASS(本地安全授权子系统服务)进程中。Mimikatz可以与LSASS交互,允许攻击者通过以下命令检索这些凭据。
mimikatz # privilege::debug
mimikatz # sekurlsa::wdigest
Windows Server2012及以上版本默认关闭WDigest,攻击者无法从内存中获取明文密码。Windows Server2012以下版本如果安装流量KB2871997补丁,攻击者同样无法获取明文密码。配置如下键值。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest
UseLogonCredential值为0时,WDigest不把凭证缓存在内存;值为1时,WDigest把凭证缓存在内存。
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f
如果在注册表中该值为0,就不能够得到明文密码(使用mimikatz获取密码时会得到null,但能获取NTLM和SHA1的加密密文)
把值设为1则可以开启WDigest,获取明文密码。
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
还可以使用Powershell更改
开启Wdigest Auth
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentCzontrolSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1
关闭Wdigest Auth
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentCzontrolSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 0
获取不到明文的情况下,可以使用hash来进行PTH攻击,可以管理到对方的服务器
sekurlsa::pth /user:Administrator /domain:192.168.48.128 /ntlm:5233851804905313cc19024b662f30ef
可以使用PsExec来连接管理对方的服务器。
LSA保护
微软推出的补丁KB2871997是专门针对PTH攻击的补丁,但如果PID为500还是可以实现PTH攻击。本地安全权限服务(LSASS)验证用户是否进行本地和远程登录,并实施本地安全策略。
Windows8.1及更高版本的系统中,微软为LSA提供了额外保护,以防止不受信任的进程读取内存或代码注入。Windows8.1之前的系统,攻击者可以执行mimikatz命令来与LSA交互并检索存储在LSA内存中的明文密码。
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL /t REG_DWORD /d 1 /f
使用以上命令添加或修改键值为1后重启服务器,即使获取debug权限,也不能获取明文和hash。
此处存疑,我已成功将该键值修改为1,但重启后仍能获取密码明文。
获取高版本Windows系统的密码凭证
方法一
修改注册表(WDigest)
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
修改后需要重启计算机
方法二
先用procdump把lsass给dump下来。
procdump.exe -accepteula -ma lsass.exe lsass.dmp
再用mimikatz读取
sekurlsa::minidump isass.dmp
sekurlsa::logonpasswords
关闭一些危险端口
一般Windows的远程溢出漏洞,如ms17-010,都是因为开放了445和其他共享端口造成的,在扫描这些漏洞的时候,也会通过扫描445端口是否开放,关闭这些端口(445、139等)就可以减少一些危险。
扫描目标主机端口
search ms17-010
使用辅助模块验证存在ms17-010漏洞
使用exploit模块
连接成功
添加管理员用户
添加成功
可以使用批处理关闭危险端口
@echo off
color 07
title 关闭常见的危险端口
echo 正在开启Windows防火墙
echo.
netsh advfirewall set currentprofile state on > nul
netsh advfirewall set publicprofile state on > nul
netsh advfirewall set allprofile state on > nul
netsh advfirewall set privateprofile state on > nul
echo.
echo 防火墙已经成功启动。
echo.
echo.
pause
cls
echo 正在关闭常见的危险端口,请稍候…
echo.
echo 正在关闭135,139,445端口…
netsh advfirewall firewall add rule name=denyDangerTCPPort dir=in protocol=TCP localport=135,139,445 action=block
echo 正在关闭137,138端口…
netsh advfirewall firewall add rule name=denyDangerUDPPort dir=in protocol=UDP localport=137,138 action=block
echo 常见的危险端口已经关闭。
echo.
echo.
echo.
echo 按任意键退出。
pause>nul
这时候使用nmap发现已经不是开放状态了。
exploit也没有成功。