JAVA 项目注入上传搜索或插件挖掘
javaweb常用方法
javaweb执行流程
审计思路
1:根据程序架构以及业务逻辑,通过数据流向的每一个换节来审计漏洞
获取参数–>表现层–>业务层–>持久层,需要通读源码
缺点:耗费时间
2:通过查找和判断敏感函数上下文,追踪参数源头,审计是否存在漏洞
缺点:覆盖不了逻辑漏洞,不了解程序基本框架
审计工具
IDEA 插件 FindBugs(了解就行,这个不能分析 JSP 文件)
参考链接:https://www.cnblogs.com/kingsonfu/p/12419817.html
安装完成后 IDEA 下方会有这个,点开就行
安全问题的报告显示在这里
Fortify_SCA 代码自动审计工具(主力,但是吃平台性能)
安装和使用参考:https://blog.csdn.net/qq_41648820/article/details/116937035
选择扫描功能
选择要扫描的项目(目录形式)
选择你平台的JDK版本
基本上全默认,注意这里红框是指JAVAEE开发平台
扫描完后这样的,想查哪一项点进去就有源代码地址
审计开始前
1、确定框架
通过以下三种方式确定框架:
web.xml
看导入的jar包或pom.xml
看配置文件
struts2配置文件:struts.xml
spring 配置文件: applicationcontext.xml
spring mvc配置文件: spring-mvc.xml
Hibernate 配置文件:Hibernate.cfg.xml
Mybaits 配置文件: mybatis-config.xml
2、查看是否存在拦截器
通过查看web.xml文件,确定是否配置相关拦截器。
包命名规范
包名为com.公司名.项目名.模块名……
持久层: dao、persist、mapper
实体类: entity、model、bean、javabean、 pojo
业务逻辑: service、biz
控制器:controller、servlet、action、web
过滤器:filter
异常: exception
监听器: listener
在不同的框架下一般包的命名规则不同,但大概如上,不同功能的Java文件放在不同的包中,根据Java文件的功能统一安放及命名。
案例
简易 Demo 段 SQL 注入及预编译
1、代码
2、运行,监控数据库
3、尝试注入,成功
监控的sql代码
4、修改代码成预编译形式
5、重新运行程序,发现无法进行注入
这里可以看出,预编译可以有效防止sql注入。java预编译:https://www.cnpanda.net/sec/589.html
6、总结,在代码审计时,sql语句中存在“?”就是预编译机制,几乎不用考虑注入问题。
若为下面写法的语句,就要考虑过滤其问题。
查看web.xml或pom.xml,判断是否存在过滤器
是否存在filter关键字判定是否声明过滤器。
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
若存在过滤器就要查看过滤器代码是否对当前测试代码有影响
IDEA 审计插件 FindBugs 安装使用-不能分析jsp
自动分析检测代码,Security。这个插件只要用于找代码层bug,代码审计只能作为参考,不推荐使用。
点击直接定位到代码
Fortify_SCA 代码自动审计神器使用
载入项目,选择java安装的版本
开始扫描代码中存在的安全问题
IDEA关键字搜索
Ofcms 后台 SQL 注入-全局搜索关键字
插件扫描
启动网站
程序自带的调试信息,参数是“?”,可能是预编译
全局搜索关键字
找到可能存在驻点
找这段代码的访问地址(找路由地址或框架)
代码向上滑动,找到路由地址,java中@Action后是路由地址
抓包
改包找到目标访问地址
界面跳转
触发可能存在漏洞的方法(这里是create方法)
抓包测试何时调用create函数
点击新增
数据包中没有create
添加样例test,点击确定
发现这里触发了create函数,可控变量是sql=,这里就是注点
报错盲注
Ofcms 后台任意文件上传-功能点测试
找到文件上传功能点
抓包
根据访问路径找到代码
没有过滤,改包直接写入webshell,写入成功
参考资料
javaweb中间件:https://www.cnblogs.com/csnd/p/11807776.html
javaweb流行开发框架总结:https://blog.csdn.net/x62982/article/details/88392968
javaweb执行流程:https://blog.csdn.net/weily11/article/details/80643472
idea安装findbugs及Find-sec-bugs安全组件:https://www.cnblogs.com/kingsonfu/p/12419817.html
JavaWeb项目运行流程:https://www.cnblogs.com/1987721594zy/p/9186584.html
JAVA 项目 Filter 过滤器及 XSS 挖掘
javaweb运行数据必然经过过滤器。
过滤器说明
web.xml查看Filter过滤器
名字,对应class,触发URL,生效规则等
Filter是JavaWeb中的过滤器,用于过滤URL请求。通过Filter我们可以实现URL请求资源权限验证、用户登陆检测等功能。
Filter是一个接口,实现一个Filter只需要重写init、doFilter、destroy方法即可,其中过滤逻辑都
在doFilter方法中实现。
Filter和Servlet一样是JavaWeb中最为核心的部分,使用Servlet和Filter可以实现后端接口开发和
权限控制,当然使用Filter机制也可以实现MVC框架,Struts2实现机制就是使用的Filter。
Filter的配置类似于Servlet,由<filter>和<filter-mapping>两组标签组成,如果Servlet版本大于3.0
同样可以使用注解的方式配置Filter。
找到过滤代码过程
1、看构成,全局搜索或默认位置找到对应配置文件
2、看指向,一般自主编写的过滤器在内部库,框架过滤器在外部库中
当前项目的过滤器是外部的,找到过滤器源代码
在访问admin目录任意文件会触发这个过滤器
jfinal的过滤代码
案例
Demo 代码测试引用过滤器测试
自写的内部过滤器
过滤器代码
访问过滤器生效的地址
Jeesns 过滤器分析绕过防护代码
1、找配置文件
2、找到encodingFileter外部库过滤器代码
这里的过滤器逻辑就是加一个编码
3、找到XssFilter内部过滤器代码
若当前这个对象或方法追踪不到,需要将jar载入到项目当中,而不是直接打开。
载入后,找到这个对象代码
Struts2 框架类过滤器简要分析测试
1、找框架的过滤器
没有发现filter关键字。网上搜索:http://c.biancheng.net/view/4106.html,interceptor 指定拦截器
strusts.xml文件中也没有interceptor关键字,查找包含文件
找过滤器代码规则
并非所有过滤器都要看代码,主要看一些关键字:params 。。。。
JAVA 项目框架类漏洞分析报告
过滤器与拦截器的区别
Filter是基于函数回调的,而Interceptor则是基于Java反射的。
Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。
Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。Interceptor可以访问Action的上下文,值栈里的对象,而Filter不能。
最重要的要记住他们的执行顺序:先filter后interceptor,
另外在不同框架中有的是自带有的是需要自写,具体可以查看开发资料。
其他知识点
简称 OGNL,对象导航图语言(Object Graph Navigation Language),是应用于 Java 中的一个开源的表达式语言(Expression Language),它被集成在 Struts2 等框架中,作用是对数据进行访问,它拥有类型转换、访问对象方法、操作集合对象等功能。
Spring Expression Language(缩写为 SpEL)是一种强大的表达式语言。在 Spring 产品组合中,它是表达式计算的基础。它支持在运行时查询和操作对象图,它可以与基于 XML 和基于注解的 Spring 配置还有 bean 定义一起使用。由于它能够在运行时动态分配值,因此可以为我们节省大量 Java 代码。
1、HttpServeletRequest
请求信息。
2、ActionContextCleanUP
3、Other filters
2,3 不重要,貌似现在已经没用了。
4、Filter Dispatcher
过滤器,这个应该是最底层的过滤器。
5、ActionMapper
Struts2 中主要检测请求信息是否需要 Struts2 处理。
6、ActionProxy
一个中间层,就是可以调用其他类什么的。
7、ConfigurationManager
ConfigurationManager 则负责将 struts.xml 文件中配置文件映射到内存中去的
8、Struts.xml
Struts 配置文件需要程序员填写。
9、ActionInvocation
包含四个属性分别获取前端传递的值,action,struts.xml 信息,其他一些数据。
10、Interceptor
拦截器不是太理解应该是获取前端传递的属性值,然后封装到 action 的属性域中。
11、Tag Subsystem
Struts2 自带标签库没用
12、Templete
Struts2 的前端模版,没用吧,不清楚。
13、HttpServletResponse
响应用户的类。
案例
strusts框架已过时
Struts2-016远程代码执行漏洞分析-黑盒流程
Struts2漏洞之S2-016漏洞分析与exp编写:https://blog.csdn.net/u011721501/article/details/41735885
框架执行流程
1、找过滤器,拦截器
2、启动程序
点击strusts2
输出RASP Test。因为访问的是.action,走过滤器,访问文件代码如下
3、加断点,断点调试
4、调试运行
刷新页面
访问了这个.action文件
触发了这个过滤器
struts框架可以使用redirect关键字绕过过滤器
未调式到过滤器
SpringBoot-SpEL表达式注入漏洞分析-白盒思路
1、找配置文件
2、由上已知框架版本,网络搜索漏洞
3…