MySQL安全(二)SQL注入

一、概述:

1、介绍

SQL注入就是指Web应用程序对用户输入数据的合理性没有进行判断,前端传入后端的参数是攻击者可控制的,并且根据参数带入数据库查询,攻击者可以通过构造不同的SQL语句来对数据库进行任意查询。

2、SQL注入的条件

(1)输入用户可控;(2)直接或间接拼入SQL语句执行。

3、审计方法

对于SQL注入漏洞审计,常见的方法是,根据SELECT、UPDATE等SQL关键字或是通过执行SQL语句定位到存在SQL语句的程序片段,随后通过查看SQL语句中是否存在变量的引用并跟踪变量是否可控。因SQL注入漏洞特征性较强,在实际的审计过程中我们往往可以通过一些自动化审计工具快速地发现这些可能存在安全问题的代码片段。如使用Fortify等自动化工具。

Java语言本身是一种强类型语言,因此在寻找SQL注入漏洞的过程中,可以首先找到所有包含SQL语句的点,随后观察传参类型是否是String类型,只有当传参类型是String类型时我们才可能进行SQL注入。

二、SQL注入的分类:

SQL注入的分类较多,一般可笼统地分为数字型注入与字符串型注入两类。

SQL注入构造恶意SQL语句的方法有:构造堆叠,构造闭合,构造报错,构造时间差,等等

SQL注入按照注入点类型来分分为:数字型注入,字符型注入,搜索型注入

SQL中注入按照提交类型来分分为:GET注入,POST注入,COOKIE注入,HTTP头部注入

SQL注入按照技巧分类的话可以分为:联合注入,布尔盲注,时间盲注,堆叠注入,报错注入。

1、数字型注入

访问http:xxx.admin.com?id=1这种形式的url,输入and 1=1与and 1=2,进行判定看是否会出现and 1=1回显正常,and 1=2回显不正常的情况。如果出现了一般就认为这里存在注入,并且是数字型注入。如果没有出现那么并不能排查这里没有注入,只是排除这里不存在数字型的注入。

2、字符型注入

url后输入' and 1=1 and '1'='1,' and 1=2 and '1'='1。看是否会出现报错的现象。如果存在我们可以进一步的闭合我们的语句。

3、可显注入

攻击者可以直接在当前界面内容中获取想要获得的内容。

4、报错注入

数据库查询返回结果并没有在页面中显示,但是应用程序将数据库报错信息打印到了页面中,所以攻击者可以构造数据库报错语句,从报错信息中获取想要获得的内容。

5、盲注

数据库查询结果无法从直观页面中获取,攻击者通过使用数据库逻辑或使数据库库执行延时等方法获取想要获得的内容。

6、时间盲注

常用函数 sleep()

分割函数 substr、substring、left

分割函数编码后可不用引号,ascii() hex()

一般时间盲注我们还需要使用条件判断函数

if(expre1,expre2,expre3)

当 expre1 为 true 时,返回 expre2,false 时,返回 expre3

7、布尔盲注

这种注入会出现在 注册、ip头、留言板等等需要写入数据的地方,如用sqlmap会产生大量垃圾数据。尝试性插入、引号、双引号、转义符 \ 让语句不能正常执行,然后如果插入失败,更新失败,然后深入测试确定是否存在注入。

8、二次注入

sql语句的变量并不是直接传入的变量,而是通过其它的方式保存到了数据库,形成二次注入。没有单引号的sql语句中,进行16进制编码,这样就不会带有单引号。

9、宽字节注入

字符注入的时候我们需要逃逸单引号,但是php提供了魔术引号开关magic_quotes_gpc和addslashes(),iconv()函数作为防御,特点是自动给传入的参数如单引号,双引号,反斜杠,%00前面加一个反斜杠,进行转义,避免单引号进行逃逸。单引号转义为 ' , mysql 会将 \ 编码为 %5c ,宽字节中两个字节代表一个汉字,所以把 %df 加上 %5c 就变成了一个汉字"運",从而绕过转义。如果数据库是GBK格式而非默认的UTF-8格式,则我们利用两个url编码是一个汉字的特点,组合一个汉字从而解决"\"问题,完成单引号的逃逸。

10、http头部注入

user-agent:判定用户使用的操作系统,以及使用的浏览器的版本。

cookie:判定用户的身份,进行session跟踪可以存储在用户本地终端上的数据,简单理解为用户的一张身份辨别卡。

x-forwarded-for:是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。

client-ip: 数据库保存客户端IP的参数。

rerferer:浏览器向web端表明自己从哪个连接而来。

host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。

三、SQL注入方式

1、#和_模糊查询

2、order by注入

3、union

相关推荐
廿一夏6 小时前
MySql存储引擎与索引
数据库·sql·mysql
敲个大西瓜9 小时前
Java项目常用数据归档方式
mysql
kyriewen11 小时前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
小码工作室11 小时前
使用 HAVING 进行 MySQL 集合筛选
mysql
罗超驿11 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
小江的记录本12 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
木心术113 小时前
Windows系统下MySQL与AI工具集成方案:数据存储与调用实践
人工智能·windows·mysql
这个DBA有点耶13 小时前
SQL改写实战:子查询、CTE、窗口函数性能对比
数据库·mysql·性能优化
小江的记录本13 小时前
【Java基础】反射与注解:核心原理、自定义注解、注解解析方式(附《思维导图》+《面试高频考点清单》)
java·数据结构·python·mysql·spring·面试·maven
Java成神之路-14 小时前
深入拆解 MySQL InnoDB 隔离级别:从 MVCC 到临键锁
mysql