SQL注入的原理、过程及如何防范
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注入的原理、过程及如何防范相关推荐
- 什么是SQL注入攻击?SQL注入攻击原理是什么?
SQL注入攻击是网络安全中非常常见的攻击方式之一,该攻击隐蔽性好.危害大.操作方便,也是各大企业及站长最容易遇到的攻击方式.那么SQL注入攻击原理是什么?如何防范?接下来跟着小编来看看吧. SQL注入 ...
- SQL注入基础原理与案例(详细总结)
SQL注入基础原理与案例 一.前言 二.漏洞概述及危害 1.漏洞概述 2.漏洞危害 3.漏洞防范 三.SQL注入 1.SQL注入方式 (1)信息收集 (2)数据注入 (3)高权限注入 2.判断是否存在 ...
- sql注入的原理详解
sql注入原理详解(一) 我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到 ...
- SQL注入的一般过程
SQL注入的一般过程 概述 SQL注入的步骤 一道例题 总结 概述 SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添 ...
- sql注入基础原理(SQL injection)
sql注入基础原理 文章目录 sql注入基础原理 Sql注入简介 案例表 产生sql注入的写法 python 相关 java 相关 php 相关 sql注入相关技术 B: 基于布尔的盲注特征 案例 总 ...
- sql注入的原理分析
1.知识点一:什么是sql注入? 用户输入的内容被网站当做数据库语句进行执行.关键点:输入的内容 一定要是[数据库语句]. 用户输入的内容: 我们输入的内容. 在一个网站上能够输入的地方: 1 ...
- 逻辑sql注入_工程过程注入检测第3部分分析逻辑
逻辑sql注入 This is the third post in a series covering some of the thought processes and methodologies ...
- web安全入门(第四章-1)SQL注入的原理分析
1.SQL注入本质 注入攻击的本质,是把用户输入的数据当作代码执行这有两个条件: 第一个是用户能够控制输入 第二个是原本程序要执行的代码,拼接里用户输入的数据然后执行sql注入就是针对sql语句的注入 ...
- 浅谈SQL注入漏洞原理及利用方式
1.SQL注入 原理: 在数据交互中,前端的数据传入到后台处理时,由于后端没有做严格的判断,导致其传入的恶意"数据"拼接到SQL语句中后,被当作SQL语句的一部分执行.漏洞产生于脚 ...
最新文章
- Bitcoin Core开发者:提倡使用信用卡进行日常开销而非比特币
- 图解Dev C++ 创建Win32 项目模板
- 程序员高薪盛宴背后:程序员正在消失?
- PHP下实现两种ajax跨域的解决方案之jsonp
- 【bzoj4592】[Shoi2015]脑洞治疗仪
- SAP CRM Enterprise Search 培训材料
- ztree 更新配置后重新渲染树_【问】zTree异步加载时添加父节点怎样避免再次加载整树...
- 在c语言中large的作用,输入两个数组,调用large函数比较,计数,输出统计结果...
- shell判端mysql数据库是否存在_Shell脚本检测和检查mysql数据库是否存在坏表
- [LeetCode]题解(python):016-3Sum Closest
- Front: 电子邮件通讯创业新模式
- java 释放对象_java基础:对象的销毁
- matlab wnetreg,MATLAB神经网络工具箱函数
- testbed与 c++test 的几点区别
- 读懂trace file (tkprof格式化) 6
- 为什么程序员都这么邋遢?
- 【C/C++学习笔记】C++11 Lambda 表达式 (匿名函数)(TR1)
- 用户画像(User Profile)概述
- js获取一段时间内工作日的天数
- google map的api价格介绍