代码审计-Java项目审计-SQL注入漏洞

news2024/12/23 17:45:17

代码审计必备知识点:

1、代码审计开始前准备:

环境搭建使用,工具插件安装使用,掌握各种漏洞原理及利用,代码开发类知识点。

2、代码审计前信息收集:

审计目标的程序名,版本,当前环境(系统,中间件,脚本语言等信息),各种插件等。

3、代码审计挖掘漏洞根本:

可控变量及特定函数,不存在过滤或过滤不严谨可以绕过导致的安全漏洞。

4、代码审计展开计划:

审计项目漏洞原理->审计思路->完整源码->应用框架->验证并利用漏洞。

代码审计两种方法

功能点或关键字分析可能存在的漏洞

   -抓包或搜索关键字找到代码出处及对应文件。

   -追踪过滤或接收的数据函数,寻找触发此函数或代码的地方进行触发测试。

   -常规或部分MVC模型源码可以采用关键字的搜索挖掘思路。

   -框架 MVC 墨香源码一般会采用功能点分析抓包追踪挖掘思路。

1.搜索关键字找敏感函数

2.根据目标功能点判断可能存在的漏洞

 

常见漏洞关键字:

SQL注入:

select insert update mysql_query mysqli等

文件上传:

$_FILES,type="file",上传,move_uploaded_file()等 

XSS跨站:

print print_r echo sprintf die var_dump var_export等

文件包含:

include include_once require require_once等

代码执行:

eval assert preg_replace  call_user_func  call_user_func_array等

命令执行:

system exec shell_exec  ` ` passthru pcntl_exec popen proc_open等

变量覆盖:

extract() parse_str() import_request_variables() $$ 等

反序列化:

serialize() unserialize()  __construct   __destruct等

文件读取:

fopen file_get_contents fread fgets fgetss file  fpassthru parse_ini_file readfile等

文件删除:

unlink() remove()等

文件下载:

download() download_file()等

通用关键字:

$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER等

在Java中SQL语句写法一般有以下几种方式:

.JDBC 注入分析

安全写法: "select * from user where id = ?";

不安全写法: "select * from user where id ="+req.getParameter("id");

.Mybatis 注入分析

#号会对语句进行预编译

${ } 只是进行string 替换,动态解析SQL的时候会进行变量替换

安全写法: select *  from user where name = #{name}

不安全写法:select *  from user where name = ${name}           

.Hibernate 注入分析

安全写法:参数绑定预编译

Query<User>.query=session.createNativeQuery("select * from user  where name=:name");

query.setParameter("name",parameter) ;

不安全写法:

Query<User>.query=session.createNativeQuery("select * from user  where name="+req.getParameter("id"));

java项目sql注入产生原理总结:

1、预编译使用不当:

sql="select * from user where id = ?";

sql+="and username ="+req.getParameter("username");

2、直接动态拼接:

 "select * from user where id ="+req.getParameter("id");

3、order by&like&in查询:

由于这三种关键字不能预编译(预编译失效),所以需要过滤器或自定义过滤

防御:

能预编译的情况都做预编译,一些特殊无法做预编译的,则过滤用户可控的参数。

 

 

案例:Javaweb-代码审计SQL注入-INXEDU在线网校

环境:MYSQL:5.X   TomCat:8.X   JDK:1.8   IntelliJ IDEA

1.将源码导入到IntelliJ IDEA ,部署好环境,启动服务器

2.搜索关键字:jdbc  mybatis—>$  hibernate,判断源码使用的是哪种方式写的sql语句。

3.判断出源码使用的是mybatis方式写sql语句,我们就可以查找 如:${} 这样的不安全写法。

可以看到下图的 IN(${value}) 不但使用了$()不安全写法,还使用了in关键字使预编译失效,极大概率会产生SQL注入漏洞。所以要知道是谁调用执行了这条SQL语句。

4.复制deleteArticleByIds 进行全局搜索

5.成功找到方法,选中——导航——调用层次结构,成功获取完整调用链

6.分析调用链,获取到路由地址:/admin/article/delete  ,以post方式为articelId参数传递参数值

7.访问路由地址并且抓包,将数据包更改为post请求,增加post传参:articelId=1*

8.将数据包保存为1.txt,使用sqlmap检测sql注入。

cmd执行:python sqlmap.py -r 1.txt --dbs

成功获取数据库信息:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

挑选最佳编程神器

选择适合的编程软件对于STM32开发至关重要。以下是几个值得推荐的软件&#xff1a;Arduino IDE&#xff1a;适用于跨单片机型号的编程。通过编写通用的Arduino代码&#xff0c;支持多达140多种主流单片机型号。无论是51、ST、ESP、GD、恩智浦、树莓派等&#xff0c;都可以使用统…

KVM虚拟机管理

1、创建、删除快照 关机 init0 列出快照 删除快照 2、虚拟机迁移 报错 解决&#xff1a;关闭防火墙&#xff0c;关闭selinux 其他解决办法&#xff1a;kvm热迁移使用nfs共享存储报错_莉法的博客-CSDN博客

serve : 无法将“serve”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

1、在学习webpack打包的时候&#xff0c;需要 serve用来启动开发服务器来部署代码查看效果的。安装完之后运行出现以下错误&#xff1a; 2、使用命令查看安装目录&#xff1a; npm list -g我们已经安装过了 3、解决&#xff1a; 我们看到上图路径在&#xff1a;C:\Users\qiy…

SpringBoot整合Shiro实现登录认证,鉴权授权

文章目录 前言一、shiro简介二、环境搭建2.1.数据库2.1.1user用户表2.1.2user_role用户角色关系表2.1.3role角色表2.1.4role_permission角色权限关系表2.1.5permission权限表 2.2导坐标2.3实体类2.3.1User2.3.2Role2.3.3Permission 2.4MVC三层2.4.1User2.4.1.1mapper层2.4.1.2s…

python使用xlwt时,报ValueError: More than 4094 XFs (styles)

在写表格时&#xff0c;遇到如下报错 一、报错原因 xlwt最多只能有4094个样式&#xff0c;超出这个样式数量就报错了。 二、解决办法 &#xff08;1&#xff09;去掉样式的要求

Windows权限维持—自启动映像劫持粘滞键辅助屏保后门WinLogon

Windows权限维持—自启动&映像劫持&粘滞键&辅助屏保后门&WinLogon 1. 前置2. 自启动2.1. 路径加载2.1.1. 放置文件2.1.2. 重启主机 2.2. 服务加载2.2.1. 创建服务2.2.2. 查看服务2.2.3. 重启主机 2.3. 注册表加载2.3.1. 添加启动项2.3.2. 查看注册表2.3.3. 重启…

如何使用Asp.net Core实现定时任务,轻松解决任务调度问题!

一、前言 Asp.net core作为一种高效、跨平台的web框架&#xff0c;在开发过程中&#xff0c;我们常常需要在后台执行定时任务&#xff0c;例如清理无用文件、生成报告、发送邮件等任务。对于这种需求&#xff0c;我们可以使用第三方库&#xff08;如Hangfire或Quartz.NET&…

VIOOVI:什么是精益生产改善?如何做好精益生产改善?

现代化企业经营&#xff0c;更要注重科学化管理、精准化布局&#xff0c;才能为长线稳健运营奠定基础。当下&#xff0c;精益生产改善是各行各业都在探索的话题。那什么是精益生产改善&#xff1f;精益生产&#xff0c;也被称之为精益生产方式&#xff0c;它是基于生产组织、管…

Datawhale Django后端开发入门 TASK03 QuerySet和Instance、APIVIew

一、QuerySet QuerySet 是 Django 中的一个查询集合&#xff0c;它是由 Model.objects 方法返回的&#xff0c;并且可以用于生成数据库中所有满足一定条件的对象的列表。 QuerySet 在 Django 中表示从数据库中获取的对象集合,它是一个可迭代的、类似列表的对象集合。主要特点…

重发布 路由策略

[r4]ip ip_prefix 15 permit 192.168.3.0 24. 根据序号插入规则 [r4]undo ip-prefix aa index 15. 删除规则 [r4]ip ip-prefix aa permit 192.168.3.0 24 less- equal 28 抓取目标网段为3.0掩码长度为24到28的路由 [r4]ip ip-prefix aa permit 192.168.3.0 24 greate…

记录一下基于jeecg-boot3.0的待办消息移植记录

因为之前没有记录&#xff0c;所以还要看代码进行寻找&#xff0c;比较费劲&#xff0c;所以今天记录一下&#xff1a; 1、后端 SysAnnouncementController 下面函数增加待办的几个显示内容给前端用 具体代码如下&#xff1a; /*** 功能&#xff1a;补充用户数据&#xff0c…

Google play应用成功上架要点——如何防止封号、拒审、下架?

Google Play是全球最大的移动应用商店之一&#xff0c;它是运行Android操作系统的设备的官方应用商店。它提供各种数字内容&#xff0c;包括应用程序&#xff08;应用&#xff09;、游戏、音乐、书籍等&#xff0c;包括免费和付费选项。这也为许多游戏/APP出海的企业或开发者提…

spring源码分析bean的生命周期(上)

bean扫描生成BeanDefinition的过程&#xff1a; 创建非懒加载的单例bean的过程&#xff1a; spring容器初始化好之后&#xff0c;首先要进行bean的扫描&#xff0c;然后再进行bean的创建和管理 一、扫描生成BeanDefinition public int scan(String... basePackages) {// 扫描…

[Go版]算法通关村第十关黄金——归并排序

目录 归并排序&#xff08;mergeSort&#xff09;思路分析&#xff1a;二分分割 合并两个数组 递归遍历时处理元素的过程图&#xff1a;递归遍历时栈内的数据图&#xff1a;复杂度&#xff1a;时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)、空间复杂度 O ( n ) O(n) O(n)Go…

innodb的锁

一致性锁定读和一致性非锁定读 Read Committed和Repetable Read级别下采用MVCC 实现非锁定读 但在一些情况下&#xff0c;要使用加锁来保障数据的逻辑一致性 自增列 锁的算法 唯一值 MySQL 中关于gap lock / next-key lock 的一个问题_呜呜呜啦啦啦的博客-CSDN博客 RR可以通过…

为什么一些程序员很傲慢?懂点编程了不起吗?

Perl 语言之父 Larry Wall 说过&#xff0c;好的程序员有 3 种美德&#xff1a;懒惰、急躁和傲慢&#xff08;Laziness, Impatience and hubris&#xff09;。 在日常工作中&#xff0c;程序员的傲慢可以说是被吐槽的最多的&#xff0c;之前还有人特地开了帖子&#xff0c;发…

九耶丨阁瑞钛伦特-HashCode是什么

HashCode是一种用于快速查找和比较对象的方法。它是一个整数值&#xff0c;由对象的内容计算得出。HashCode通常用于数据结构中的散列函数&#xff0c;如哈希表、散列表等。 HashCode的作用有以下几点&#xff1a; 在哈希表中快速查找对象&#xff1a;哈希表根据对象的HashCod…

SQL Server数据库无法连接

问题如下&#xff1a; 原因&#xff1a;sql server服务器未开启 解决方法&#xff1a;以管理员身份打开cmd&#xff0c;输入&#xff1a;net start mssqlserver。

[Go版]算法通关村第十二关白银——字符串经典基础面试题

目录 反转专题题目&#xff1a;反转字符串思路分析&#xff1a;左右双指针 对向交换复杂度&#xff1a;时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 题目&#xff1a;反转字符串 II思路分析&#xff1a;K个一组反转思想&#xff08;找到每组的首尾索引…

实在没货,简历(软件测试)咋写?

简历咋写&#xff0c;这是很多没有【软件测试实际工作经验】的同学们非常头疼的事情。 简历咋写&#xff1f;首先你要知道简历的作用。 简历的作用是啥呢&#xff1f;一句话就是&#xff1a;让HR小姐姐约你。 如何让HR看你一眼&#xff0c;便相中你的简历&#xff0c;实现在众…