SQL注入 基础概述及相关知识

SQL注入概述

SQL注入攻击简介

通过把SQL命令插入到Web表单提交输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
开放式Web应用程序安全项目(Open Web Application Security Project,OWASP)是世界上最知名的Web安全与数据库安全研究组织,在该组织发布的2017年的统计中,注入漏洞高居第三位。

OWASP

SQL注入攻击原理

通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

SQL注入攻击来源

根据相关技术原理,SQL注入可以分为平台层注入代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。

SQL注入攻击主要特点

1.变种极多
有经验的攻击者会手工调整攻击的参数,致使攻击的数据是不可枚举的,这导致传统的特征匹配方法仅能识别到相当少的攻击。或者是最常规的攻击,难以做到防范。
2.攻击简单
攻击过程简单,目前互联网上流行的众多SQL注入攻击工具,攻击者借助这些工具可以很快的对目标站点进行攻击或破坏,危害大。
3.危害极大
由于Web语言自身的缺陷,以及具有安全编程的开发人员较少,大多数web应用系统均具有被SQL注入攻击的可能,而攻击者一旦攻击成功,就可以对控制整个Web应用系统对数据做任何的修改或是窃取,破坏力达到了极致。

SQL注入攻击危害

1.未经授权的状况下操作数据库中的数据
2.恶意篡改网页内容
登陆后发布的内容,也可以发布对首页的非法更新,可以添加账户或是数据库账户,需要拿到Web Shell或者是更高权限;
3.私自添加系统账号或是数据库使用者账号
4.网页挂木马
拿到Web Shell或者获取到服务器的权限以后,攻击者可以将一些网页木马挂在服务器上攻击其他用户,在严重时可以控制整个服务器。

SQL注入攻击

SQL注入攻击基础概述

SQL注入攻击是攻击者对数据库进行攻击的常用手段之一。随着B/S模式(Browser/Server,浏览器/服务器模式)用用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。攻击者可以提交一段数据库查询代码,根据程序返回的结果,获取某些想要知道的数据。

SQL注入威胁表达方式

1.绕过认证,获得非法权限
2.猜解后台数据库全部信息
3.注入可以借助数据库的存储过程进行提权等操作

SQL注入典型攻击手段

1.判断应用程序是否存在注入漏洞
2.收集信息并判断数据库类型
3.根据注入参数类型重构SQL语句
4.猜解表名及字段名
5.获取账户信息,为攻击Web服务器或下一步攻击做准备

SQL攻击的种类划分

按照注入点类型分类

1.数字型注入
在URL中为:http://xxx.com/xxx.php?id=1这种形式,其中注入点id类型为数字,所以叫数字型注入点。这一类的SQL语句原型基本为:select * from 表名 where id=1
2.字符型注入
在URL中为:http://xxx.com/xxx.php?name=admin这种形式,其注入点name为字符型,所以叫字符型注入,这一类的SQL语句原型基本为:select * from 表名 where name='admin',相比于数字型多了'',注入攻击时需要闭合单引号。
3.搜索型注入
这是一类特殊的注入类型,主要是在进行数据搜索时没有过滤搜索参数,一般在链接地址中有keyword=关键字,有的不显示在地址链接中,而是直接通过搜索框提交,此类注入点提交的SQL语句原型基本为:select * from 表名 where 字段 like '%关键字%'

按照数据提交方式分类

1.GET注入
提交数据的方式为GET型,注入点的位置在GET参数部分,如http://xxx.com/xxx.php?id=1这种形式,id就是注入点
2.POST注入
使用POST方式提交数据,注入点位置在POST数据部分,常发生在表单中。
3.Cookie注入
HTTP请求的时候会带上客户端的Cookie,注入点存在Cookie当中的某个字段中
4.HTTP头部注入
注入点在HTTP请求头部的某个字段中,比如存在User-Agent字段中,严格讲的话,Cookie应该也算是HTTP头部注入的一种。

按照执行效果分类

1.基于布尔的盲注
可以根据返回页面判断条件真假的注入
2.基于事件的盲注
既不能根据页面返回内容判断任何信息,用条件语句参看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3.基于报错注入
页面会返回错误信息,或者把注入的语句结果直接返回在页面中。
4.联合查询注入
可以使用union的情况下的注入。
5.堆查询注入
可以同时执行多条语句的执行时的注入。

基于联合查询的注入

一般步骤:1.求闭合字符;2.求列数;3.求显示位;4.爆数据库名;5.爆表名;6.爆列名7.爆字段名

MySQL注入常用函数

一.注释风格
1.内联注释
MySQL数据库为了保持与其他数据库兼容,添加的新功能。为了避免从MySQL中导入的SQL语句不能被其他数据库所使用,把一些MySQL特有的语句放在/*!……*/中,在不兼容的数据库中使用便不会执行
注:在SQL注入攻击中,内联注释常用来绕过WAF
2.单行注释
#后面直接加内容
-- 后面必须加空格
3.多行注释
/**/中间可以跨行

二.union操作符
1.union操作符用于拼接两个或者多个select查询语句
2,union中的每个查询必须拥有相同的列数

三.常用函数

函数/语句功能
user()当前用户名
database()当前所用数据库
current_user()当前用户名(查询权限)
version()数据库版本
@@datadir数据库路径
load_file()读文件操作
Into outfile()/into dumpfile写文件操作

四.字符串连接函数
1.concat(str1,str2)函数
输出结果直接连接
在这里插入图片描述
2.group_concat(str1,str2)函数
输出结果使用逗号作为分隔符
在这里插入图片描述
3.concat_ws(sep,str1,str2)函数
输出结果使用第一个参数作为分隔符
在这里插入图片描述
五.information-schema结构
information-schema

  • schema       所有数据库的名字
    • schema_name  数据库名
  • tables        所有表的名字
    • table_schema  表所属数据库名
    • table_name   表的名字
  • columns       所有字段的名字
    • table_schema  字段所属数据库名
    • table_name   字段所属表的名字
    • column_name  字段的名字

SQL注入相关工具

SQLMAP

sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。

Pangolin

Pangolin能够通过一系列非常简单的操作,达到最大化的攻击测试效果。它从检测注入开始到最后控制目标系统都给出了测试步骤。Pangolin是目前国内使用率最高的SQL注入测试的安全软件,可以说是网站安全测试人员的必备工具之一。

啊D注入工具

啊D注入工具是一种主要用于SQL的注入工具,由彭岸峰开发,使用了多线程技术,能在极短的时间内扫描注入点。使用者不需要经过太多的学习就可以很熟练的操作。并且该软件附带了一些其它的工具,可以为使用者提供极大的方便。

Havij注入工具

Havijpro是一款自动化的SQL注入工具,能帮助渗透测试人员发现和利用Web应用程序的SQL注入漏洞。Havij不仅能够自动挖掘可利用的SQL查询,还能够识别后台数据库类型、检索数据的用户名和密码hash、转储表和列、从数据库中提取数据,甚至访问底层文件系统和执行系统命令,Havij支持广泛的数据库系统,如MySQL,MsSQL,MSAccess和Oracle。Havij支持参数配置以躲避IDS,支持代理,后台登陆地址扫描。

SQL注入防御

1.开发人员在开发过程中有SQL注入防御思想,对用户输入的所有内容都要进行过滤。
2.使用数据库时,命名应该较为复杂,不应出现amdin,user这样的库以及username,password这样的字段。
3.涉及密码的时候一定要加密存储。
4,使用一些框架及模版前检查代码是否有输入内容检测。
5.测试阶段,进行SQL注入测试。
6.数据库权限最小化,防止拿到Web Shell权限,不要用特权账户或者能够登陆系统的账户启动数据库。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值