SQL注入的原理:

定义:通过把SQL命令插入到 web表单提交、输入域名、页面请求的查询字符串,最终达到欺骗服务器 执行恶意的sql命令。

它的本质就是服务器对代码和数据不区分,未对用户提交的参数进行校检或者有效的过滤,直接进行sql语句的拼接,改变了原有的sql语义,传进数据库解析引擎中执行。

网页一般分为静态页面和动态页面。静态页面一般是HTML或者htm页面格式,不需要服务器解析脚本。也就不存在sql漏洞,但是它灵活性交互性就很差。动态页面一般是asp,jsp,php等页面格式,它是由相应的脚本引擎来解释执行,根据指令来生成网页。但是在与数据库交互时,可能会存在SQL漏洞。

动态网页访问过程:

SQL注入的场景:

一切用户可控参数的地方,比如:URL路径,GET/POST请求参数,HTTP请求头。

SQL注入过程:

详细过程:

①通过检查Web页面上存在的SQL注入漏洞,构建特殊的SQL注入点;

②其次通过这些特殊的注入点利用Web页面动态传递参数的功能,将SQL的语法组合动态传递给数据库;

③然后根据数据库的不同类型,对数据库采取不同的处理;

④最后执行SQL语句,从而达到攻击者想要的目的。

判断注入点:

在含有传递参数的动态网页中,判断是否存在注入漏洞。通常的判断方法有参数传递的地方输入参“and 1=1” ;“and 1=2”

结果:分别返回不同的页面,说明存在注入漏洞。

判断数据库类型:

通过函数来判断数据库类型:内置的函数的区别。

举例,len和length使用and len('a')=1的时候,返回正常页面时,mssql,或mysql。反之则可能会是oracle和informix

②--和# 这两个注释符号

MSSQSL是--,而MYSQL是#,ACCESS不支持注释

         HTTP://xxx.xxx.xxx/abc.asp?p=12--

         HTTP://xxx.xxx.xxx/abc.asp?p=12#

SQL注入的作用:

绕过登陆验证:使用万能密码登陆网站后台等;

获取敏感数据:获取网站管理员的账号密码等;

文件系统操作:列目录,读取,写入文件等;

注册表操作:读取、写入,删除注册表;

执行系统命令:远程执行系统命令。

注入漏洞分类

按照数据类型

数字型注入(Integer)

select * from table where id =1

字符型注入(String)

select * from table where username=‘test’

字符型注入最关键的是如何闭合SQL语句以及注释多余的代码

按返回结果

显错注入(Error-Based)

返回错误信息来判断结果

盲注(Boolean/Time-Based Blind)

在不知道数据库返回值情况下,对数据库的内容进行猜测

猜测

基于时间盲注

查看时间延迟语句是否执行,页面返回时间增加了

基于布尔盲注

返回页面来判断条件的真假(order by exists)

其他分类

 POST注入:注入字段在POST数据中

 Cookie注入:注入字段在Cookie数据中

搜索注入:注入处为搜索的点

Baes64注入:注入字符串需要经过base64加密

 布尔型盲注:即可以根据返回页面判断条件真假的注入

时间延迟型盲注

即不能根据页面返回内容判断任何信息,用条件语 句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断

报错回显型注入

即页面会返回错误信息,或者把注入的语句的结果 直接返回在页面中

联合查询型注入

可以使用union的情况下的注入

堆查询型注入

可以同时执行多条语句的执行时的注入

SQL注入利用工具- sqlmap

是一个自动化的SQL注入工具,其主要功能是扫描,发现并 利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB

五种SQL注入技术

基于布尔的盲注,即可以根据返回页面判断条件真假的注入

基于时间的盲注,即不能根据页面返回内容判断任何信息, 用条件语句查看时间延迟语句是否执行(即页面返回时间是否增 加)来判断

基于报错注入,即页面会返回错误信息,或者把注入的语句 的结果直接返回在页面中。

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

堆查询注入,可以同时执行多条语句的执行时的注入

SQLMAP常用命令

-u 指定检测的URL地址 –dbs 列出数据库

-D cms --tables 获取指定数据库cms的表名

-D cms -T cms_users --columns  获取指定数据库cms及指定表cms_users的列名

-r c:\sqltest.txt  加载请求数据

--cookie=COOKIE  登录后的cookie

--proxy="http://127.0.0.1:8080"  使用HTTP代理

防御SQL注入漏洞

过滤的对象

用户的输入

提交的URL请求中的参数部分

从cookie中得到的数据

部署防SQL注入系统或脚本

 过滤特殊字符

单引号、双引号、斜杠、反斜杠、冒号、空字符等的字符

str_replace方法把特殊字符替换成空格

SQL注入的原理、过程及如何防范相关推荐

  1. 什么是SQL注入攻击?SQL注入攻击原理是什么?

    SQL注入攻击是网络安全中非常常见的攻击方式之一,该攻击隐蔽性好.危害大.操作方便,也是各大企业及站长最容易遇到的攻击方式.那么SQL注入攻击原理是什么?如何防范?接下来跟着小编来看看吧. SQL注入 ...

  2. SQL注入基础原理与案例(详细总结)

    SQL注入基础原理与案例 一.前言 二.漏洞概述及危害 1.漏洞概述 2.漏洞危害 3.漏洞防范 三.SQL注入 1.SQL注入方式 (1)信息收集 (2)数据注入 (3)高权限注入 2.判断是否存在 ...

  3. sql注入的原理详解

    sql注入原理详解(一) 我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到 ...

  4. SQL注入的一般过程

    SQL注入的一般过程 概述 SQL注入的步骤 一道例题 总结 概述   SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添 ...

  5. sql注入基础原理(SQL injection)

    sql注入基础原理 文章目录 sql注入基础原理 Sql注入简介 案例表 产生sql注入的写法 python 相关 java 相关 php 相关 sql注入相关技术 B: 基于布尔的盲注特征 案例 总 ...

  6. sql注入的原理分析

    1.知识点一:什么是sql注入? 用户输入的内容被网站当做数据库语句进行执行.关键点:输入的内容 一定要是[数据库语句]. 用户输入的内容: 我们输入的内容. 在一个网站上能够输入的地方:     1 ...

  7. 逻辑sql注入_工程过程注入检测第3部分分析逻辑

    逻辑sql注入 This is the third post in a series covering some of the thought processes and methodologies ...

  8. web安全入门(第四章-1)SQL注入的原理分析

    1.SQL注入本质 注入攻击的本质,是把用户输入的数据当作代码执行这有两个条件: 第一个是用户能够控制输入 第二个是原本程序要执行的代码,拼接里用户输入的数据然后执行sql注入就是针对sql语句的注入 ...

  9. 浅谈SQL注入漏洞原理及利用方式

    1.SQL注入 原理: 在数据交互中,前端的数据传入到后台处理时,由于后端没有做严格的判断,导致其传入的恶意"数据"拼接到SQL语句中后,被当作SQL语句的一部分执行.漏洞产生于脚 ...

最新文章

  1. Bitcoin Core开发者:提倡使用信用卡进行日常开销而非比特币
  2. 图解Dev C++ 创建Win32 项目模板
  3. 程序员高薪盛宴背后:程序员正在消失?
  4. PHP下实现两种ajax跨域的解决方案之jsonp
  5. 【bzoj4592】[Shoi2015]脑洞治疗仪
  6. SAP CRM Enterprise Search 培训材料
  7. ztree 更新配置后重新渲染树_【问】zTree异步加载时添加父节点怎样避免再次加载整树...
  8. 在c语言中large的作用,输入两个数组,调用large函数比较,计数,输出统计结果...
  9. shell判端mysql数据库是否存在_Shell脚本检测和检查mysql数据库是否存在坏表
  10. [LeetCode]题解(python):016-3Sum Closest
  11. Front: 电子邮件通讯创业新模式
  12. java 释放对象_java基础:对象的销毁
  13. matlab wnetreg,MATLAB神经网络工具箱函数
  14. testbed与 c++test 的几点区别
  15. 读懂trace file (tkprof格式化) 6
  16. 为什么程序员都这么邋遢?
  17. 【C/C++学习笔记】C++11 Lambda 表达式 (匿名函数)(TR1)
  18. 用户画像(User Profile)概述
  19. js获取一段时间内工作日的天数
  20. google map的api价格介绍

热门文章

  1. 无法连接到此网络 win10
  2. 苹果:我们要建设美国新农村
  3. OLA音频变速算法的仿真与剖析
  4. 原版windows xp下载地址:
  5. 蓝魔法师——树形DP
  6. TypeError: db.collection is not a function
  7. 部署以太坊智能合约01
  8. jQuery是什么及jQuery写法
  9. 临界资源、临界区、信号量、P,V操作
  10. android 存储盘 dcim,什么是DCIM?手机照片的存储路径