java代码审计

  • JAVA 项目注入上传搜索或插件挖掘
    • javaweb常用方法
    • javaweb执行流程
    • 审计思路
      • 审计工具
        • IDEA 插件 FindBugs(了解就行,这个不能分析 JSP 文件)
        • Fortify_SCA 代码自动审计工具(主力,但是吃平台性能)
      • 审计开始前
        • 1、确定框架
        • 2、查看是否存在拦截器
      • 包命名规范
    • 案例
      • 简易 Demo 段 SQL 注入及预编译
      • IDEA 审计插件 FindBugs 安装使用-不能分析jsp
      • Fortify_SCA 代码自动审计神器使用
      • IDEA关键字搜索
      • Ofcms 后台 SQL 注入-全局搜索关键字
      • Ofcms 后台任意文件上传-功能点测试
    • 参考资料
  • JAVA 项目 Filter 过滤器及 XSS 挖掘
    • 过滤器说明
    • 找到过滤代码过程
    • 案例
      • Demo 代码测试引用过滤器测试
      • Jeesns 过滤器分析绕过防护代码
      • Struts2 框架类过滤器简要分析测试
  • JAVA 项目框架类漏洞分析报告
    • 过滤器与拦截器的区别
    • 其他知识点
    • 案例
      • Struts2-016远程代码执行漏洞分析-黑盒流程
      • SpringBoot-SpEL表达式注入漏洞分析-白盒思路

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…

代码审计“小迪安全课堂笔记” java相关推荐

  1. web漏洞“小迪安全课堂笔记”反序列化PHPJAVA

    小迪安全课堂笔记反序列化 PHP思维导图 php反序列化 PHP反序列化热身题-无类问题-本地 CTF反序列化小真题-无类执行-实例 CTF反序列化练习题-有类魔术方法触发-本地 网鼎杯2020青龙大 ...

  2. web漏洞“小迪安全课堂笔记”文件操作安全,文件包含

    小迪安全课堂笔记文件包含 思维导图 原理 白盒 黑盒 看参数及功能点 本地包含 无限制,跨目录../../www.txt 有限制,增加了后缀html %00截断绕过 长度截断绕过 远程包含 无限制 有 ...

  3. web漏洞“小迪安全课堂笔记”SQL注入

    文章目录 前言 SQL注入是什么? 注入原理 数据库结构 mysql数据库 参数类型 请求方法 如何判断注入点? 判断注入 1.信息收集 2.数据注入 3.高权限注入 魔术引号开关 跨库注入 获取所有 ...

  4. python开发“小迪安全课堂笔记”

    python开发 Python 开发相关知识点: 基础环境安装 Python 开发-内外网收集 Socket&子域名&DNS 演示案例 涉及资源: Python 开发-批量 Fofa& ...

  5. web漏洞“小迪安全课堂笔记”文件操作安全,文件上传

    文件上传小迪安全笔记 思维导图 利用思路 什么是文件上传漏洞? 文件上传漏洞有哪些危害? 文件上传漏洞如何查找及判断? 文件上传漏洞有哪些需要注意的地方? 关于文件上传漏洞在实际应用中的说明? 案例 ...

  6. 应急响应“小迪安全课堂笔记”web,系统,数据库三方应用

    应急响应 应急响应初识 WEB 攻击应急响应朔源-后门,日志 WIN 系统攻击应急响应朔源-后门,日志,流量 应急响应-WEB 分析 php&javaweb&自动化工具 应急响应流程 ...

  7. WAF绕过“小迪安全课堂笔记”信息收集,漏洞发现,漏洞利用,权限控制

    WAF绕过 思维导图(全) CC 攻击与 DDOS CC WAF 绕过-信息收集之反爬虫延时代理池技术 案例 Safedog-默认拦截机制分析绕过-未开CC WAF绕过-漏洞发现之代理池指纹被动探针 ...

  8. 圣思园java.doc_北京圣思园java课堂笔记.doc

    北京圣思园java课堂笔记.doc JAVASELesson11.类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念.先有类,然后由类来生成对象(Object).对象又叫做实例(Instan ...

  9. SCAU JAVA 课堂笔记

    JAVA 课堂笔记 对象的使用 1.对象引用变量 2.new 创建对象 = 关联 3.引用 eg: .length 引用类的时候是传递地址 传递int的时候是传递的值 函数调用的时候 需要注意是传递的 ...

  10. 课堂笔记学习java(初级)

      这是有关Java语言基础的,偶这学期专业课开始学习java,希望通过此贴把偶的课堂笔记与大家分享,与初学者共同从零学起,还请各位高手随时指点,引导大家把基础打好,谢谢 .    现在每周两节课,偶 ...

最新文章

  1. tensorflow with求导_3.4tensorflow2.x自动求导原理函数详解
  2. jdk8中流的使用(二)
  3. 这12本经典技术书,是时候C位出道了!
  4. Nature:越运动越聪明!躺平小鼠这样做,长出更多脑细胞
  5. 修改echarts环形图的牵引线及文字位置
  6. 获取WebView加载的网页内容并进行动态修改
  7. 面向对象技术——UML
  8. com技术内幕 代码_CFan科学院:零门槛极速抠图技术探秘
  9. OpenSSL签发证书时编码UTF8STRING PRINTABLESTRING不匹配
  10. Linux监控命令之 top
  11. Node.js Net 模块
  12. android抽屉风格,Android开发实战之拥有Material Design风格的抽屉式布局
  13. 精挑细选的几个公众号,你值得拥有
  14. hive udaf_Hive 混合函数 UDTF UDF UDAF详解
  15. 微信群二维码活码生成管理系统源码
  16. 美国高等教育信息素养能力标准
  17. .net 生成拼音码与五笔码
  18. 云计算-华为虚拟化平台FusionCompute
  19. git常用命令及Commit message规则
  20. 各位对IE放尊重点没有他,你怎么下载其他浏览器,你们等黑丝和白丝她来了!

热门文章

  1. Drozer安装配置和报错解决指南
  2. 机器学习算法工程师面试问题汇总(持续更新)
  3. MySQL命令行登录数据库
  4. Topaz Video Enhance AI(ai视频画质增强软件)官方正式版V2.2.0 | AI视频放大软件下载 | 视频画质怎么变清晰?
  5. vue+three.js导入obj模型不显示问题
  6. Sophix热修复问题以及加固
  7. Android热修复之Sophix初探
  8. USB3300速度调试
  9. 使用YYLabel小结,供参考
  10. EXCEL 电子游戏销售数据分析项目