sql注入原理详解(一)
我们围绕以下几个方面来看这个问题:

1.什么是sql注入?

2.为什么要sql注入?

3.怎样sql注入?

1.什么是sql注入?
  所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。 黑客通过SQL注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉。做为网络开发者的你对这种黑客行为恨之入骨,当然也有必要了解一下SQL注入这种功能方式的原理并学会如何通过代码来保护自己的网站数据库

sql注入原理:

下面我们来说一下sql注入原理,以使读者对sql注入攻击有一个感性的认识,至于其他攻击,原理是一致的。

 SQL注射能使攻击者绕过认证机制,完全控制远程服务器上的数据库。 SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL数据库来存放应用程序的数据。几乎所有的Web应用在后台 都使用某种SQL数据库。跟大多数语言一样,SQL语法允许数据库命令和用户数据混杂在一起的。如果开发人员不细心的话,用户数据就有可能被解释成命令, 这样的话,远程用户就不仅能向Web应用输入数据,而且还可以在数据库上执行任意命令了。SQL注入式攻击的主要形式有两种:

♦一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。上面笔者举的例子就是采用了这种方法。由于其直接与SQL语句捆绑,故也被称为直接注入式攻击法。

♦二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者作为原书据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记“—”来终止注入的字符串。执行时,系统会认为此后语句位注释,故后续的文本将被忽略,不背编译与执行。

2.为什么要sql注入?
♦SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。

防止SQL注入:

1、开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置

2、执行sql语句时使用addslashes进行sql语句转换

3、Sql语句书写尽量不要省略小引号和单引号

4、过滤掉sql语句中的一些关键字:update、insert、delete、select、*

5、提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。

6、Php配置文件中设置register_globals为off,关闭全局变量注册

7、控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。

如何进行防SQL注入?

1、过滤掉一些常见的数据库操作关键字:select,insert,update,delete,and,*等

或者通过系统函数:addslashes(需要被过滤的内容)来进行过滤

2、在PHP配置文件中Register_globals=off;设置为关闭状态 //作用将注册全局变量关闭。

比如:接收POST表单的值使用 P O S T [ ′ u s e r ′ ] , 如 果 将 r e g i s t e r g l o b a l s = o n ; 直 接 使 用 _POST['user'],如果将register_globals=on;直接使用 P​OST[′user′],如果将registerg​lobals=on;直接使用user可以接收表单的值。

  3、SQL语句书写的时候尽量不要省略小引号(tab键上面那个)和单引号4、提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,取不易被猜到的5、对于常用的方法加以封装,避免直接暴漏SQL语句6、开启PHP安全模式Safe_mode=on;7、打开magic_quotes_gpc来防止SQL注入Magic_quotes_gpc=off;默认是关闭的,它打开后将自动把用户提交的sql语句的查询进行转换,把'转为\',这对防止sql注入有重大作用。

因此开启:magic_quotes_gpc=on;

  8、控制错误信息

关闭错误提示信息,将错误信息写到系统日志。

9、使用mysqli或pdo预处理。

一句话总结,看程序员把这些改规范的规范掉了,就是见缝插针。

3.怎样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如果执行①后,页面上提示报错或者提示数据库错误的话,说明是存在注入漏洞的。如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。

因为正确的链接:http://www.heetian.com/showtail.asp?id=40 没有问题,如果如果执行①后,页面上提示报错或者提示数据库错误的话说明是不满足条件,说明查询的条件不满足,是有一个查询语句的,明是存在注入漏洞,如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。

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注入的原理详解相关推荐

  1. 张小白的渗透之路(二)——SQL注入漏洞原理详解

    SQL注入漏洞简介 乱七八糟的就不多说了,自己百度去 SQL注入原理 想要更好的学习SQL注入,那么我们就必须要深入的了解每种数据库的SQL语法及特性.下面通过一个经典的万能密码的例子带大家来拨开一下 ...

  2. 渗透测试---数据库安全: sql注入数据库原理详解

    文章目录 1 介绍 2 一般步骤 3 注入 3 函数 3.1 常用的系统函数 3.2 字符串连接函数 3.2.1 concat() 函数 3.2.2 concat_ws() 函数 3.2.3 grou ...

  3. SQL注入攻防入门详解

    转载自:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html SQL注入攻防入门详解 =============安全性篇目录= ...

  4. SQL 注入攻防入门详解

    为什么80%的码农都做不了架构师?>>>    SQL 注入攻防入门详解 原文出处: 滴答的雨 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对 ...

  5. 渗透测试SQL注入——Sqlilabs关卡详解

    目录 报错函数floor的利用 利用select into outfile写一句话木马 利用load_file 读敏感文件 利用sqlmap探测 sql盲注 get基于时间的盲注应用 post基于时间 ...

  6. 1.1 sql注入分类与详解

    1.基于报错的 SQL 盲注------构造 payload 让信息通过错误提示回显出来     这里来讲一下报错注入的原理(floor型爆错注入): 0x01:报错过程: 1.rand()用于产生一 ...

  7. SQL底层执行原理详解

    我们平时都是使用sql语句去查询数据,都是很直接的看到结果.那么对于sql底层执行的过程大家有了解吗? 一.MySQL的内部组件结构 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分 ...

  8. [转]SQL注入攻防入门详解

    Link : http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html

  9. Web网络安全漏洞分析,SQL注入原理详解

    本文主要为大家介绍了Web网络安全漏洞分析SQL注入的原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 一.SQL注入的基础 1.1 介绍SQL注入 SQL注入就是 ...

最新文章

  1. Markdown语法整理
  2. 每日一皮:年轻时的你,是不是也各种重构欲望?
  3. cmake find_package 中,include_directories,target_link_libraries 的值怎么知道?
  4. MongoDB学习札记第六篇之主从复制
  5. 0x0806 ARP协议分析
  6. [云炬ThinkPython阅读笔记]第一章 程序之道
  7. 推荐六款帮助你实现惊艳视差滚动效果的 jQuery 插件
  8. kind富文本编辑器_在VueJs中集成UEditor 富文本编辑器
  9. 哪款笔记本电脑好_扫地机器人哪个牌子好?口碑最好的扫地机器人
  10. 工作中由于任务分配注意问题
  11. select,poll,epoll的归纳总结区分
  12. Codeforces 1132E (看题解)
  13. Spring配置属性文件
  14. POI操作Excel表格相关API说明
  15. 将oracle的数据导入到mysql的三种方法
  16. 2022-2027年中国办公设备租赁市场竞争态势及行业投资潜力预测报告
  17. 银行如何构建反欺诈模型
  18. JavaScript实现汉字转拼音功能
  19. 无线工业物联网数据监测终端
  20. 《投射技术》与科学研究汉字笔迹心理学的希望

热门文章

  1. 如何解决百度云下载慢的问题
  2. 小程序开发框架介绍---remax 小程开发框架学习笔记
  3. 各种wifi共享妙招汇总
  4. 数据挖掘笔试面试(5)
  5. jQuery 基本语法学习
  6. ural 2032 Conspiracy Theory and Rebranding 整点三角形
  7. 帕金《宏观经济学》第8版课后习题答案
  8. 大学计算机未来五年规划,大学生活评价与未来五年计划(8页)-原创力文档
  9. 【云原生工具集】洋气·给程序自定义启动图案
  10. html5 canvas 扫雷游戏