sql注入基础知识
前言:之前也写过sql注入的文章,但更多的是写题的记录,对一些sql注入的基本知识点没有涉及,今天来更进一
步的讲解sql注入
我们检测是否可以进行注入,首先要查看网站是否存在参数传递,不一定是要在url地址中含有查询字符串,数据
可能通过post方式提交,更改post数据也可进行注入,对于同时传递多个参数时,多个参数都要进行测试
sql注入攻击流程
1 猜测数据库类型
2 根据类型选择思路
在发现存在注入点时,我们如何判断数据库类型呢?
首先可以通过端口扫描找到网站开放的端口
mysql 默认开放 3306
Oracle 默认端口为1521
sqlserver 默认端口为 1433
PostgreSql 默认端口号:5432
Access Access数据库属于文件型数据库,所以不需要端口号
除了这种方法,我们还可以通过 查询不同数据库的特定表实现
mysql : and (select count(*) from information_schema.TABLES)>0 and 1=1
oracle : and (select count(*) from sys.user_tables)>0 and 1=1
sql server :and (select count(*) from sysobjects)>0 and 1=1
其余方式见:此博客
获取了数据库类型,我们就可以进行下一步注入了
1.1 access 简易注入 + 字典猜解
如果我们知道账号密码存储的表名和列名,直接进行注入即可,首先是利用 order by +数字来判断列的数量
用法为 : and order by 数字
数字为列的数量,比如查询的该表一共有5列,数字给1-5都是正常,给6就会报错,
无法正常显示,我们获得列的数量用于在下一步进行显示位查找,具体的方法如下
union select 1,2,3,4,5 from 表名;
数字截至到初始显示表的最大值,就是我们上一步在order by中得到的
值,我们注入该语句后,查看页面中出现的数字,出现几说明显示位在第几位,比如如果页面原本正常的文字变成
了3,4那么就说显示位为 3,4 我们可以进行下一步 : union select 1,2,password,username,5 from 表名
通过该方式,可以将另一表中我们想要查询的数据,比如账号密码,拼接到原本查询的表中,即使原本的表中指定
了要输出的列名,也可也顺利输出我们想要的数据,这种情况适用于我们知道了要查询的表名和列名,比如
admin表下的admin列和password列
access数据库由于没有存储表名和列名的表,
标签:数据库,sql,基础知识,表名,查询,select,注入 From: https://www.cnblogs.com/rpup/p/18020183