java代码显示是m什么,JAVA代码审计之SSM框架与示例

Java SSM框架代码审计、SSM框架各个成之间的关系

tomcat启动后会自动加载web.xml中的设置,首先是天生DispatcherServlet类,将我们的请求转发至我们的SpringMVC中去,交由我们SpringMVC的Controller来举行接下来的处置。天生DispatcherServlet时的初始化参数contextConfigLocation参数,Spring会凭据这个参数去加载所有逗号分开的xml文件,若是没有这个参数,Spring默认加载WEB-INF/DispatcherServlet-servlet.xml文件web.xml中的几项设置

applicationContext.xml:是Spring的焦点设置文件,例如天生Bean,设置毗邻池,天生sqlSessionFactory

sqlSessionFactory:SqlSessionFactory是MyBatis的要害工具,SqlSessionFactory工具的实例可以通 SqlSessionFactoryBuilder工具类获得,而SqlSessionFactoryBuilder则可以从XML设置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例

SqlSession:SqlSession是MyBatis的要害工具,可以用SqlSession实例来直接执行被映射的SQL语句

mybatis框架主要是围绕着SqlSessionFactory举行的,确立历程也许如下

界说一个Configuration工具,其中包罗数据源、事务、mapper文件资源以及影响数据库行为属性设置settings通过设置工具,则可以确立一个SqlSessionFactoryBuilder工具

通过 SqlSessionFactoryBuilder 获得SqlSessionFactory 的实例。

SqlSessionFactory 的实例可以获得操作数据的SqlSession实例,通过这个实例对数据库举行操作。

而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来确立。

打开项目到登录窗口,登录发送数据请求的URL,将/login在IDEA中使用crtl+shift+f举行搜索,找到控制器@RequestMapping(value= ”/login”,method=RequestMethod.POST)

先看下是否有过滤器防止SQL注入,在web.xml中找到filter标签,crtl+左键进入到对应的过滤器类中 这里使用了动态署理来对request域中的数据举行过滤等操作,继续跟进

动态署理中对request域中的数据举行了XSS的过滤,并举行了实体化编码修改数据到request域中,并没有对SQL语句举行过滤等操作

回到控制器中,跟进控制器中的login方式来到接口中,接口interface IMemberService 界说了login方式,使用crtl+alt+b进入该接口实现类中

该接口登录方式挪用了memberDao.login方式,这里使用的是SSM框架,以是Dao层对应的方式都有响应的Map.xml中对应的SQL语句

Dao层接口,接口名字对应着Map文件,直接找对应的Map.xml文件即可,这里是MemberMap.xml

这里使用了预编译没有对应的破绽

全局搜索{,由于mybatis存在注入的地方就是使用了该符号作为SQL语句拼接。

找到该xml文件,文件名为GroupTopicMapper.xml,找对应的Dao文件即可,搜索GroupTopicDao,找到该文件,而且搜索之前xml语句的id值即为Dao中的方式名,找到如下

找到Dao文件之后需要找到对应的Service,这里使用crtl+alt+h找该方式在那里被挪用过,找到如下文件

仍然找改方式在那里被挪用,使用crtl+alt+h,发现以下俩个crontoller挪用了改方式

这里使用crtl+alt+h查看该方式在那里挪用,继续跟踪找到前端url,这里看下改方式的requestmapping中的值即可找到对应的url,只是这里并不存在SQL注入,可控的参数不会进入到语句中

接见公布谈论页面,点击提交数据,查看数据提交的uri

之前看到web.xml中设置有过滤器,MVC执行顺序是先经由过滤器,在经由控制器,以是先去过滤器中查看是否有对应的处置

使用了动态署理对request中的数据举行处置,跟进方式,这里获取参数值,而且对参数挪用了cleanXSS举行过滤,找到cleanXSS方式

cleanXSS方式中先挪用dealScript和dealStyle方式对xss举行处置

这里对script标签和style标签举行了正则,并举行了实体化编码,然则只对正则匹配到了的xss举行了实体化编码,而且正则可以绕过,故存在xss破绽

回到cleaXSS方式中,对这俩个标签处置完之后,对事宜举行了正则匹配并替换,在提交处查看处置后的效果

然后回到控制器中,crtl+shift+f搜索指定的路径即可,@respinseBody将方式返回值作为返回体中的内容

跟进save方式,crtl+alt+b进入。这部门是对提交的内容的规范做判断

跟进该方式

crtl+alt+b进入方式后,这里是注解方式绑定mapper中的方式与provider中的方式绑定

@options的选项指定把获取到的主键值注入到 XXX(实体类) 的 id 属性。

方式中返回了sql语句

进入文章公布面,行使编辑器插入一个链接,保留的发送的数据的uri如下,在全局搜索该Url找到控制器

首先举行了拦截器举行校验用户是否举行登录,使用@valid举行数据校验

@Valid注解举行数据验证

前端发送数据包,获取uri,再idea重全局搜索/SSRF/task1

从打开的毗邻获取一个 InputStream,可以从中获得 URL 请求的响应流。在挪用这个方式时,会自动挪用 URLConnection.connect() 方式,也就是确立毗邻。以是一旦挪用 getInputStream() 毗邻就已经确立好了

前端发送数据包,获取uri,再idea重全局搜索/xxe/simple

跟进parseXml方式,这里应该是剖析xml文件的方式,这里设置了允许外部xml实体,使用Unmarshal剖析了读入的xml文件,故发生破绽

路径穿越破绽

上传个人资料,看到文件名被拼接到了url后面

查看提交了url,在IDEA中全局搜索PathTraversal/profile-upload。

跟进方式,在方式中直接用传来的名字和路径举行了拼接导致了目录穿越

需求是输入安全问题举行验证乐成后,举行密码修改

提交后的数据请求包如下

在idea中搜索uri,定位到相对应的代码

跟进parseSecQuestions(req)方式,这里获取了请求体中的参数,并将包罗secQuestion的键值放入了userAnswer的map中,并返回赋值给了submittedAnswers的map

从感受中判断应该是第二个If应该是返回密码修改的方式,那我就想设施看是否能绕过限制进入第二个if语句中,跟进方式

这里我们只要让其执行第一个If,而不去执行剩下的if语句即可,可以将请求体中的secQuestsion0\1的数字替换即可,返回true

*本文作者:WhyNotD,转自FreeBuf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值