0x01 前言


前段时间审计的项目~也是第一次审计java,跟表哥们分享一下。

一个电子对账系统,大部分是数据统计等功能,使用hibernate+Struts2+spring 框架,Oracle数据库,分前台后台两个项目,前台功能较单一就不说了,主要审计的后台。。

开发商说是个老项目了,2333,拿来练手还是不错的。

0x02 项目分析


对账Java分页 java对账模块_对账Java分页

先看src文件夹下,主要的逻辑处理代码,数据库操作代码等都存放在src下的包中,还有struts.xml struts的配置文件,以及一些初始化参数,比如init.properties中存放着数据库连接地址及账号密码。

common包下action存放 Action逻辑处理类,service包中存放service类,dao包中的类主要是对数据库的操作

filter包中主要存放的是 web.xml中配置的过滤类,所有请求都需要先经过filter中的过滤操作

pojo包中存放着实体类和hibernate的映射文件

util包中是一些常用工具类

对账Java分页 java对账模块_java常用工具类_02

来看下webroot文件夹下,web-inf中是常见的spring配置文件及web.xml等 其余的文件夹存放的都是页面jsp文件。

大致的执行流程就是,通过web.xml加载spring及struts2的配置文件等,然后执行的url先经过web.xml中配置的过滤类,如果请求的是action会通过struts2.xml中的配置 去找到src/com.aoyi.erp/common/action下的Action类中的函数并执行,action类中会调用service包下的service类再进行进一步处理,service类又会调用dao包中的数据库操作类进行操作,最后通过struts2.xml中的配置返回结果,当然其中会调用一些其余的工具类之类的。

url->filter->action->service->dao->.jsp页面或者数据等

这项目结构还是比较清晰明了的。。

0x03 越权


不管是前台还是后台,基本都是一个登录框,登录进去以后才有功能。

他本身是通过filter包中的类做过滤及权限判断的,可惜一个配置文件的疏忽,,,导致所有.action的请求都可未授权访问,,只要匹配action中需要的get或post参数就可以使用任意后台功能。。

我们先来看下其web.xml文件中设置的过滤器

<filter>
<filter-name>struts-cleanupfilter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUpfilter-class>
filter>
<filter-mapping>
<filter-name>struts-cleanupfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>


<filter>
<filter-name>Struts2filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcherfilter-class>
filter>
<filter-mapping>
<filter-name>Struts2filter-name>
<url-pattern>/*url-pattern>
filter-mapping>