SQL注入攻击原理以及基本方法
2018-03-30 09:30
162 查看
一、SQL注入的概述定义:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。 为了更直观的让大家了解到sql注入的原理,贴上一张sql注入攻击示意图
●SQL注入威胁表现形式可以体现为以下几点: ●绕过认证,获得非法权限 ●猜解后台数据库全部的信息 ●注入可以借助数据库的存储过程进行提权等操作●SQL注入攻击的典型手段 ●判断应用程序是否存在注入漏洞 ●收集信息、并判断数据库类型 ●根据注入参数类型,重构SQL语句的原貌 ●猜解表名、字段名 ●获取账户信息、攻击web或为下一步攻击做准备二、SQL注入的简单例子1.SQL注入漏洞的几种判断方法 ①http://www.heetian.com/showtail.asp?id=40' ②http://www.heetian.com/showtail.asp?id=40 and 1=1 ③http://www.heetian.com/showtail.asp?id=40 and 1=2 如果执行①后,页面上提示报错或者提示数据库错误的话,说明是存在注入漏洞的。 如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。2.收集信息、判断数据库类型 从其返回的信息中可以判断下数据库的类型,更多可能可以知道部分数据库中的字段以及其他有用信息,为下一步攻击提供铺垫。3.根据注入参数类型,重构SQL语句的原貌 ①ID=40 这类注入的参数是数字型,那么SQL语句的原貌大致是:Select*from 表名 where 字段=40
②name=电影 这类注入的参数是字符型,SQL语句原貌大致是:Select*from 表名 where 字段=‘电影’
③搜索时没有过滤参数的,如keyword=关键字,SQL语句原貌大致是:Select*from 表名 where 字段 like ‘%关键字%’
4.猜解表名、字段名(直接将SQL语句添加到URL后) ①and exists(select*from 表名) 如果页面没有任何变化,说明附加条件成立,那么就是说明猜解的表名正确,反之,就是不存在这个表,接下来就继续猜解,知道正确
②and exists(select 字段 from 表名) 方法原理同上 ③猜解字段内容(利用以上猜解出的表名和字段名 方法较古老且麻烦) ●猜解字段内容的长度 (select top 1 len(字段名)from 表名)>0 直至猜解到>n不成立的时候,得出字段的长度为:n+1。
●得到长度后,猜解具体的内容 (select top 1 asc(mid(username,1,1))from 表名)>0直到>m不成立时,就可以猜解出ASCII码值了。
●SQL注入威胁表现形式可以体现为以下几点: ●绕过认证,获得非法权限 ●猜解后台数据库全部的信息 ●注入可以借助数据库的存储过程进行提权等操作●SQL注入攻击的典型手段 ●判断应用程序是否存在注入漏洞 ●收集信息、并判断数据库类型 ●根据注入参数类型,重构SQL语句的原貌 ●猜解表名、字段名 ●获取账户信息、攻击web或为下一步攻击做准备二、SQL注入的简单例子1.SQL注入漏洞的几种判断方法 ①http://www.heetian.com/showtail.asp?id=40' ②http://www.heetian.com/showtail.asp?id=40 and 1=1 ③http://www.heetian.com/showtail.asp?id=40 and 1=2 如果执行①后,页面上提示报错或者提示数据库错误的话,说明是存在注入漏洞的。 如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。2.收集信息、判断数据库类型 从其返回的信息中可以判断下数据库的类型,更多可能可以知道部分数据库中的字段以及其他有用信息,为下一步攻击提供铺垫。3.根据注入参数类型,重构SQL语句的原貌 ①ID=40 这类注入的参数是数字型,那么SQL语句的原貌大致是:Select*from 表名 where 字段=40
②name=电影 这类注入的参数是字符型,SQL语句原貌大致是:Select*from 表名 where 字段=‘电影’
③搜索时没有过滤参数的,如keyword=关键字,SQL语句原貌大致是:Select*from 表名 where 字段 like ‘%关键字%’
4.猜解表名、字段名(直接将SQL语句添加到URL后) ①and exists(select*from 表名) 如果页面没有任何变化,说明附加条件成立,那么就是说明猜解的表名正确,反之,就是不存在这个表,接下来就继续猜解,知道正确
②and exists(select 字段 from 表名) 方法原理同上 ③猜解字段内容(利用以上猜解出的表名和字段名 方法较古老且麻烦) ●猜解字段内容的长度 (select top 1 len(字段名)from 表名)>0 直至猜解到>n不成立的时候,得出字段的长度为:n+1。
●得到长度后,猜解具体的内容 (select top 1 asc(mid(username,1,1))from 表名)>0直到>m不成立时,就可以猜解出ASCII码值了。
相关文章推荐
- SQL注入攻击原理以及基本方法
- SQL注入攻击原理以及基本方法
- SQL注入***原理以及基本方法
- glide的基本使用以及原理
- 视频二值化处理基本方法以及简单代码实现
- PerformanceCounter 基本介绍以及示例方法
- 图像语义分析学习(一):图像语义分割的概念与原理以及常用的方法
- 了解MmMapIoSpace以及MmUnmapIoSpace函数的实现原理以及实现方法
- Java的容器 HashTable 的几种基本方法 以及与HashMap的不同
- 【本文完全转载】JSON和JSONP的大概原理,以及jquery中ajax的jsonp、jsonpCallback方法的描述
- js中sort()方法的用法,参数以及排序原理
- SOA:原理•方法•实践,第 1 部分: SOA 的基本概念
- mdev的使用方法和原理以及实现U盘或SD卡的自动挂载
- 一些基本用户管理以及基本安装方法
- 了解MmMapIoSpace以及MmUnmapIoSpace函数的实现原理以及实现方法
- Lucene.net 原理介绍以及使用方法
- js中sort()方法的用法,参数以及排序原理
- Android开发——RecyclerView特性以及基本使用方法(二)
- 优化安卓应用内存的神秘方法以及背后的原理
- git的使用基本方法以及理解