SQL注入基础入门篇 注入思路及常见的SQL注入类型总结 | 您所在的位置:网站首页 › sql注入攻击是什么意思呀 › SQL注入基础入门篇 注入思路及常见的SQL注入类型总结 |
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 注入过程一张图看下注入过程:
可以按照两个分类标准来进行分类,当然常见的就是按照注入方式的不同将其分类为: 联合查询注入:可以明确判断回显位置的情况下使用报错注入:无回显位置,可以有报错输出的情况可以使用布尔盲注:关闭错误回显和数据回显,但是页面会根据我们的输入对错变化。可以使用。时间盲注:无任何形式的回显,但是仅仅对睡眠函数有响应,可以使用时间盲注。堆叠注入:堆叠注入在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 实验室设备网 版权所有 |