一、前言

寒假的是看了菜狗师傅的java代审实战

这里面有他的讲义的内容,还是比较全面的,我自己也没有记笔记,开学的时候,直接跟着菜狗师傅的文章进行了审计,也算复习了前面的知识点

文档

这个是比较全面的

二、 项目简介

具体的项目源码我放到这里

jspxcms-9.0.0-release-src.zip

因为正在学这个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")}

然后保存之后,访问前台

弹出来了计算器

三、总结

还是学到不少东西,对于前面学到的知识也算复习了

参考

JAVA代审-JspxCMS_9.0.0 (qq.com)