环境部署下载源码,使用IDEA部署,项目pom.xml添加maven依赖包,配置数据库账号密码,配置并开启端口,即可使用tomcat7插件运行项目。搭建过程有两个坑:建议直接使用5.5.*版本的mysql。高版本会遇到各种问题,因为mysql的默认配置需要额外配置。虽然最后可以搭建成功,但是还是直接用低版本的比较好。无需额外配置。项目路径建议直接使用http://IP:port格式,后面不要配置额外的路径。虽然添加额外的项目配置后可以部署成功,但是会导致部分页面或图片无法加载。在进行代码审计的时候,记得在进行代码审计之前,额外反编译\src\main\webapp\WEB-INF\lib\目录下的jar包,因为IDEA在搜索源码关键字的时候是不会搜索jar包的,我没有'我之前审计的时候没有注意到项目下的这个目录,导致之前审计的过程中有些功能找不到源码。项目结构分析这是一个SSM(即SpringFramework、SpringMVC、MyBatis)架构的项目。维基百科是这样介绍的:pom.xml:Toauditamavenproject,youshouldfirstcheckpom.xm。通过查看这个文件,可以知道项目中使用了哪些组件和组件版本,从而可以快速查看对应版本的组件是否存在漏洞。观察到项目使用的是log4j,版本是1.2.17。该版本存在反序列化漏洞CVE-2019-17571(经分析不存在该漏洞,因为本项目未使用产生该漏洞的类,即SocketNode类)。同样使用了druid1.0.1组件,可以发现一些未授权的接口(经测试,未发现该组件生成的未授权)。mybatis3.2.7组件存在反序列化漏洞CVE-2020-26945(经分析,该漏洞不存在,因为本项目未开启mybatis的二级缓存功能)。web.xml:程序启动时首先加载该文件。该文件用于配置Filter、Listener和Servlet。这个文件需要重点关注Filter过滤器的全局配置。本项目只配置了两个全局过滤器,这两个过滤器都没有对输入输出进行转义等字符处理,所以没有配置全局XSS过滤。applicationContext.xml:spring的默认配置文件。当容器启动时没有找到其他指定的配置文件时,就会加载这个配置文件。该文件还包含对其他配置文件的引用。spring-mvc.xml:该文件的主要任务是:启动注解,扫描controller包注解;静态资源映射;查看分辨率(defaultViewResolver);文件上传(multipartResolver);返回消息json配置。web项目启动时,会读取web.xml配置文件,首先解析applicationContext.xml文件,再解析sping-mvc.xml文件。Interceptor:拦截器,用于拦截用户请求并进行相应的处理。比如用来验证权限,或者判断用户是否登录,或者像12306一样判断当前时间是不是购票时间。这个项目中有3个拦截器,分别处理前端是否-终端用户、后台用户、网站配置管理处用户均已登录并拥有权限。代码审计前台找回密码,复用验证码,直接在代码中搜索关键字验证码,分析相关代码。下面是找回密码的函数。依次获取客户端和服务端的验证码进行验证。验证成功后,进入验证邮箱查看是否注册。如果没有注册,则直接返回结果。服务器中的旧验证码不会被删除。所以这里可以重复使用验证码爆破注册邮箱。继续分析发现,只有邮箱存在并重置密码后,才会清除服务器中的验证码。因为前台登录处没有验证码,这里可以配合登录继续爆破密码。但经过分析,后台管理员登录并没有验证码复用,因为验证码正确后会立即清除验证码。XSS的开头已经分析过了,没有发现全局的XSS过滤器,所以直接注册一个账号登录,看到框的时候插入XSSpayload。存储型XSS是在问答功能下的我要问一个问题功能中发现的。这里只有标题有XSS,内容没有XSS。找到对应的入口分析原因。questionsService.addQuestions()是增加一个问答方法,跟踪这个方法QuestionsController-->QuestionsService-->QuestionsServiceImpl-->QuestionsDao-->QuestionsDaoImpl-->QuestionsMapper直接存入数据库,没有根据字符过滤跟踪过程分析。并将标题和内容保存在数据库中。可以看到存储过程的标题和内容没有区分,说明输出的时候对内容进行了过滤,继续分析输出的部分。从上面我们可以看出带有XSS的url是http://127.0.0.1:8080/question/list。直接在*.jsp文件中搜索question/list,找到对应的输出点。很明显,标题是直接和数据库中的值拼接的,没有用标签包裹,而内容中使用了
