一、前言
寒假的是看了菜狗师傅的java代审实战
这里面有他的讲义的内容,还是比较全面的,我自己也没有记笔记,开学的时候,直接跟着菜狗师傅的文章进行了审计,也算复习了前面的知识点
这个是比较全面的
二、 项目简介
具体的项目源码我放到这里
因为正在学这个javaweb,所以整个项目的结构还是不太清楚,项目的搭建也是跟着菜狗师傅一步一步搭建
后端技术
SpringBoot:提供了对Spring开箱即用的功能。简化了Spring配置,提供自动配置 auto-configuration功能。
Spring:是提供了IoC等功能,是目前最流行的Java企业级开发框架。
SpringMVC:MVC框架,使用方便,Bug较少。
JPA:持久化框架。属于JSR标准,JPA实现选择最常用的Hibernate。
SpringDataJPA:对JPA封装,大部分查询只需要在接口中写方法,而不需要实现改方法,极大开发效率。
QueryDSL:实现类型安全的JPA查询,使用对象及属性实现查询,避免编写jpql出现的拼错字符及属性名记忆负担。
FreeMarker:模板组件。
Shiro:安全组件。配置简便。
Lucene:全文检索组件。实现对中文的分词搜索。
Ehcache:缓存组件。主要用在JPA二级缓存、Shiro权限缓存。
Quartz:定时任务组件。
前端技术
jQuery:JavaScript库。
Bootstrap:响应式设计前端框架。
AdminLTE:后台管理平台开源框架。
jQuery UI:基于jQuery的UI框架。
jQuery Validation:基于jQuery的表单校验框架。
UEditor:Web富文本编辑器。
Editor.md:基于Markdown语法的Web文本编辑器。
ECharts:用于生成图标的组件。
My97DatePicker:日期组件。
zTree:树组件。
这个是人家readme里面有的,可以初步的判断一下有什么组件
项目搭建
一般来说直接放在idea里面,让maven直接自动的拉取依赖就行了
接着就是修改数据库的配置
D:\JAVA safe\java框架审计\jspxcms-9.0.0-release-src\src\main\resources\application.properties
这里面先修改一些数据库的配置
然后我们导入数据库配置文件,生成对应的表
这个是我们数据库的名字我们要自己创建一个这样的数据库
之后我们导入数据库配置文件
这样就可以了
等待我们的这个maven加载成功就可以启动了
这里注意我们的jdk版本要用1.8
就可以成功访问到这个页面了
接下来我们进行初步的漏洞扫描
用铲子这个工具进行扫描
接着就可以从高危到低位进行一个一个的挖掘
三、漏洞挖掘
1、弱口令
首先这个弱口令是自己数据库的自己配置的,所以不算漏洞
2、不安全的反射
第一种还好利用,第二种利用条件比较苛刻
而且今天我们搭建的系统还不是用tomcat搭建的没法复现了
3、sql注入
一般来说sql注入先看pom.xml,看一下用的是什么接口
JDBC、Mybatis、mybatis-puls、Hibernate
一般来说就是这三个
最主要的是看一下有没有进行sql语句的拼接,使用预编译的话就基本不会产生sql注入
对于这套系统来说,就是用的是JDBC
我们全局搜索
● +
● append()
● concat()
● join()
我们先用+来尝试一下
貌似好像沒有,下面我们尝试一下append(
有append( 拼接的sql语句,但是我们没有可控的变量
接下来我们看一下铲子给我们爆的sqli
这里测了一下都是由于这个路由下面的方法进行的sql语句,但是跟了一下
并没有发现sql注入
4、文件管理
在文件管理这里有很多漏洞
任意文件读取,任意文件写入,任意文件修改,文件上传,文件删除
任意文件修改
这里是可以解析jsp代码的,这里我们可以直接插入我们的jsp代码命令执行
<% Runtime.getRuntime().exec("calc"); %>
我们访问这个页面
弹出来了计算机
任意文件写入
新建文档里面我们可以选择jsp代码
写入我们的jsp木马,然后连接哥斯拉
任意文件上传
上传我们的jspx木马,这里上传jsp也可以
我们连接一下
成功连接
我们就只分析一下文件上传的逻辑
先抓个包来找一下这个路由
我们可以看到是这个路由
在代码里面我们找一下具体的路由代码
我们成功定位到这里,他这里没有任何的过滤,调用了这个zipUpload函数,我们跟进一下
这里面是用unzip进行解压并没有对文件内容进行检测
造成了任意文件上传
这里我们可以目录穿越,上传到上级目录
文件操作的就这些
5、SSRF
我们通过chanzi将这几次爆出来的ssrf进行审计也发现了两处ssrf
第一处
在这个路由我们通过url
可以发现存在ssrf,其他地方存在的也是这一处
第二次
第二处通过chanzi来看
后台
这里有个source我们可控,并且会触发ssrf,我们来往上面跟一下
我们是在这个路由,让action=catchimage来调用这个函数,之后我们还可以传入source数组,触发ssrf
我们dnslog看一下
这个是个后台的ssrf,还有一个前台的,我们同样可以在chanzi里面看到
前台
这个就不演示了
这个算是我自己用铲子审计的一个漏洞点,菜狗师傅的方法更简单暴力
就是直接通过这个pom.xml 看依赖,直接找响应的方法
菜狗师傅总结
这些都是可以实现发送HTTP请求功能的接口,但是他们有一个区别
java.net.URLConnection
java.net.HttpURLConnection
java.net.URL
java.net.Socket
ImageIO
这几个库是java自带的,已经封装在JDK中了,不需要而外引入
HttpClient
HttpAsyncClient
OkHttp
Hutool
Jsoup
RestTemplate
而这几个不是自带的,如果要使用他们的话,需要添加maven依赖,拉取到本地
那么我们在挖掘SSRF漏洞的时候就可以优先在pom.xml文件中搜索这几个第三方库,发现有引入对应库,那么就有可能使用它,再去全局搜索这个库发送请求的关键字,定位代码,如果没有引入,那就没有搜索对应关键字的必要了,你本地都没有这个库,咋可能会使用到,搜索出来的关键字也是其它库的,这样就可以筛掉很大一部分关键字,正常情况下没有开发会导入一大堆可以实现相同功能的库,又不是做测试,师傅们审计的系统肯定也是成品源码,不会出现这种情况
筛掉第三方库的关键字后,再慢慢搜索自带库的关键字,这样就不会出现,项目没有使用这个库,还去搜索对应关键字的情况了。浪费时间
对于这套系统
我们看pom.xml
导入的是这个组件
我们直接搜关键字
.execute(
然后看相关的函数就能很快的定位到相关的触发点
点击进去往上跟,能跟到最前面就可能会产生ssrf
接下来第二处的触发
菜狗师傅直接搜了关键字,openConnection,发现有使用到java.net.URLConnection,就是前面说的source部分
6、模板注入
这里模板注入的思路我们还是看菜狗师傅的,这里我们先看一下使用的模板技术,在readme里面的写好的使用的是FreeMarker
当然我们在pom.xml里面也可以看到
这里我们就直接用poc,先试着插一下
${"freemarker.template.utility.Execute"?new()("calc")}
然后保存之后,访问前台
弹出来了计算器
三、总结
还是学到不少东西,对于前面学到的知识也算复习了