one、概念

SQL注入(SQL Injection)就是攻击者将SQL语句通过Web网页注入到网站后台的数据库中,从而对数据库进行控制或者破坏。SQL注入是一种主流的攻击方式。在OWASP Top 10中,一直稳居第一。

two、原理

SQL注入攻击的原理就是由于Web后台对用户输入的数据不进行严格的检查导致的,使得攻击者可以通过在post/get等web表单、输入域名或页面请求的查询字符串中插入恶意的SQL命令,并被web服务器执行,从而绕过PHP等脚本的不严谨导致的漏洞,与数据库进行交互,而这些都不是设计者本来的设计意图。

three、类型

1、按照注入点类型来分类

在进行SQL注入的时候我们需要判断注入点的闭合条件,可将SQL注入点大致分为三类:数字型注入点、字符型注入点、搜索型注入点。

a、数字型注入点

顾名思义就是输入数据是数字的就是数字型注入,在使用带关于ID啊,岁数啊!就是这种注入点,而由于在弱数据类型中,是没有数据类型这一概念的(其实有但是不那么严谨),就比如说,PHP中输入的数据,PHP是可以自动推导出数据的数据类型的,而Python中是将输入的数据全部转换成字符串。

例如:
select * from 表名 where 数字型参数 = 1

b、字符型注入点

字符型注入点就是输入的数据是字符型,字符型与数字型的区别就是有没有引号括起来,但是一般情况下数字型也可以括起来,而字符型就行不行了,必须有引号。在使用带关于姓名,地址,就是这种注入点。

例如:
select * from 表名 where 字符型参数 = 'text'

c、搜索型注入点

搜索型注入点是在进行数据搜索时没过滤搜索参数,一般在链接地址中有"keyword=关键字",直接通过搜索框表单提交。

例如:
select * from 表名 where 字段 like '%关键字%'

2、按照数据提交的方式来分类

这种分类就是通过判断向数据库进行提交用到了那种提交方式,比较常用的有GET、POSH方式。

a、GET 注入

这种注入方式是通过GET请求方式向服务器提交数据,注入点位置在GET数据部分,在URL中显示。

b、POST注入

使用了POST请求方式向服务器提交数据,注入点位置在POST数据部分,没有在URL中显示。

d、HTTP头部注入

这种注入一般在在 HTTP 请求头部的某个字段中,比如UA或者cooke都有可能。

3、按照执行效果来分类

我们可以通过注入后,对返回的执行效果进行分析,可分为布尔型,时间型,报错型。

a、基于报错注入

基于报错注入是没有数据的回显位,也就是说即使构造语句成功,我们也没有办法看到数据的显示,但是这种注入型却可以通过页面执行后返回的错误信息显示在页面上,这时候我们可以利用这点来构造报错显示sql语句。

b、基于布尔的盲注

布尔的盲注就是说通过判断执行后返回效果,即真假两种答案进行语句猜测。
布尔型盲注是由于页面提交数据在与数据交互是完全没有在页面上出现回显数据,只会出现数据提交正确和错误两种不同页面(注意区别于报错型,报错会出现报错信息,而布尔型不会)。

例如:A问一个哑巴事情,对就点头,错就摇头。
场景如下:
A:“朋友,你是不姓张?”
哑巴:摇头
A:“我知道了,你姓李吗?”
哑巴:点头
A:“原来姓李”
然后A开始了新一轮的猜测

c、基于时间的盲注

时间型的注入遇到的条件更为苛刻,由于交互完成以后网站没有错误和正确的页面的回显,这种情况我们可以利用条件语句与时间延迟语句进行判断,关键函数是sleep()

4、按照组合查询来分类

a、联合查询注入

联合查询注入是可以使用union all的情况下的注入。

b、堆查询注入

堆查询注入是说可以同时执行多条SQL语句。

c、宽字节注入

宽字节注入就是由于后台机制会给特殊字符添加转义字符来达到防御的目的,即%--->\ 等, 但是当我们输入%5c%27,即(’),后台对%5c添加转义%df等于的我们输入的%5c%27组合就被添加为%df%5c%27,由于%df%5c是一个宽字节汉字,语句就会形成縗%27 -->縗'

four、危害

SQL注入作为OWASP Top 10的第一名,说明其危害性是可以说显而易见的。当攻击者控制一个企业的数据库的时候,可以想象下,我们如果在这个企业上有金额或者姓名、身份证等隐私数据将会被曝光,这是非常可怕的。

以下是说可能涉及到的危害:

  • 1、数据库信息泄露
  • 2、网页被篡改
  • 3、管理数据库后台
  • 4、盗取各类用户帐号
  • 5、控制网站服务器数据
  • 6、盗窃所属网站公司的商业价值资料

five、SQL注入攻击流程

攻击流程:

  • 1、判断交互方式
    在进行SQL注入时,我们需要知道是客户端使用什么方式与服务器进行交互的,一般是getpost
  • 2、寻找注入点,进行猜测注入,打破构造
    通过SQL语句进行测试注入,找出网页的语言漏洞,个人感觉这是最关键的一步。
    若不执行,说明注入是失败;若报错,说明语句可能有效;若执行语句并返回预计值,说明注入成功。
    常见的闭合有:''""()('')("")[]{}
  • 3、注入成功后,使用SQL语句进行数据库信息采集
    这一步就是需要熟悉SQL语句,从而查询数据库的基本信息。比如:寻找显示数据多少、数据库名称、数据库的表、数据库的列等等。
  • 4、当得到数据库信息后,我们就可以开始撰写报告了
    到了这一步基本渗透测试就完成了,然后整理信息,提交漏洞报告。

测试SQL:

检测SQL一般分两种:手工检查、全自动检测

  • 手工检查
    一般使用盲打的方式,就是不知道后台代码,靠自己的经验去猜测,或者使用一些比较敏感的符号''""()('')("")[]{}
    反正见到输入框或者是URL参数就是加代码。

  • 全自动检测
    检测工具:啊d注入工具、明小子、Pangolin、Sqlmap(推荐)

任何的检测方式都有利有弊,所以真正厉害的大牛,都是使用半手工半自动。

常见函数:

select system_user()--系统用户名
select user()--用户名
select current_user()--当前用户名
select session_user()--连接数据库用的用户名
select database()--数据库名
select version()--mysql数据库版本
select load_file(路径)--mysql读取本地文件的函数
select @@datadir--数据库路径
select @@basedir--mysql安装路径
select @@version_compile_os--操作系统

Six、防御措施

  • 过滤特殊字符
  • 使用严谨的函数
  • 尽量避免用户输入的数据与数据库直接交互
  • 多层验证
  • 对数据库信息进行密文加密
  • 尽量避免使用ROOT最高权限操作数据库

做一个网络的维护者,而不是攻击者!

安全漏洞中的屠龙刀——SQL注入相关推荐

  1. 安全漏洞问题6:SQL注入

    安全漏洞问题6:SQL注入 1.1. 漏洞描述 SQL注入是指利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的攻击方法. 通常Web 应用程序在后端使用数据库,查询数据库的语言一般是 ...

  2. Web系统常见安全漏洞介绍及解决方案-sql注入

    先看一下目录 一.常见漏洞类型 二.SQL注入 1.SQL 注入危险性.可能原因 2.场景重现 3.sql盲注 4.检测⽅法 5.防护⽅案 三.使用ORM框架 一.常见漏洞类型 关于web安全测试,目 ...

  3. SQL Server应用程序中的高级SQL注入

    作者:不详 来源:techtarget http://www.csai.cn 2006年5月11日 摘要:这份文档是详细讨论SQL注入技术,它适应于比较流行的IIS+ASP+SQLSERVER平台.它 ...

  4. SQL Server应用程序中的高级SQL注入[转]

    SQL Server应用程序中的高级SQL注入[从A.Z的POST里转载,经过整理] 作者:Chris Anley[chris@ngssoftware.com] An NGSSoftware Insi ...

  5. mysql limit sql注入_LIMIT子句中的盲 SQL注入漏洞利用

    原文:https://www.noob.ninja/2019/07/exploiting-tricky-blind-sql-injection.html 前言 嘿!有好长时间没有更新过博客了,不知道大 ...

  6. 网站漏洞修复方案防止SQL注入攻击漏洞

    SQL注入漏洞在网站漏洞里面属于高危漏洞,排列在前三,受影响范围较广,像asp..net.PHP.java.等程序语言编写的代码,都存在着sql注入漏洞,那么如何检测网站存在sql注入漏洞? SQL注 ...

  7. sql注入漏洞,应屏蔽SQL注入攻击

    2019独角兽企业重金招聘Python工程师标准>>> 注:SQL注入好比是前端URL传参数请求时参数以SQL 做为参数传入,如 select 1  from dual where ...

  8. php 越权 漏洞,PHPYUN最新版SQL注入及多处越权操作终结篇

    ### 简要描述: PHPYUN最新版(phpyun_v3.1.0604_gbk)SQL注入及多处越权操作 虽然PHPYUN在注入防御上已经做得很不错了,方的很严格,像吃掉引号,宽字节的基本上很少了, ...

  9. Linux注入漏洞,phpBB多个SQL注入漏洞

    发布日期:2012-07-28 更新日期:2012-08-01 受影响系统: phpBB Group phpBB 描述: --------------------------------------- ...

最新文章

  1. win8下Python学习——搭建web.py框架
  2. docker 容器互访三种方式
  3. linux卸载dev中的设备,Linux /dev 常见特殊设备介绍与应用
  4. JAVA基础--JAVA中的反射机制详解
  5. html5填空题阅卷,“过五关”般严格,高考阅卷老师来自哪里?研究生参与阅卷?
  6. 康力电梯开门不关门 服务器显示开门键动作,康力电梯现场调试后常见问题及排除...
  7. android 使用注解
  8. Python列表常用函数使用详解(内附详细案例)
  9. 混合云向边缘延伸!ZStack Mini超融合和ZStack CMP重磅发布!
  10. QT QComboBox使用详解
  11. 微信小游戏跳一跳外挂辅助程序
  12. kernel function
  13. Flutter(十七) 实现国际化
  14. C语言输入一个数,看它能否被3和5同时整除
  15. CSS中id选择器和类选择器的区别
  16. MSP432E401Y-用定时器中断控制LED闪烁
  17. 区块链具有的8种特性
  18. matlab生成随机数,matlab随机数生成方法
  19. 使用R语言从网易财经批量获取股票数据并进行整合的方法
  20. 工作无小事(第六周(2014.3.31~2014.4.6))

热门文章

  1. 门店零售系统有哪些功能模块?能带来哪些帮助?
  2. 6、iptables之RAW表和MANGLE表
  3. 数据库动态变化管理工具(Liquibase)学习
  4. 计算机专业学校排名北京,计算机专业全国高校排名,你的学校上榜了吗
  5. 基于SSM的中国传统文化非物质文化宣传管理系统
  6. 下肢康复机器人及其交互控制方法
  7. 污水处理软件c语言代码,污水处理方法代码简表
  8. c语言创建windows进程,C语言实现在windows服务中新建进程的方法
  9. 如何解决H5中获取相机与图片,在苹果手机获取不了文件选择图片的问题
  10. 02-JVM垃圾回收