代码审计“小迪安全课堂笔记” java

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关键字绕过过滤器
在这里插入图片描述

#### payload测试
未调式到过滤器
在这里插入图片描述

SpringBoot-SpEL表达式注入漏洞分析-白盒思路

1、找配置文件在这里插入图片描述
2、由上已知框架版本,网络搜索漏洞
在这里插入图片描述
3…

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值