sql注入 笔记
本人 小白 白的很彻底😅
原理
SQL注入攻击是通过将恶意的SQL查询或添加语句插入到应用的输入参数中,再在后台SQL服务器上解析执行进行的攻击,它目前是黑客对数据库进行攻击的最常用的手段之一。
SQL注射能使攻击者绕过认证机制,完全控制远程服务器上的数据库。 SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL数据库来存放应用程序的数据。几乎所有的Web应用在后台都使用某种SQL数据库。跟大多数语言一样,SQL语法允许数据库命令和用户数据混杂在一起的。如果开发人员不细心的话,用户数据就有可能被解释成命令, 这样的话,远程用户就不仅能向Web应用输入数据,而且还可以在数据库上执行任意命令了。
头注入点
这一部分我也没大搞懂 先把笔记做下再说
1.UserAgent
2.Referer
3.Cookie
4.X-FOR-I
注入分类
1.基于联合查询
2.基于错误回显
3.基于盲注,分时间盲注和布尔型的盲注
4.基于user-agent
5.基于referer
6.基于cookie
7.二次注入
8.宽字节注入
9.堆叠注入
注入过程
-
1.判断是否存在注入
1.单引号判断:在url后面加入英文字符 ?id=1’
若回显错误,则说明存在注入。
2.数字型判断:
url 地址中输入 http://xxx/abc.php/?id= x and 1=1 页面依旧运行正常,继续进行下一步。
url 地址中继续输入 http://xxx/abc.php/?id= x and 1=2 页面运行错误,则说明此 Sql 注入为数字型注入。
3.字符型判断:
url 地址中输入 http://xxx/abc.php/?id= x’ and ‘1’='1 页面运行正常,继续进行下一步。
url 地址中继续输入 http://xxx/abc.php/?id= x’ and ‘1’='2 页面运行错误,则说明此 Sql 注入为字符型注入。
-
2.猜字段的数量,根据传入id最终查询到的结果列数
-
3.报显示位,id必须为查询不到的数据
-
4.查询详细信息
- 当前数据库
- 数据库版本
- 当前用户
-
5.查询具体数据库
- 所有数据库
- 查询数据库对应表
- 查询表中的列
- 查数据
库、表、列
-
information_schema -> 数据库
简单的信息数据库
里面都是视图,不是表,没有具体文件 -
schemata -> 数据库信息
schema_name 数据库名称
select 1,group_concat(schema_name),3 from information_schema.schemata -
tables -> 数据库和表的关系
schema_name 数据库
table_name 表名
select group_concat(table_name) from information_schema.tables where table_schema=‘security’ -
columns -> 表和列的关系
table_name 表名
column_name 列名
select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’ -
查出了列和表的具体信息,接下来查询数据
select 列名 from 表 where 条件
select group_concat(id,0x3a,username,0x3a,password) from users(0x3a ‘:’的ASCII值,也可直接用’:’)
具体可看下图
(id,0x3a,username,0x3a,password) from users
(0x3a ‘:’的ASCII值,也可直接用’:’)
具体可看下图