当前位置:网站首页 > Java基础 > 正文

java代码审计基础



在这面具之下,是你坚强的信念

炼石计划之50套JavaWeb代码审计

第四套:进销存系统

第五套:若依管理系统某版本

第六套:任务调度系统

正在火热练习阶段ing......

并且定期分享ing......

关注我们,时刻跟着学习。

1

项目安装

A、基础环境部署

1、Java环境部署

Java版本如下图所示:


https://www.oracle.com/java/technologies/downloads/#java8-windows

安装步骤操作简单,只需下一步即可,不过多赘述。

2、Maven环境部署

关于Maven环境部署与安装,可参考下面的文章,安装最新版即可。

https://www.runoob.com/maven/maven-setup.html

在IDEA中内置了Maven,对于我们来说足够用了。

Maven加速配置

配置国内源下载一些依赖组件会非常快,但会有极个别情况,有些组件使用国内源无法下载,则需要再更改配置,大家留有印象就好。

①、访问目录,当前用户文件夹需要根据当前用户来定,如下图所示:


xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

C:Users当前用户.m2 epository

aliyunmaven
*
阿里云公共仓库
https://maven.aliyun.com/repository/public

nexus

注意代码中的该位置路径应与你当前用户一致。

3、Mysql环境部署

个人偏好于使用phpstudy,它集成了很多常用组件,如apache,mysql等。作为练习,方便至极,一键启动即可使用。

官方下载链接:

https://www.xp.cn/

下载完成后,双击进入软件。进入首页处,选择mysql套件,点击启动即可,如下图所示:


点击左侧,可以对数据库进行操作。

4、IDEA

官方下载地址,可选择使用版本。

https://www.jetbrains.com/zh-cn/idea/download/#section=windows

B、环境搭建

安装整体过程首先将数据导入mysql数据库中,然后将项目导入IDEA中,修改配置文件中数据库信息,点击启动即完成环境搭建。

①、在phpstudy中启动Mysql





⑤、打开IDEA,点击,选择项目文件夹下的文件,最后选择打开方式为,如下图所示:



也可以右键选择文件夹,点击

第一次导入项目,Maven会自动下载所需依赖,会花费一些时间。

java代码审计基础

⑥、几个现象表明项目部署成功。文件无报错,项目代码已编译为,处显示可以运行。



⑨、打开浏览器,键入,访问项目。


至此,环境已搭建完毕,可以开始面的练习了。

2

代码审计漏洞挖掘

“环境部署完成后,

通过代码审计深入发现安全漏洞

本项目整合了Mybatis操作数据库。通过前面的学习,我们了解到Mybatis错误的配置会导致SQL注入漏洞的存在,这是我们挖掘SQL注入漏洞的入口点。

我们先来回顾下:

Mybatis拼接sql有下面两种方式:

告诉 MyBatis 创建一个预编译语句(PreparedStatement)参数,在 JDBC 中,这样的一个参数在 SQL 中会由一个“?”来标识,并被传递到一个新的预处理语句中,

仅仅是纯粹的 string 替换,在动态 SQL 解析阶段将会进行变量替换,直接替换字符串,会导致SQL注入产生。

一些不能使用的场景:

表名/字段名
order by/group by
like模糊查询
in

因此,我们在代码审计阶段进行SQL注入漏洞挖掘,应关注中使用拼接SQL的地方,全局搜索关键字符。Windows快捷键(如果快捷键冲突,需自己更改)。

调出,File mask选择文件类型为,键入关键字符,如下图所示:


我们逆向追踪所拼接的参数,看看是从前端哪个地方输入进来的。

首先在IDEA中安装,该插件方便mapper.xml与mapper接口之间跳转。需在左上角中安装。

逆向追踪参数流程,举例说明

①、通过搜索还发现文件,第17行,存在使用语句以及拼接SQL。安装了插件后,左侧会有绿色箭头,点击即可跳转到mapper接口处,也就是DAO层文件,如下图所示:



②、我们继续向前找到谁调用了中的,Windows系统按住键,鼠标左击进入该方法,或者说查看谁用了这个方法。如下图所示:


③、点击进入文件,发现函数中使用了,如下图所示:




5.3、越权漏洞挖掘

在渗透测试阶段挖掘漏洞时发现了越权漏洞,我们现在从代码审计角度跟踪一下删除流程。

通过URL路径查看相关Controller,搜索发现为,位于。进一步查找关于删除用户的的方法,发现在该文件的第115行~123行,通过删除用户,如下图所示:


①、通过上述代码,发现从前端接收参数,调用进行删除,此处无任何权限关联。

②、通过找到实现类,位于。从中找到方法,如下图所示:


③、从中可以看到,该方法首先使用了方法根据校验用户是否允许操作。然后分别调用了,,通过删除用户,并且通过用户ID删除用户和岗位关联。按住键左击调用的方法,可以跳转到DAO层文件。如下图所示:




跟着删除用户整体流程逻辑走下来,发现userId是仅从用户侧获取的,没有从session中获取的,并且没有将userId与所删除的数据做身份关联。

简单来说,通过流程走下来发现代码只根据进行删除账户操作。任意用户都可以调用该接口进行删除其他用户,从而导致越权漏洞的出现。

并且用户ID值极易进行遍历,从而进行批量任意用户删除。

3

渗透测试漏洞验证

“在代码审计阶段发现漏洞后,

通过渗透测试进一步验证。”

  • 什么是SQL注入漏洞

SQL注入主要发生在与数据库交互的地方,前端将数据传入后端后进行了数据库相关操作。如果我们传入的数据没有有被过滤或转义,拼接到查询SQL中,被当成SQL语句执行。那么我们可以构造攻击语句,进而可以攻击操作数据库。

SQL几种注入模式:

  1. 基于布尔的盲注,即可以根据返回页面判断条件真假的注入;

  2. 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;

  3. 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;

  4. 联合查询注入,可以使用 union 的情况下的注入;

  5. 堆查询注入,可以同时执行多条语句的执行时的注入

对于不同数据库,攻击语句不同。常见的数据库有,,等等。

SQL注入必练靶场:

  • SQL注入漏洞挖掘

SQL注入漏洞挖掘第一步是找与数据库交互的地方,也所谓的。

手工挖掘,初步判断:

针对每个与数据库交互的点,使用下述攻击POC,观察响应,进行初步判断。


’ and '1'='1
' or '1'='1
’ and '1'='2
' or '1'='2
' and '1'='1
' and '%'='
' or '1'='1
' and '1'='2
' or length(user)=3 or '1'='1
' or length(user)=2 or '1'='1

更多探测语句,可收集相关字典。

自动化挖掘:

使用SQL注入神器,官方地址:

SQLMap 是一个开源的渗透测试工具,可以用来进行自动化检测,利用 SQL 注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。

使用SQLmap对每个与数据交互的点都进行SQL注入探测。

经过一番探测,发现和两处存在SQL注入。以其中一个为例进行演示。

①、访问功能,输入关键字,点击查询,此时使用Burp抓取数据包,如下图所示:







3.8、越权漏洞挖掘

  • 什么是越权漏洞

越权,顾名思义,是超越权限或权力范围的意思。越权漏洞也就是超越该账户权限操作其他账号。比如:越权获取敏感信息、越权删除他人订单、越权添加管理账号等等。

越权漏洞主要形成原因为在,或验证权限不充分,从而导致越权漏洞的出现。

水平越权:同权限下账号数据的越权读取/操作。

垂直越权:不同权限下账号数据的越权读取/操作。比如:普通用户越权操作/读取了管理员数据。

挖掘越权漏洞前置条件最好是准备。对于水平越权准备两个账号。对于垂直越权准备两个账号。

除非是自己搭建环境或者是授权的渗透测试项目,否则不建议通过遍历ID方式来测试越权漏洞。

  • 越权漏洞手工挖掘

手工漏洞挖掘漏洞比较耗时耗力,但优点在于可以对所有流程有更深入的了解,可以发现更深层问题。

经过深入的手工挖掘,发现系统中存在越权漏洞。详细步骤如下。

①、登录账号,访问,点击,添加越权测试用的账号,如下图所示:




③、通过访问两个不同权限账号下的用户管理,观察到两个账号的用户数据不同。账号下的用户管理包括了所有的用户信息,账号下仅能看到自己新添加的的账号。我们进一步验证越权漏洞。登录账号,访问用户管理功能,选择一个不存在于账号下的账号数据。通过上图对比,选择为例。

④、此时浏览器打开代理连接到Burp,Burp下的Proxy打开,然后点击删除,此时Burp抓取到删除的数据包,记录参数,将数据包发送到模块,最后将数据包掉,我们不做删除操作。如下图所示:




  • 越权漏洞自动化挖掘

工具推荐BurpSuite插件。官方地址:,可通过BurpSuite的安装。

安装之前需要先安装环境,下载地址:。安装教程可自行搜索。

①、登录,记录cookie值,并将该值导入到模块,规则配置如下图所示:



注意:上述仅为演示,过滤规则不是最优,可根据实际项目场景,进行构造。

举一反三,后台系统一些功能点还存在相关问题,比如,等等。思考一下问题会出在哪里,再配合使用自动化工具,赶紧动手试试吧。

另外,我们通过挖掘越权漏洞时发现,低权限在用户管理处添加的账号,admin账号也能看到。那么配合XSS漏洞,是不是能做些什么骚操作呢?

欢迎关注公众号(闪石星曜CyberSecurity)

跟着学习迷路

  • 上一篇: java基础面试经典
  • 下一篇: java基础语法218
  • 版权声明


    相关文章:

  • java基础面试经典2025-05-02 19:10:06
  • java核心技术-基础知识2025-05-02 19:10:06
  • java基础函数2025-05-02 19:10:06
  • 怎样打好java基础2025-05-02 19:10:06
  • java基础必学知识2025-05-02 19:10:06
  • java基础语法2182025-05-02 19:10:06
  • java算法基础2025-05-02 19:10:06
  • java基础384讲2025-05-02 19:10:06
  • java 基础符号2025-05-02 19:10:06
  • java基础124讲2025-05-02 19:10:06